實現可拖拽的RecycleView

效果圖

其實實現這種效果有兩種方法:git

  • View.startDrag(), 而後給須要監聽拖拽的控件setOnDragListener.
  • ItemTouchHelper,這種實現方法更爲簡單,具體可參考連接描述

這裏我是用的第一種方法,由於感受第二種方法已經爛大街了。。何況第二種方法只能在RecycleView內部移動。跟其餘控件結合的話就爆炸。github

具體實現步驟ide

  1. 給RecycleView.ViewHolder實現OnClickListener()方法,長按的時候開始拖動。
  2. 拖動的時候給不一樣的DragEvent作不一樣的操做。分別有DragEvent.ACTION_DRAG_STARTED(拖動開始時)

DragEvent.ACTION_DRAG_ENTERED(拖動的View進入監聽的View時),DragEvent.ACTION_DRAG_LOCATION(拖動的View在監聽的View中改變位置時),DragEvent.ACTION_DRAG_EXITED(拖動的View離開在監聽的View中時),DragEvent.ACTION_DROP(拖動放下時),DragEvent.ACTION_DRAG_ENDED(拖動結束時)spa

  1. 實現RecleView在拖動中排序

這幾步中,最重要的仍是第二步:code

@Override
    public boolean onDrag(View v, DragEvent event) {
  
        switch (event.getAction()) {
            case DragEvent.ACTION_DRAG_STARTED:
                //開始時,讓拖動的Item變白
                break;
            case DragEvent.ACTION_DRAG_ENTERED:
                //進入時,這個Demo不須要用到
                break;
            case DragEvent.ACTION_DRAG_LOCATION:
                //處理RecycleView的滑動
                //處理Item之間的交換
                break;
            case DragEvent.ACTION_DRAG_EXITED:
            case DragEvent.ACTION_DRAG_ENDED:
                //善後工做                 
                break;
        }
        //必定要return true
        return true;
    }

具體可參見源碼github排序

相關文章
相關標籤/搜索