• 事件流:整个事件分发流程,会有大量的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对事件的分发