1

私のアクティビティには、ItemTouchHelper がアタッチされた RecyclerView があります。ItemTouchHelper にはオーバーライドされたメソッドがあります:

  @Override
    public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
        final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.START | ItemTouchHelper.END;
        final int swipeFlags = 0;
        return makeMovementFlags(dragFlags, swipeFlags);
    }

    @Override
    public boolean isLongPressDragEnabled() {
        return true;
    }

そのため、RecyclerView のビューはドラッグ可能です。

私の目的は、recyclerView を介して RecyclerView アイテムの 1 つをドラッグし、ドラッグされたビューの下にある View を取得できるようにすることです。だから、私はRecyclerView.findChildViewUnder(float x, float y)を使用しようとしました:「指定されたポイントの下の一番上のビューを見つけてください」。

 @Override
    public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
        super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);

        if (this.mRecyclerView.findChildViewUnder(viewHolder.itemView.getX(), viewHolder.itemView.getY()) != null) {
            System.out.println(this.mRecyclerView.findChildViewUnder(viewHolder.itemView.getX(), viewHolder.itemView.getY()).getTag());
            System.out.println(viewHolder.itemView.getX() + " " +viewHolder.itemView.getY());
        }

      //  mRecyclerView.
    }

しかし、そこで奇妙なことが起こっています。

特定のアイテムを元の位置の一番下 (Image1 のように) にドラッグすると、ご覧のとおり、findChildViewUnder() はそのドラッグされたビューの下にあるビューを返します (これが私の目的です)。

画像1

ただし、項目を元の位置 (Image2 のように) にドラッグすると、findChildViewUnder() はドラッグされたビューを返します (ただし、その下のビューは返しません)。

画像2

助言がありますか?ドラッグされたアイテムの下にあるビューを常に取得するにはどうすればよいですか?

4

0 に答える 0