私のアクティビティには、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() はそのドラッグされたビューの下にあるビューを返します (これが私の目的です)。
ただし、項目を元の位置 (Image2 のように) にドラッグすると、findChildViewUnder() はドラッグされたビューを返します (ただし、その下のビューは返しません)。
助言がありますか?ドラッグされたアイテムの下にあるビューを常に取得するにはどうすればよいですか?