其實實現這種效果有兩種方法: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排序