Recyclerview 作为 Snappy Gallery
Recyclerview as Snappy Gallery
我一直想自己解决这个问题,但没有机会。
我需要的是 RecyclerView
(水平滚动)始终显示 3 个项目。每当用户左右滑动或滚动时,它应该捕捉到接下来的 3 个项目,如果还有的话。如果有的话,我只是在寻找最简单的解决方案。
我找到了具有单个项目的图库解决方案,但我需要 3 个项目。我知道这一定是可能的,但我真的不知道怎么做。首先,LayoutManager
应该计算项目宽度以使其与设备的宽度相匹配。我想我需要以某种方式使用 RecyclerView.OnScrollListener
。
有人可以帮我吗?
我假设画廊的每一页都是 3 项的垂直列表是否正确?
在覆盖 LayoutManager.onMeasure(Recycler, int, int, int)
的范围内调用 getWidth()
和 getHeight()
以获得回收站的实际大小。然后,您可以在 onLayoutChildren()
中使用它来计算子项应该有多大。
至于滚动到下一个视图,我不太确定。也许像 RecyclerView horizontal snap in center?
那样向 RecyclerView
添加自定义 OnScrollListener
我有一个类似的用例,使用这个 SO 线程中的建议我得到了很好的结果:
Snappy scrolling in RecyclerView
结果是:使用自定义RecyclerView.OnScrollListener检测滚动状态何时变为SCROLL_STATE_IDLE,此时使用实现getFixScrollPos()的LayoutManager的子类计算然后滚动到正确的位置,过程中卡住。
我还能够在设计时使用可设置样式的属性来设置行中的项目数。您可能也想这样做。
使用 LinearSnapHelper
,这现在非常容易。
您需要做的就是:
SnapHelper helper = LinearSnapHelper();
helper.attachToRecyclerView(recyclerView);
就这么简单!请注意,从版本 24.2.0 开始,支持库中添加了 LinearSnapHelper
。
我一直想自己解决这个问题,但没有机会。
我需要的是 RecyclerView
(水平滚动)始终显示 3 个项目。每当用户左右滑动或滚动时,它应该捕捉到接下来的 3 个项目,如果还有的话。如果有的话,我只是在寻找最简单的解决方案。
我找到了具有单个项目的图库解决方案,但我需要 3 个项目。我知道这一定是可能的,但我真的不知道怎么做。首先,LayoutManager
应该计算项目宽度以使其与设备的宽度相匹配。我想我需要以某种方式使用 RecyclerView.OnScrollListener
。
有人可以帮我吗?
我假设画廊的每一页都是 3 项的垂直列表是否正确?
在覆盖 LayoutManager.onMeasure(Recycler, int, int, int)
的范围内调用 getWidth()
和 getHeight()
以获得回收站的实际大小。然后,您可以在 onLayoutChildren()
中使用它来计算子项应该有多大。
至于滚动到下一个视图,我不太确定。也许像 RecyclerView horizontal snap in center?
那样向RecyclerView
添加自定义 OnScrollListener
我有一个类似的用例,使用这个 SO 线程中的建议我得到了很好的结果:
Snappy scrolling in RecyclerView
结果是:使用自定义RecyclerView.OnScrollListener检测滚动状态何时变为SCROLL_STATE_IDLE,此时使用实现getFixScrollPos()的LayoutManager的子类计算然后滚动到正确的位置,过程中卡住。
我还能够在设计时使用可设置样式的属性来设置行中的项目数。您可能也想这样做。
使用 LinearSnapHelper
,这现在非常容易。
您需要做的就是:
SnapHelper helper = LinearSnapHelper();
helper.attachToRecyclerView(recyclerView);
就这么简单!请注意,从版本 24.2.0 开始,支持库中添加了 LinearSnapHelper
。