其实实现这种效果有两种方法:git
这里我是用的第一种方法,由于感受第二种方法已经烂大街了。。何况第二种方法只能在RecycleView内部移动。跟其余控件结合的话就爆炸。github
具体实现步骤ide
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
这几步中,最重要的仍是第二步: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排序