其实实现这种效果有两种方法:
- View.startDrag(), 然后给需要监听拖拽的控件setOnDragListener.
- ItemTouchHelper,这种实现方法更为简单,具体可参考链接描述
这里我是用的第一种方法,因为感觉第二种方法已经烂大街了。。况且第二种方法只能在RecycleView内部移动。跟其他控件结合的话就爆炸。
具体实现步骤
- 给RecycleView.ViewHolder实现OnClickListener()方法,长按的时候开始拖动。
- 拖动的时候给不同的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(拖动结束时)
- 实现RecleView在拖动中排序
这几步中,最重要的还是第二步:
@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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。