在 Recyclerview 之外拖放视图
Posted
技术标签:
【中文标题】在 Recyclerview 之外拖放视图【英文标题】:Drag and Drop view outside of Recyclerview 【发布时间】:2016-05-04 12:15:29 【问题描述】:我想要实现的目标:我希望在可滚动布局(Recyclerview
和 GridlayoutManager
)中有一个视图,其中包含图块(视图)。在RecyclerView
中拖放一个项目应该会调整图标的位置并与其他元素交换。当拖动开始时,RecyclerView
上方的图标将变为垃圾桶图标,将视图拖动到此图标将从RecyclerView
中删除它。
我试过这个excellent tutorial,但我没有找到一种方法来处理Recyclerview
之外的拖动,因为ItemTouchHelper.Callback
仅使用Recycler.ViewHolder
元素作为可能的目标。
如果视图移出边界,interpolateOutOfBoundsScroll()
方法会给出反馈,但只会返回屏幕外的总大小,而不是坐标。此外,尝试将视图拖出Recyclerview
总是会导致视图在通过Recyclerview
边界的位置被剪切。
有谁知道我如何实现这种效果?
【问题讨论】:
【参考方案1】:您可以通过为 RecyclerView 的父级设置此属性来实现这一点:
android:clipChildren="false"
编辑:感谢 Adam Katz,我不知道为什么,但有时您必须将其添加到 RecyclerView 才能使其工作:
android:clipToPadding="false"
【讨论】:
哇,我不敢相信没有人评论过这个。只是一个补充,添加 android:clipChildren="false" android:clipToPadding="false" 很有帮助 如何处理drop到回收站外的View?【参考方案2】:您受到RecyclerView
边界的约束。您有多种选择:
将RecyclerView
的布局高度设置为match_parent
并位于您的上视图顶部(是Toolbar
?)并添加一个相同大小的粘性标题并有一个空透明布局。这样你就可以拖动它并看到项目漂浮在那里。
不要将项目拖到距离合法右上角项目太近的垃圾桶图标上,而是长按以选择项目(并应用复选标记或红色蒙版等信号) 并使垃圾可以在点击时出现并删除(并且可能允许删除多项)
【讨论】:
感谢您的回复!上视图是一个RelativeLayout
,其中包含一些Textviews
、Imageviews
以及应该变成垃圾桶的Imageview
。我喜欢你的带有粘性标题的想法。如果垃圾箱Imageview
是粘性标题中的唯一元素并且没有完全填充它,有没有办法阻止用户将视图拖到垃圾箱Imageview
行旁边的位置?我现在就试试这个
@Eve 如果目标位置在标题中,则不要交换它们
还在想这个,有没有办法像Google 的经典方法那样定义拖动阴影,所以只拖动阴影而不拖动视图本身?
@Eve 你可以在顶部添加另一个视图,一旦拖动它就会变成阴影
对不起,我不确定我是否理解正确。我仍然希望通过 recyclerview 拖动一个项目,这会导致对所有元素进行排序,然后将其拖动到该视图之外的其他地方。但是如果我只拖动一个位于 recyclerview 顶部的元素,recyclerview 内的元素将不会调整/滑动到正确的位置?以上是关于在 Recyclerview 之外拖放视图的主要内容,如果未能解决你的问题,请参考以下文章
在ANDROID中相互拖放时合并Recyclerview中的项目?