所有文章
标签分类系列关于This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.
Android事件分发机制
传递流程
- Activity的
disPatchTouchEvent
方法接受到事件,然后传递到PhoneWindow的disPatchTouchEvent
,再从PhoneWindow传递到DecorView的disPatchTouchEvent
。 - 然后事件会到达根ViewGroup的
disPatchTouchEvent
,在这里会首先调用onInterceptTouchEvent
判断是否需要拦截。如果拦截,则调用自己的onTouchEvent
处理;不拦截则会遍历子View进行处理。 - 事件到达子View,会经
disPatchTouchEvent
到达onTouchEvent
,如果进行了处理,就返回true,表示事件已经消费掉,不会继续传递。 - 如果子View不处理并返回了false,事件会返回到父级ViewGroup的
disPatchTouchEvent
,然后直接到达ViewGroup的onTouchEvent
。 - 如果再不处理,就会继续向上冒泡,直到Activity的
onTouchEvent
。
需要注意
- 只有ViewGroup有#;
- 只有View的
onTouchEvent
是默认拦截的; - 重写
onTouchEvent
会出现警报,表示可能会引起click事件失效,所以需要手动调用performClick
方法,指定click事件的触发时机。