看过很多事件分发的文章,大致的过程基本都能说上来,但是每当别人列举了一个小例子,问你事件是怎么分发的,事件触发了没有,就懵逼了,归咎原因还是没有吃透,下面列举几个小例子,权当回顾每个流程了
1.描述:viewC与ViewGroupB都是普通的view,没有点击事件,现在点击View
事件:
问题:对于U型事件传递大家应该很清楚了,但是ViewGroupB与ViewC都返回了false后,手势剩余部分是怎么传递的呢?
答案:因为ViewGroupViewB与viewC在dispatchTouchEvent,onInterceptTouchEvent,onTouch中都返回了false,所以手势剩余部分将不会传递给ViewGroupB与viewC,只会调用activity的dispatchTouchEvent与onTouch,貌似这个答案大家都清楚
本来原本结论到这里就结束了,和同事分享了一下,同事问,什么原理,是down事件记住了?还是别的逻辑....,好吧,只能看看源码了...
原理:
源码这里就不罗列了,当子 View中分发器中处理了该事件返回true,mFirstTouchTarget会被赋值,若返回了false,该值为null,所以在DecorView中不会分发到其子View中,所以其他后续事件move,up不会传递到ViewGroupB与ViewC中.
2.描述:viewC现在加入了点击事件,点击viewC之后,手指拖动,viewC上的点击事件会执行吗?
结论:不执行,但是我一直很纳闷,down事件被viewC消费,然后之后的move,up事件都会分发到viewC,为什么没有执行onclick事件呢?
当手指移动出控件所处的区域后,移除长按与点击的事件回调,并设置view的press状态为false,这样在up事件时,检测的该view不是处于press状态,就不会执行到performClick方法.
具体事件分析,会持续整理,这里抛砖引玉...
参考文章:https://www.jianshu.com/p/2be492c1df96