【问题标题】:Drag and Drop view outside of Recyclerview在 Recyclerview 之外拖放视图
【发布时间】:2016-05-04 12:15:29
【问题描述】:

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

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

如果视图移出边界,interpolateOutOfBoundsScroll() 方法会给出反馈,但只会返回屏幕外的总大小,而不是坐标。此外,尝试将视图拖出Recyclerview 总是会导致视图在通过Recyclerview 边界的位置被剪切。

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

【问题讨论】:

    标签: android drag-and-drop android-recyclerview gridlayoutmanager


    【解决方案1】:

    您可以通过为 RecyclerView 的父级设置此属性来实现这一点:

        android:clipChildren="false"
    

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

        android:clipToPadding="false"
    

    【讨论】:

    • 哇,我不敢相信没有人评论过这个。只是一个补充,添加 android:clipChildren="false" android:clipToPadding="false" 很有帮助
    • 如何处理drop到回收站外的View?
    【解决方案2】:

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

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

    2. 不要将项目拖到距离合法右上角项目太近的垃圾桶图标上,而是长按以选择项目(并应用复选标记或红色蒙版等信号) 并使垃圾可以在点击时出现并删除(并且可能允许删除多项)

    【讨论】:

    • 感谢您的回复!上视图是一个RelativeLayout,其中包含一些TextviewsImageviews 以及应该变成垃圾桶的Imageview。我喜欢你的带有粘性标题的想法。如果垃圾箱Imageview 是粘性标题中的唯一元素并且没有完全填充它,有没有办法阻止用户将视图拖到垃圾箱Imageview 行旁边的位置?我现在就试试这个
    • @Eve 如果目标位置在标题中,则不要交换它们
    • 还在想这个,有没有办法像Google 的经典方法那样定义拖动阴影,所以只拖动阴影而不拖动视图本身?
    • @Eve 你可以在顶部添加另一个视图,一旦拖动它就会变成阴影
    • 对不起,我不确定我是否理解正确。我仍然希望通过 recyclerview 拖动一个项目,这会导致对所有元素进行排序,然后将其拖动到该视图之外的其他地方。但是如果我只拖动一个位于 recyclerview 顶部的元素,recyclerview 内的元素将不会调整/滑动到正确的位置?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多