- 事件流:整个事件分发流程,会有大量的MotionEvent对象,一次完整的流程包含:ACTION_DOWN(1次) -> ACTION_MOVE(N次) -> ACTION_UP(1次)。我喜欢用流的视角去看待这些点击事件,我们称之为事件流。
- 事件分发的顺序
一个点击事件发生后,首先传到Activity,再传到ViewGroup,最终传到View - 协作完成事件分发的三个方法
- dispatchTouchEvent(event) : boolean --> 当前控件被分发到事件的入口,返回true,代表事件被当前控件消费,false代表不消费
- onTouchEvent(event) : boolean --> 处理点击事件
- onInterceptTouchEvent(event) : boolean --> 判断是否拦截了某事件
- 事件的分发流程:
- Activity对点击事件的分发机制:
- Activity#dispatchTouchEvent --> PhoneWindow#superDispatchTouchEvent --> DecorView#superDispatchTouchEvent --> DecorView(ViewGroup)#dispatchTouchEvent 经过这个流程,事件就由Activity分发到了ViewGroup
- ViewGroup对事件的分发
- Activity对点击事件的分发机制:
Android事件分发机制
2019-07-19