當前位置:編程學習大全網 - 源碼下載 - 類似支付寶應用管理界面——RecycleView+ItemTouchHelper實現拖拽滑動

類似支付寶應用管理界面——RecycleView+ItemTouchHelper實現拖拽滑動

以下就是通過RecycleView+ItemTouchHelper實現拖拽滑動的效果圖,看起來有沒有很炫酷。其實實現起來很簡單,我們接下來就開始介紹。

ItemTouchHelper是壹個強大的工具,它處理好了關於在RecyclerView上添加拖動排序與滑動刪除的所有事情。它是RecyclerView.ItemDecoration的子類,也就是說它可以輕易的添加到幾乎所有的LayoutManager和Adapter中。它還可以和現有的item動畫壹起工作,提供受類型限制的拖放動畫等等。

因為要使用RecycleView,同時ItemTouchHelper也是RecycleView中的類。

為了使用ItemTouchHelper,妳需要實現ItemTouchHelper.Callback接口,通過這個接口,妳可以監聽“move”和 “swipe”事件,在這裏妳也可以控制View的選擇狀態和重寫默認動畫。

必須實現主要的回調方法:

具體解釋這三個方法:

ItemTouchHelper允許妳判斷事件方向。但妳必須覆寫getMovementFlags()方法去指定支持哪些方向。使用ItemTouchHelper.makeMovementFlags(int, int)創建代表方向的Flag。這裏我們同時支持drag和swipe。實現這個方法,ItemTouchHelper可以只能drag而不能swipe(反之亦然),總之根據自己的需求指定。

當Item移動或者滑動時,會回調這兩個方法,然後可以在這兩個方法內部設置回調通知更新適配器或者頁面顯示的數據。

我們還將使用2個幫助方法:

實現isLongPressDragEnabled()方法返回true去支持長按RecyclerView的item時的drag事件。或者,也可以調用ItemTouchHelper.startDrag(RecyclerView.ViewHolder) 方法來開始壹個拖動。

實現isItemViewSwipeEnabled()方法返回true開啟觸摸視圖時的swipe功能。另外ItemTouchHelper.startSwipe(RecyclerView.ViewHolder)也開始swipe事件。

設置給RecycleView:

實現了以上的方法後,就會監聽到拖拽和滑動的手勢,並會處理相關操作。

接下來需要做的就是把實現的自定義ItemTouchHelper.Callback類設置給RecycleView。

以上就是關於RecycleView+ItemTouchHelper實現拖拽滑動的簡單介紹,下面為實現上述效果圖,具體講解其實現過程。

壹***用了兩個RecyclerView來分別實現我的頻道和更多頻道的內容,其實可以使用壹個RecyclerView通過判斷類型來實現多布局類型,效果會更好,後續會嘗試,暫時先這樣了。感興趣的可以參考我的 另壹篇文章 來自行實現。

先來個簡單的,就是點擊Item後,我的頻道和更多頻道中,壹個頻道刪除點擊的頻道,另壹個頻道增加該頻道。

思路:設置Item的點擊事件的監聽

在Adaper類中,設置監聽接口,並提供傳入接口對象的方法讓Activity調用

當點擊Item後,出發監聽,產生回調

在Activity中根據傳入的數據進行操作

我的頻道所對應的RecyclerView的操作

更多頻道所對應的RecyclerView的操作

主要實現兩個內容:

第壹:RecyclerView中內容數據的修改更新,呈現點擊後增刪的效果。

第二:調用方法通知進行緩存處理,記錄修改後的效果。同時通知新聞首頁中頻道的更新顯示。關於第二部分的內容不詳細介紹了,可以看最下方的源碼地址。

先根據布局 判斷支持的拖拽的方向 ,如果是GridLayoutManager 和StaggeredGridLayoutManager支持上下左右拖拽,如果是LinearLayoutManager支持上下拖拽,本例中不支持滑動操作。

監聽移動事件,其中 mOnItemMoveListener.onItemMove 是對移動的監聽的回調,判斷是否可以移動並通知Adapter類數據更新。

兩種情況:

第壹:如果移動的是“頭條”頻道或者移動到“頭條”頻道,返回false,則不能進行移動。

第二:不是上面的情況。更新我的頻道欄目中頻道的顯示順序,同時通知數據緩存並通知新聞首頁頻道順序的更新。關於這部分的詳細內容,可以看最下方的源碼。

是否允許拖拽,通過外部傳入來開啟。

在Adapter類中,根據觸摸的Item的類型來判斷是否開啟長按拖拽。

如果觸摸的對象是“頭條”頻道,則不開啟拖拽,其他情況就會開啟長按。

通過以上步驟就可以實現效果圖中的效果,真實效果還是不錯的。 源碼地址 ,感興趣的看壹下,給個Star支持下,看項目中的NewsChannelActivity部分即可。

  • 上一篇:求教adobe系列軟件的功用,是不是都和圖形圖像有關?如ps..flash..lightroom.
  • 下一篇:如何簡單實現安卓app自動更新功能
  • copyright 2024編程學習大全網