今天我面試,面試官給了我一個需求,就是實現(xiàn)視頻幀列表拖拽排序,網(wǎng)上的都是網(wǎng)格排序啊,或者垂直排序,也沒有什么水平排序的資料,其實你根據(jù)邏輯,可以思考一下思路,我的思路如下:
1、首先你得建立一個適配器,去裝填數(shù)據(jù),而且排列方式是水平的
2、然后就得考慮一下事件的處理,因為拖拽的是recycleview的item,recycleview里面包含了一個工具類:ItemTouchHelper,你需要實現(xiàn)下面幾個方法:
getMovementFlags:這個是item移動的flag,就是判斷item的拖拽方向
onMove:這個方法是獲取在移動中的事件
onSelectedChanged:item長按選擇(主要是為了提示用戶你選擇了當前的item)
clearView:取消長按(為了恢復原狀)
當你new了這個類,需要和recycleview進行綁定,截屏一下源碼:

這個方法是為了將當前內(nèi)存中的recycleview進行綁定,因為后面要實現(xiàn)這個類里面的接口,進行對應(yīng)的拖拽操作
我們先從簡單的講起:

這個前面也說過,提示用戶選擇當前模塊,調(diào)用手機震動

這個是恢復后,保持排列,不會使數(shù)據(jù)錯亂。之所以調(diào)用notifyDataSetChanged(),是為了刷新數(shù)據(jù),讓列表數(shù)據(jù)不會錯亂

最重要的來了,當你選中item然后實現(xiàn)拖動,就會觸發(fā)這個事件。一個是被移動的item,另一個是要被裝填的item;當被移動的位置在被裝填位置的前面,那就遞增尋找位置,進行數(shù)據(jù)的重新置換排列,反之就遞減循環(huán),最后面再刷新一下位置,如果你不刷新,那就是兩個item層疊,錯位