点击事件的分发过程由3个很重要的方法来共同完成:
- 用来进行事件的分发(由接受事件的父View进行分发)
public boolean dispatchTouchEvent(MotionEvent ev);
- 用来判断是否拦截某个事件
public boolean onInterceptTouchEvent(MotionEvent ev);
- 用来处理点击事件
public boolean onTouchEvent(MotionEvent ev);
三者关系可以用以下伪代码表示:
public boolean dispatchTouchEvent(MotionEvent ev){
boolean consume = false;
if (onInterceptTouchEvent(ev)){ //是否被父View拦截
consume = onTouchEvent(ev); //是否被父View消耗
} else {
consume = child.dispatchTouchEvent(ev); //交给子View处理
}
}
流程图如下: