天天看點

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