实现可拖拽的RecycleView


效果图

其实实现这种效果有两种方法:

1.View.startDrag(), 然后给需要监听拖拽的控件setOnDragListener.

2.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在拖动中排序

这几步中,最重要的还是第二步:

@OverridepublicbooleanonDrag(View v, DragEventevent){

switch(event.getAction()) {

caseDragEvent.ACTION_DRAG_STARTED:

//开始时,让拖动的Item变白

break;

caseDragEvent.ACTION_DRAG_ENTERED:

//进入时,这个Demo不需要用到

break;

caseDragEvent.ACTION_DRAG_LOCATION:

//处理RecycleView的滑动

//处理Item之间的交换

break;

caseDragEvent.ACTION_DRAG_EXITED:

caseDragEvent.ACTION_DRAG_ENDED:

//善后工作

break;        }

//一定要return true

return  true;    

}


demo代码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容