与RecyclerView问题中的订单更改无关,我找不到令人满意的例子。
假设我们想把苹果放到其中一个盒子里。在我们的应用程序中,我们在顶部有代表苹果的ImageView和下面的框。这些框只是带有GridLayoutManager的RecyclerView。
首先我们在apple上设置onTouchListener:
appleImageView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(null, shadowBuilder, view, 0);
view.setVisibility(View.INVISIBLE);
return true;
} else {
return false;
}
}
});
现在我们在包含RecyclerView的容器上设置OnDragListener(或者我们可以在RecyclerView上设置?):
containerLayout.setOnDragListener(new OnDragListener() {
@Override
public boolean onDrag(View v, DragEvent event) {
final View draggedView = (View) event.getLocalState();
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
break;
case DragEvent.ACTION_DRAG_ENTERED:
break;
case DragEvent.ACTION_DRAG_EXITED:
break;
case DragEvent.ACTION_DROP:
// HERE IS INTERESTING PART
break;
case DragEvent.ACTION_DRAG_ENDED:
break;
default:
break;
}
return true;
}
});
问题是:
我们怎样才能获得有关丢弃操作的RecyclerView项目?
我想也许我们可以通过调用event.getX(); event.getY();
获取我们删除appleImageView的坐标,但我不知道如何使用屏幕坐标获取RecyclerView项目。