view事件分发机制

事件分发机制

dispatchTouchEvent

处理事件的分发,如果事件能够传递给当前view那么这个方法一定被调用,返回结果受当前view和子view的dispatchTouchEvent方法的影响

onIntercrptTouchEvent

在diispatchTouchEvent方法中执行,用来判断是否拦截此事件,若拦截,则在同一个事件序列中,此方法不会再次被调用

onTouchEvent

还是在dispatchTouchEvent中调用,用来处理点击事件,返回结果表示是否消耗当前事件,若不消耗,则在同一个事件序列中,当前view无法再次接收到事件

总而言之,onInterceptTouchEvent 和onTouchEvent均在dispatchTouchEvent中调用。

下面伪代码可以很形象的表示三个方法的关系

public boolean dispatchTouchEvent(MotionEvent ev){

boolean consume=false;

if(onInterceptTouchEvent(ev))(

consume=onTouchEvent(ev);

)else{

consume=child.dispatchTouchEvent(ev);

}

return consume;

}

你可能感兴趣的:(view事件分发机制)