在 Recyclerview 之外拖放视图

Drag and Drop view outside of Recyclerview

我想要实现的目标:我希望在可滚动布局(RecyclerviewGridlayoutManager)中有一个视图,其中包含图块(视图)。将项目拖放到 RecyclerView 内应调整图标的位置并与其他元素交换。当拖动开始时,RecyclerView 上方的图标将变为垃圾桶图标,将视图拖动到此图标会将其从 RecyclerView 中删除。

我尝试了这个 excellent tutorial,但我没有找到一种方法来处理 Recyclerview 之外的拖动,因为 ItemTouchHelper.Callback 仅使用 Recycler.ViewHolder 元素作为可能的目标。

方法interpolateOutOfBoundsScroll()会在视图移出边界时给出反馈,但只会返回屏幕外的总尺寸,但不会返回坐标。此外,尝试将视图拖出 Recyclerview 总是会导致视图在通过 Recyclerview.

边界的地方被剪切

有谁知道我如何实现这种效果?

您受到 RecyclerView 边界的约束。您有多种选择:

  1. RecyclerView 的布局高度设置为 match_parent 并在您的上视图顶部(它是 Toolbar 吗?)并添加一个相同大小的粘性 header 并具有空的透明布局。这样你就可以拖到那里,看到项目漂浮在那里。

  2. 与其将项目拖到距离合法 upper-right 项目太近的垃圾桶图标,不如长按 select 该项目(并应用一个信号,如复选标记或红色面具)并使垃圾可以出现并在点击时删除(并且可能允许删除多项)

您只需为 RecyclerView 的父级设置此属性即可实现此目的:

    android:clipChildren="false"

编辑:感谢 Adam Katz,我不知道为什么,但有时您必须将其添加到 RecyclerView 才能使其正常工作:

    android:clipToPadding="false"