gpt4 book ai didi

android - 在recyclerview中区分Drag Action 和Fling Action

转载 作者:可可西里 更新时间:2023-11-01 18:46:45 28 4
gpt4 key购买 nike

Recyclerview 现在有 3 个状态。

SCROLL_STATE_IDLE、SCROLL_STATE_DRAGGING、SCROLL_STATE_SETTLING

issue提出同样的要求包括逃避状态。我无法确定是否对此做了任何事情。

有没有办法在 recyclerview 中区分 Drag 和 Fling。

编辑:此类功能的要求:当用户 throw 时,我希望能够在回收站 View 中暂停加载图像(所有图像都是 url 请求),并在他到达感兴趣的项目后恢复,从而确保他当前正在查看的图像先于其他图像加载。

最佳答案

SCROLL_STATE_FLING :不再是 RecyclerView 的一部分,因为 documentation here 中未提及它

关于您的要求:

RecyclerView 位于 android.view.ViewGroup 内,根据其源代码,它扩展了 ViewGroup documentation here .

RecyclerView 中的滚动在 RecyclerView 和 LinearLayoutManager 之间分离。有两种情况需要处理:

  1. 用户切换 View 。默认行为是 RecyclerView 将 fling 传递给内部 Scroller,然后执行滚动魔法。这是有问题的,因为 RecyclerView 通常会停留在未对齐的位置。通过覆盖 RecyclerView fling() 实现而不是 flingingsmoothscroll LinearLayoutManager 到一个位置来解决这个问题。
  2. 用户抬起手指的速度不足以启动滚动。在这种情况下不会发生fling。如果您想在 View 未处于捕捉位置的情况下检测到这种情况,您可以通过覆盖 onTouchEvent 方法来实现。

详情请看这里Snappy scrolling in RecyclerView

一些 ViewPager 提示值得一提,因为 RecyclerView 是它的子项:

  1. 考虑修改缓存的页面数量。当您只有 3 或 4 页时,这一点尤为重要。默认设置将在当前页面的任一侧存储 1 页。在您有 3 个页面的场景中,滑动到中间页面将意味着您的所有页面都将被缓存。然后滑动到第一页或最后一页会使其中一个页面从内存中删除,当您再次滑动回来时,它们将需要重新创建和重新添加。通过设置 setOffscreenPageLimit(2),您将允许所有页面始终保留在内存中。这是性能和内存考虑因素之间的权衡,因此最好听取低内存警告并准备好在必要时删除边缘页面。

  2. 如果您尝试替换 ViewPager 中的 View ,仅更改适配器后面的数据集并调用 notifyDataSetChanged() 是不够的。您还需要确保已正确实现 getItemPosition(Object object) 并为已更改的项目返回 POSITION_NONE 并返回 POSITION_UNCHANGED 或未更改的项目的实际位置。

  3. 添加的另一个 API 是 setPageMargin()setPageMarginDrawable(),可让您轻松分隔页面。

详情请看这里Horizontal View Swiping with ViewPager, Updated

拖动和滑动之间的区别

对于拖动功能,您可以使用一些RecyclerView的配套类:

  1. ItemTouchHelper ,这是一个实用程序类,用于向 RecyclerView 添加滑动关闭和拖放支持。

  2. 它的 ItemTouchHelper.Callback ,这是 ItemTouchHelper 和您的应用程序之间的契约

对于fling可以看到

  1. Android fling actions on a RecyclerView

  2. Android : Control Smooth scroll over recycler view

关于android - 在recyclerview中区分Drag Action 和Fling Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35194734/

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