事件分发机制
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;
}
网友评论