在Recyclerview之外拖放视图

17

我想实现的目标:我想在一个可滚动的布局中(使用GridlayoutManagerRecyclerview)拥有一个视图,视图中包含多个瓷砖(视图)。在RecyclerView内部拖放项目应调整图标位置并与其他元素交换位置。当拖动开始时,位于RecyclerView上方的图标将更改为垃圾桶图标,将视图拖到此图标将从此RecyclerView删除它。

初始状态开始拖曳View5将View5拖动到垃圾桶图标View5被删除后,其他视图也随之移动

我尝试了这个优秀的教程,但我没有找到如何处理Recyclerview之外的拖放操作,因为ItemTouchHelper.Callback只使用Recycler.ViewHolder元素作为可能的目标。

interpolateOutOfBoundsScroll()方法会在视图移出边界时给出反馈,但只会返回整个屏幕外的总大小,而不是坐标。此外,试图将视图拖出RecyclerView始终导致切断视图,即使该视图通过RecyclerView的边界也是如此。

有没有人有想法可以实现这个效果?

2个回答

14

通过为 RecyclerView 的父视图设置此属性,您可以轻松实现此目标:

    android:clipChildren="false"

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

    android:clipToPadding="false"

1
哇,我无法相信没有其他人评论这个。只是补充一下,增加以下内容会很有帮助: android:clipChildren="false" android:clipToPadding="false" - Adam Katz
如何处理拖放到 Recycler 之外的视图? - Fox

4
您受到“RecyclerView”边界的限制。您有几个选项:
  1. 将“RecyclerView”的布局高度设置为“match_parent”,并在您的上部视图(是“工具栏”吗?)上方,并添加相同大小的粘性标题和一个空的透明布局。这样,您可以拖动它并看到浮动在那里的项目。
  2. 不要将项目拖到位于合法右上角项目太近的垃圾桶图标中,而是长按以选择该项目(并应用信号,如复选标记或红色掩码),并在单击时显示垃圾桶并进行删除(可能允许多个项目删除)

谢谢您的回复!上方视图是一个包含一些TextviewsImageviews以及应该变成垃圾桶的ImageviewRelativeLayout。 我喜欢您的粘性标题的想法。如果垃圾桶Imageview是粘性标题中唯一的元素,并且没有完全填充它,有没有办法防止用户将视图拖到垃圾桶Imageview行旁边的位置?我现在会尝试这个。 - Eve
@Eve,如果目标位置在头部,请勿交换它们。 - gilgil28
还在思考这个问题,是否没有像谷歌的经典方法一样可以定义拖放阴影,只有阴影被拖动而不是视图本身? - Eve
@Eve,你可以添加另一个视图在顶部,一旦拖动就会变成阴影。 - gilgil28
抱歉,我不确定我是否正确理解了您的意思。我仍然希望能够通过RecyclerView拖动一个项目,这将导致对所有元素进行排序,然后将其拖到此视图之外的其他位置。但是,如果我只拖动位于RecyclerView顶部的元素,则RecyclerView内部的元素将不会调整/滑动到正确的位置? - Eve
你应该同步它们两个。 - gilgil28

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接