废话不多说,直接上图
图解: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上,就会按照图右边执行的流程执行下去了。