滑动冲突的补充——Event的流程走向

Posted 技术丶从积累开始

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了滑动冲突的补充——Event的流程走向相关的知识,希望对你有一定的参考价值。

一、之前分析的滑动冲突,并没有讲述event事件是如何分发到不同的控件

View的滑动冲突

现在分析一下滑动冲突event事件的流向

假设:  我们的一个事件为  点下——>左滑动一次——>松手   这三个为该事件的子事件

点下:

当点击屏幕的时候,点击事件会从Activity层 经过 Window 到 DecoreView,并调用DecoreView的dispatchTouchEvent()方法向下分发。

根据上次的文章,会先分发到HorizonLayout控件中,调用dispatchTouchEvent()方法,根据View的事件分发机制进入到onInterceptTouchEvent()中,根据代码,我们选择不拿到该事件,之后事件会传给下面的ListView,调用子类的onTouchEvent()方法,ListView选择拿到该事件。

滑动一次:

当ListView消耗完成“点下”事件的时候,android就会发送“滑动一次事件”,步骤同上,调用DecoreView的dispathTouchEvent()方法,然后根据 判断“子类获取到了总事件(因为拿到了ACTION_DOWN事件)” 还是会调用onIntercepTouchEvent(),这时候onInterceptTouchEvent()拿到事件。则调用其onTouchEvent()方法,就代表子类的事件被截取了,则子类就不拿到事件,交给了父类的onTouchEvent()方法,所以这时候父类的onInterceptTouchEvent()也就不会被调用了,直接调用父类的onTouchEvent()方法。

松手:

因为事件被父类的onTouchEvent()截取了,所以最后就是调用父类的onTouchEvent()方法。

以上是关于滑动冲突的补充——Event的流程走向的主要内容,如果未能解决你的问题,请参考以下文章

Android 解决WebView和ScrollView滚轮滑动冲突

Android 解决viewPager中嵌套webView的滑动冲突

ViewPager2 TabLayout Fragment RecyclerView滑动冲突

Android 中 DrawerLayout + ViewPager 怎么解决滑动冲突

UIScrollView 嵌套UITableView 左滑删除和UIScrollView滑动冲突

View的滑动冲突