1 事件传递顺序
Activity->ViewGroup->View,所以事件分发的机制也分为Activity、viewGroup、view三种
2 Activity事件分发
a.图
b 解释:调用activity的dispatchTouchEvent后,事件会从activity传递到phoneWindow,再传递到DecorView,再到viewGroup当中,然后判断viewGroup是否消费该事件,消费了的话则activity的事件分发结束且返回true,viewGroup没消费的话,则会判断点击事件是否在window边界之外,在边界之外则消费并返回true,否则在边界内则返回false
3 ViewGroup事件分发
a.图
b.解释:调用viewGroup的dispatchTouchEvent后,首先判断onInterceptTouchEvent是否拦截该事件,如果拦截的话,会调用viewGroup父类(View)的dispatchTouchEvent方法,进而调用onTouch-》onTouchEvent-》PerformClick-》onClick方法,自己去处理该事件,如果没拦截的话,会遍历子view,寻找到被点击的子view,进而调用子view的dispatchTouchEvent
4 View事件分发
a.图
b.解释:调用view的dispatchTouchEvent,然后判断是否注册touch事件监听,注册了的话则调用onTouch方法,onTouch如果返回true,则代表消费了事件,view的dispatchTouchEvent返回true,否则调用onTouchEvent方法,接着判断是否注册了click事件,注册了的话调用onClick方法,没注册则结束,同样,没注册touch事件监听,也是走到onTouchEvent方法,调用onclick
网友评论