在这种场景下ACTION_MOVE和ACTION_UP将如何呢,看下面的打出来的日志
Activity | dispatchTouchEvent --> ACTION_MOVE
ViewGroup1 | dispatchTouchEvent --> ACTION_MOVE
----
TouchEventActivity | dispatchTouchEvent --> ACTION_UP
ViewGroup1 | dispatchTouchEvent --> ACTION_UP
----
下图中
红色的箭头代表ACTION_DOWN事件的流向
蓝色的箭头代表ACTION_MOVE和ACTION_UP事件的流向
Paste_Image.png
2、我们在ViewGroup2的dispatchTouchEvent返回true消费这次事件
Activity | dispatchTouchEvent --> ACTION_DOWN
ViewGroup1 | dispatchTouchEvent --> ACTION_DOWN
ViewGroup1 | onInterceptTouchEvent --> ACTION_DOWN
ViewGroup2 | dispatchTouchEvent --> ACTION_DOWN
---->消费
Activity | dispatchTouchEvent --> ACTION_MOVE
ViewGroup1 | dispatchTouchEvent --> ACTION_MOVE
ViewGroup1 | onInterceptTouchEvent --> ACTION_MOVE
ViewGroup2 | dispatchTouchEvent --> ACTION_MOVE
----
TouchEventActivity | dispatchTouchEvent --> ACTION_UP
ViewGroup1 | dispatchTouchEvent --> ACTION_UP
ViewGroup1 | onInterceptTouchEvent --> ACTION_UP
ViewGroup2 | dispatchTouchEvent --> ACTION_UP
----
红色的箭头代表ACTION_DOWN事件的流向
蓝色的箭头代表ACTION_MOVE和ACTION_UP事件的流向
Paste_Image.png
3、我们在View的dispatchTouchEvent返回true消费这次事件
这个我不就画图了,效果和在ViewGroup2的dispatchTouchEvent return true的差不多,同样的收到ACTION_DOWN的dispatchTouchEvent函数都能收到ACTION_MOVE和ACTION_UP。
所以我们就基本可以得出结论如果在某个控件的dispatchTouchEvent放回true消费终结事件,那么收到ACTION_DOWN的函数也能收到ACTION_MOVE和ACTION_UP。
4、我们在View的onTouchEvent返回true消费这次事件
红色的箭头代表ACTION_DOWN事件的流向
蓝色的箭头代表ACTION_MOVE和ACTION_UP事件的流向
5、我们在ViewGroup 2的onTouchEvent返回true消费这次事件
红色的箭头代表ACTION_DOWN事件的流向
蓝色的箭头代表ACTION_MOVE和ACTION_UP事件的流向
6、我们在ViewGroup 1的onTouchEvent返回true消费这次事件
红色的箭头代表ACTION_DOWN事件的流向
蓝色的箭头代表ACTION_MOVE和ACTION_UP事件的流向
Paste_Image.png
7、我们在Activity的onTouchEvent返回true消费这次事件
红色的箭头代表ACTION_DOWN事件的流向
蓝色的箭头代表ACTION_MOVE和ACTION_UP事件的流向
8、我们在View的dispatchTouchEvent返回false并且Activity的onTouchEv
本文来源:不详 作者:佚名