实现可拖拽的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排序

相关文章
相关标签/搜索