废话不多说, 直接上图
Android 事件分发原理
图解: Android 中事件分发的起始点是 Activity, 有 Activity 里的 Detorview 通过 DispatchTouchEvent 开始分发, 如图假设一个 DOWN,MOVE,UP 事件中的 DOWN 事件传入, 通过 Detorview 的 DispatchTouchEvent 传到某一个 ViewGroup 中, ViewGroup 也会经过 DispatchTouchEvent 分发事件, 在 View 树中的分发无非有几个方向, 它的父节点, 它自己, 它的子节点, 它的兄弟节点, 其中兄弟节点是不可能出现的情况, 在树中, 兄弟节点是不会有连接点的, 所以我们可以看到图中父节点的分发通过在 DispatchTouchEvent 函数中返回 false 来搞定, 它自己通过返回 true 来搞定, 至于它的子节点可能会复杂一些, 它还会通过本身的 OnInterceptTouchEvent 来分发事件, 其本质原因在于在该事件设计中 DispatchTouchEvent 本身只负责单一事件的分发, 而 OnTouchEvent 会负责通过分析多个事件确定这多个事件的行为, 比如 Onclick 这样一个行为是由 DOWN 事件和 UP 事件组成的. OnInterceptTouchEvent 被设计出来就是为了在某些特定的场景下, 让开发者可以灵活生成由多个事件组成的行为. 最后事件会分发到对应的 View 上, 就会按照图右边执行的流程执行下去了.
来源: http://www.jianshu.com/p/6ba080e1bd79