Android事件分发
Android 中和事件分发相关的主要有三个方法,分别是 dispatchTouchEvent(…)、onInterceptTouchEvent(…) 和 onTouchEvent(…),主要作用是分发事件、是否拦截事件以及处理事件,这些方法的返回值决定了 Touch 事件的传递方向,方法的包涵情况具体如下表所示:
dispatchTouchEvent(…) | onInterceptTouchEvent(…) | onTouchEvent(…) | |
---|---|---|---|
Activity | yes | no | yes |
ViewGroup | yes | yes | yes |
view | yes | no | yes |
以下为事件分发流程图(针对于 ACTION_DOWN 事件,可点击查看大图)
如图所示的事件传递流向已十分清晰,demo 也十分易写,只需自行重写这些方法,打印日志便可验证。
对于 ACTION_MOVE 和 ACTION_UP 事件的传递则略有不同,它们的传递和 ACTION_DOWN 事件传递的终点相关,以下举例。
1)在 View 的 onTouchEvent 消费事件,即 return true。
日志:
事件传递的流向图:
2)在 ViewGroup 的 onTouchEvent(…) 消费事件,即 return true。
日志:
事件传递的流向图:
3)在 ViewGroup 的 dispatchTouchEvent(…) 方法中 return false。
日志:
事件传递流向图: