所有示图:
红色的箭头代表ACTION_DOWN 事件的流向
蓝色的箭头代表ACTION_MOVE 和 ACTION_UP 事件的流向
总结:
(1)对于在onTouchEvent消费事件的情况:在哪个View的onTouchEvent 返回true,那么ACTION_MOVE和ACTION_UP的事件从上往下传到这个View后就不再往下传递了,而直接传给自己的onTouchEvent 并结束本次事件传递过程。
(2)对于ACTION_MOVE、ACTION_UP总结:ACTION_DOWN事件在哪个控件消费了(return true), 那么ACTION_MOVE和ACTION_UP就会从上往下(通过dispatchTouchEvent)做事件分发往下传,就只会传到这个控件,不会继续往下传
(3)如果ACTION_DOWN事件是在dispatchTouchEvent消费,那么事件到此为止停止传递
(4)如果ACTION_DOWN事件是在onTouchEvent消费的,那么会把ACTION_MOVE或ACTION_UP事件传给该控件的onTouchEvent处理并结束传递。
1、ViewGroup1 的dispatchTouchEvent 方法返回true消费这次事件
ACTION_DOWN 事件从(Activity的dispatchTouchEvent)--------> (ViewGroup1 的dispatchTouchEvent) 后结束传递,事件被消费
2、ViewGroup2 的dispatchTouchEvent 返回true消费这次事件
3、View 的onTouchEvent 返回true消费这次事件
4、ViewGroup 2 的onTouchEvent 返回true消费这次事件
5、ViewGroup 1 的onTouchEvent 返回true消费这次事件
6、Activity 的onTouchEvent 返回true消费这次事件
7、View的dispatchTouchEvent 返回false并且Activity 的onTouchEvent 返回true消费这次事件
8、View的dispatchTouchEvent 返回false并且ViewGroup 1 的onTouchEvent 返回true消费这次事件
9、View的dispatchTouchEvent 返回false并且在ViewGroup 2 的onTouchEvent 返回true消费这次事件
10、ViewGroup2的dispatchTouchEvent 返回false并且在ViewGroup1 的onTouchEvent返回true消费这次事件
11、ViewGroup2的onInterceptTouchEvent 返回true拦截此次事件并且在ViewGroup 1 的onTouchEvent返回true消费这次事件。