Android 事件分发规律总结
定义
事件序列:手指接触屏幕开始到离开屏幕为止产生的事件为一次事件序列。
规律一
从父视图的角度来看,无论他的子视图是 View 还是 ViewGroup,对父视图来说都是透明的。它只知道如果当 ACTION_DOWN 事件传给子视图后子视图的 dispatchTouchEvent () 返回 true,说明子视图想要处理这个事件,那么以后的事件就都交给它,不管以后子视图的 dispatchTouchEvent() 返回的是 true 还是 false; 如果 ACTION_DOWN 事件传给子视图后子视图返回的是 false,那么以后的事件再也不会传给子视图(子视图没有处理 ACTION_DOWN 就视作它不想处理该事件序列)。如果一个子视图的 dispatchTouchEvent() 在处理 ACTION_DOWN 时返回 true ,只要父视图没有拦截事件, 那么该事件序列中的后续事件都会传入该视图中,也就是传入该视图的 dispatchTouchEvent() 方法中,就算手指的触摸区域已经超出了该视图的范围。并且对于该事件序列的之后所有事件,即使该视图的 dispatchTouchEvent() 返回 false 事件也同样会继续传入该视图,唯一的影响是会将该事件原路返回,最终落到 activity.onTouchEvent() 中。因此建议如果消耗了该事件,除非有特殊情况需要处理,最好不要返回 false,否则上级视图以为下面的视图没有处理事件从而自己处理。