事件分发机制的疑问
Posted zhangjin1120
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了事件分发机制的疑问相关的知识,希望对你有一定的参考价值。
事件分发机制到底是什么?
down,move,up,cancel事件的传递和处理机制。
事件分发机制要解决什么问题?
用户点击操作到底由谁来负责处理?
down事件是怎么传递的?
先从Activty传递给ViewGroup:
再从ViewGroup传递到View:
move、up事件和down事件传递的区别是什么?
如果一个子view处理了down事件,也就是返回了true。那么单链表中,会记录这个子view,后续的move和up事件都会分发给这个子view处理。如果这个子view返回false,大概率是这个子view不可点击,那么就会由别的子view或者父类的ViewGroup消费这个事件,那么单链表里面,就没有这个子view了,那么后续的move和up也就不会再派发给这个子view。所以准确的说法应该是如果某个子view,对down事件返回false,那么move和up事件就不会再派发给这个子view,而不是说move和up事件不会再执行。
为什么会有滑动冲突?
ViewGroup默认不拦截事件,都交给子View处理,所以就会出现ViewPager内部嵌套RecyclerView,只有RecyclerView可以滑动,ViewPager无法滑动。如果ViewPager改为拦截down事件,那么move和up都不会再向下传递,这个时候又会出现新的问题,就是ViewPager可以滑动,但是RecyclerView不能滑动。
所以,解决办法是ViewPager只拦截水平方向的move事件,down、up和垂直方向的move都不拦截。
Down、Up事件的分发过程
Android事件传递机制
Android View滑动冲突解决方式以及原理
以上是关于事件分发机制的疑问的主要内容,如果未能解决你的问题,请参考以下文章