拖放RecyclerView

时间:2016-09-29 06:10:24

标签: java android drag-and-drop android-recyclerview

与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项目。

0 个答案:

没有答案