事件分发机制的疑问

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滑动冲突解决方式以及原理

以上是关于事件分发机制的疑问的主要内容,如果未能解决你的问题,请参考以下文章

Android系列View的事件分发机制

Android事件分发机制理解

Android 事件分发事件分发源码分析 ( ViewGroup 事件传递机制 四 | View 事件传递机制 )

Android事件分发机制五:面试官你坐啊

Android View 事件分发机制

Android-点击事件分发机制验证