事件分发总结

##伪代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public boolean (MotionEvent ev) {
boolean consume = false;
if (onInterceptTouchEvent(ev)) {
//如果注册的有OnTouchListener,先执行OnTouchListener的onTouch方法
if(haveOntouchListener){
if(!OnTouchListener.onTouch()){
onTouchEvent();
}
}
//如果拦截了,那么事件交给当前view的onTouchEvent(ev)
//方法进行处理,返回值即onTouchEvent(ev)的结果
consume = onTouchEvent(ev);
} else {
//如果不拦截,那么事件交给子view的dispatchTouchEvent(ev)
//方法进行处理,返回值即是dispatchTouchEvent(ev)事件
//处理结果
consume = child.dispatchTouchEvent(ev);
}
return consume;
}