Android 事件传递

事件传递总得来说就是自上而下一次传递,通过分发,拦截,处理等步骤,从上到下,依次分发询问,中间可进行拦截,可进行消费。
先看下图:


上图针对的是 ACTION_DOWN 事件。

  1. Activity 接收事件后,由 dispatchTouchEvent进行分发。Activity 的 dispatchTouchEvent 如果不调用 super (无论返回 true or false)则事件不会向下分发。所以一般 activity 的 dispatchTouchEvent 需要调用 super 才能向下分发。
  2. ViewGroup 的 dispatchTouchEvent,用来向下分发事件。如果此方法内不调用super,直接返回 true 则代表直接消费终止。返回 false 代表不在分发直接交给复层处理。调用 super 则会执行 onInterceptTouchEvent 方法。
  3. onInterceptTouchEvent 方法用来判断当前 ViewGroup 是否需要拦截此事件。如果拦截返回 true,则直接调用当前 ViewGroup 的 onTouchEvent 自己处理。不需要拦截返回 false 或者直接调用 super 即可。
  4. 最下次 View 的 dispatchTouchEvent 接受到事件后,true 代表消费终止,false 则直接调用自己的 onTouchEvent处理事件。注意 View 没有 onInterceptTouchEvent,此方法只有 ViewGroup 有。

MOVE 和 UP 事件

down 事件在哪个View 消费了,那么 move 和 up 事件就只会从上向下传递到这个 view,不会继续向下传递。