gpt4 book ai didi

Android - 使用 ItemTouchHelper.Callback 拖动 RecyclerView

转载 作者:行者123 更新时间:2023-11-30 00:56:41 25 4
gpt4 key购买 nike

我目前正在开发一个小型 Android 模块,我正面临一个也许有人可以解决的问题。我需要创建一个日历并允许用户通过以下方式选择日期范围:1) 单击开始日期(这将默认创建一个 2 天的范围),然后 2) 触摸一个范围边框并拖动它以增加或减小该范围

目前,我使用带有 GridLayoutManager 的 RecyclerView 创建了所有日历天单元格,它有很多行(所有周),每行 7 个项目(天)。然后,我使用了 RecyclerView ItemTouchHelper ( https://developer.android.com/reference/android/support/v7/widget/helper/ItemTouchHelper.html ) 和 ItemTouchHelper.Callback ( https://developer.android.com/reference/android/support/v7/widget/helper/ItemTouchHelper.Callback.html ) 完成拖放功能。我的方法是使用那些助手提供的拖放检测(看看 https://medium.com/@ipaulpro/drag-and-swipe-with-recyclerview-b9456d2b1aaf#.ib8r012gc )修改它以避免移动一个项目并且只检测我想要的触摸+拖放手势。我已经通过删除默认拖动动画(覆盖 ItemTouchHelper onDraw/onDrawOver)并使用 ItemTouchHelper.Callback 回调来管理拖动运动(无需交换适配器项目,因为我需要它们始终处于同一位置)正确地完成了该功能。一切正常,但我现在遇到了一个问题,因为拖动检测没有按预期工作。我将尝试解释它:如果我在给定单元格的中心开始拖动运动,然后移动到其左侧的单元格,则在我到达中心之前不会触发拖动运动(与我开始拖动移动的位置相同)左侧单元格。这是一个问题,因为我需要在到达另一个单元格后立即检测到拖动(如果手指在新单元格边界内,则应触发拖动)。另一个例子是:如果我从一个单元格的最左边开始拖动运动,直到我到达另一个单元格的最左边时才会触发拖动。

现在我正在尝试使用 ItemTouchHelper.Callback.chooseDropTarget 方法,以便在手指进入新单元格后立即手动选择放置目标,但我无法获得这行得通。我认为(但我不能确定)接收到的 x,y 坐标有些奇怪。

我知道一些代码示例会很有帮助,但我无法粘贴它,因为它属于一个私有(private)且 protected 存储库:(

非常感谢任何人可以提供给我的帮助。而且,当然,我会尝试暂挂此主题以提供我能提供的所有信息。我还将考虑新的不同方法和建议以获得“触摸+移动+向上”移动,我需要移动范围边界:)

非常感谢所有 Stack Overflow 社区!

最佳答案

经过更多研究,我找到了解决问题的方法。我会发布它,这样如果有人遇到同样的问题,他可以在这里找到一些帮助:)

我的问题是我正在使用 ItemTouchHelper.Callback.chooseDropTarget ( https://developer.android.com/reference/android/support/v7/widget/helper/ItemTouchHelper.Callback.html#chooseDropTarget(android.support.v7.widget.RecyclerView.ViewHolder,%20java.util.List%3Candroid.support.v7.widget.RecyclerView.ViewHolder%3E,%20int,%20int) ) 返回的 curXcurY 参数,就好像它们是拖动时的当前手指坐标,但在应用任何平移后它们是拖动 View 最左上角的坐标。现在我觉得有点傻。我应该更好地阅读文档:|

因为我不需要最左上角的坐标而是手指的位置,所以我的解决方案是使用附加到源 View 的触摸监听器,这样我就可以使用touchSrcX = MotionEvent.getX()touchSrcY = MotionEvent.getY() 方法,然后我在 chooseDropTarget 中选择目标之前应用了点转换> 回调。我的意思是,类似于:
curX += touchSrcX
curY += touchSrcY

如果有人需要更多详细信息或更好的解释,请与我联系,我很乐意提供帮助! :)

关于Android - 使用 ItemTouchHelper.Callback 拖动 RecyclerView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40045445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com