【发布时间】:2016-10-14 14:18:10
【问题描述】:
我目前正在开发一个小型 Android 模块,我遇到了一个也许有人可以解决的问题。我需要创建一个日历并允许用户通过以下方式选择一个日期范围:1)单击开始日期(这将默认创建 2 天范围),然后 2)触摸一个范围边界并拖动它以增加或减小该范围。
目前,我使用 RecyclerView 和 GridLayoutManager 创建了所有日历日单元格,该单元格有很多行(所有周),每行 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 坐标有些奇怪。
我知道一些代码示例会很有帮助,但我无法粘贴它,因为它属于受保护的私有存储库:(
任何人都可以向我提供任何帮助,我们将不胜感激。而且,当然,我会尽量等待这个话题,以提供我能提供的所有信息。我还将考虑新的不同方法和建议来获得我需要移动范围边界的“触摸+移动+向上”运动 :)
非常感谢所有 Stack Overflow 社区!
【问题讨论】:
-
谢谢@XxGoliathusxX。我已经检查了您的链接,但我仍然遇到同样的问题;)当我开始开发此功能时,我已经关注了该链接和其他一些链接。
标签: android drag-and-drop android-recyclerview gridlayoutmanager itemtouchhelper