分為 3 步驟:
1. google 可上下拖曳換位置的功能
2. 改成按著 childView 才能拖曳
3. 禁止特定位置換位置的功能
1. google 可上下拖曳換位置的功能
google recyclerView 拖曳,就會看到一些整理好的中文網站,拾人牙慧,大概拼拼湊湊就寫成了一個長按 viewHolder 可以上下換位子的功能。參考
任意移動的RecycleView -使用ItemTouchHelper 上下拖曳篇
RecyclerView 梳理:點選&長按事件、分割線、拖曳排序、滑動刪除
2. 改成按著 childView 才能拖曳
這邊找有點久,用「recyclerview drag and drop childview」去 google 找到都不太相干,英文差就是吃虧QQ,原來在官方文檔就有,真佛心~https://developer.android.com/reference/android/support/v7/widget/helper/ItemTouchHelper#startdrag
Drag And Drop The Descendants Of Viewholder |
先將你建立的 ItemTouchHelperCallback#isLongPressDragEnabled 返回 false,我們手動處理每個拖曳事件,在 adapter#onBindViewHolder 時去為你要作用的 childView 設置觸控監聽,這樣就完成惹。
3. 禁止特定位置換位置的功能
我們可以看看別人的例子https://github.com/devWilly/TabLayoutEx/blob/master/app/src/main/java/com/devwilly/tutorial/tablayoutex/callback/SimpleItemTouchHelperCallback.java
這邊他要禁止 position 0 移動,於是在 #onMove 時根據位置 fromPosition 去判斷,如果是 0 就不移動,不去執行 #mItemTouchCallBack.onItemMove ,這樣就完成了禁止某些位置移動的效果。
其實我從剛開始寫扣就覺得拖曳 view 好像是極難學會的技巧,以至於最早還是用別人的 lib,那時候也沒能力去讀別人的 source code ,只是寫久了,好像漸漸揭開戰爭迷霧,真開心哪。
沒有留言:
張貼留言