在我的 Activity 中,我有一个 RecyclerView,并附有 ItemTouchHelper。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 项目之一并获取视图,即在拖动视图下。所以,我尝试使用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() 返回拖动的视图(但不返回其下的视图)。
有什么建议么?我怎样才能始终获得拖动项目下的视图?