滑动冲突的补充——Event的流程走向
Posted 技术丶从积累开始
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了滑动冲突的补充——Event的流程走向相关的知识,希望对你有一定的参考价值。
一、之前分析的滑动冲突,并没有讲述event事件是如何分发到不同的控件
现在分析一下滑动冲突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 怎么解决滑动冲突