ScrollView ViewPager RecycleView 嵌套 滑动冲突 整理 解决方案

前一段时间有人问关于滑动冲突的问题,所以参照网络一些文章抽时间做了一下整理。

滑动冲突
三种会出现滑动冲突根本情况:
1方向不同(Scrollview里嵌套viewpager)
2方向相同(Scrollview里嵌套recycle,Viewpager里嵌套viewpager)
3前两种的嵌套(例:Scrollview里viewpager里recycle)

问题产生原因:
同一触摸事件 在 同一时刻 只能有一个view或viewgroup 进行消费
解决方案:
控制让 触摸事件在某一时刻时间 由应该执行的那个view或viewgroup 执行消费(这一时刻由这个,那一时刻由那个)。


方向不同的两种方法:
1外部:
重写父view。如onInterceptTouchEvent,如果是父view需要的方向在滑动,就拦截,如果不是就不拦截。如ondispathTouchEvent,如果父viw需要就不分发,不如要就分发。如Scrollview里嵌套viewpager,在Scrollview中不分发或拦截上下方向。
2内部:
重新子view,如果需要就在ondispathTouchEvent请求父view不拦截,getParnt().requestDisallowInterceptTouchEvent(true);


方向相同的方法:
1viewpager与viewpager的嵌套,一般重写子viewpager,在ondispath里根据父viewpager是第几页和子view第几页的条件按需求判断是否子viewpager是否需要滑动,需要的话就请求父viewpager不拦截
2scrollview嵌套recycle,出现的问题较多,如:recycle显示不完全安卓6.0以上的问题(重写recycle的layoutmanager或在recycle外嵌套一个relative,都有效但是有的机型无效),滑动冲突(设置按照Scrollview的滑动recyclerView.setNestedScrollingEnabled(false);),嵌套布局,不显示顶部布局控件,直接显示下面recycle的第一个item(设置滑动到顶部scrollto),scrollview下嵌套布局有时会什么也消失不出来,加入fillViewport,没有此属性时Scrollview下的view会按照wrap_content计算。使用desgin库的NestedScrollview来嵌套recycle,直接就不用要处理了。
3scrollview嵌套scrollview,同理与viewpager与viewpager的嵌套。都是根据需求,来请求不拦截的。

前两种的嵌套解决方法:

有空写吧

touch分发机制
https://www.jianshu.com/p/e99b5e8bd67b

猜你喜欢

转载自blog.csdn.net/qq_36467463/article/details/81217414