Android 的事件分发流程:Activity -> ViewGroup -> View 即:1个点击事件发生后,事件先传到
Activity
、再传到ViewGroup
、最终再传到 View。
如果事件不被中断,整个事件流向是一个类U型图,我们来看下这张图:
可以看出
- android的事件传递机制是责任链模式,如果自己能处理就拦截下来自己处理,如果自己处理不了或者不确定就传递给下一个对象。
- 事件处理方式:拦截、分发、消费
-
类型 相关方法 Activity ViewGroup View 事件分发 dispatchTouchEvent 有 有 有 事件拦截 onInterceptTouchEvent 无 有 无 事件处理 onTouchEvent 有 有 有 以上三个方法,均有boolean类型的返回值,通过设置true,false来控制事件传递的流程
Activity和View均没有事件拦截方法,是因为
1)、Activity作为事件响应起点,如果,Activity把事件拦截了,辣么将为导致整个屏幕都无法点击
2)、View作为事件响应的最末端,要么消费事件,要么不处理回传,没必要拦截事件
文章评论