我一直试图自己解决这个问题,但没有机会。
我需要的是RecyclerView
(水平滚动)以始终显示3个项目。每当用户左右摇晃或滚动时,如果还有更多,它应该会捕捉到接下来的3个项目。我只是寻找最简单的解决方案。
我找到了包含单个项目的Gallery解决方案,但我需要3个项目。我知道它一定是可能的,但我无法弄清楚如何。例如,LayoutManager
应计算项目宽度以使其与设备的宽度相匹配。我想我需要以某种方式使用RecyclerView.OnScrollListener
。
任何人都可以帮助我吗?
答案 0 :(得分:6)
使用LinearSnapHelper
,现在非常容易。
您需要做的就是:
SnapHelper helper = LinearSnapHelper();
helper.attachToRecyclerView(recyclerView);
就这么简单!请注意,从版本24.2.0开始,在支持库中添加了LinearSnapHelper
。
答案 1 :(得分:1)
我有一个类似的用例,我使用这个SO线程中的建议得到了很好的结果:
Snappy scrolling in RecyclerView
结果是:使用自定义的RecyclerView.OnScrollListener检测滚动状态何时更改为SCROLL_STATE_IDLE,此时使用LayoutManager的子类实现getFixScrollPos()计算,然后滚动到正确的位置,捕捉进程
我还能够使用styleable属性在设计时设置行中的项目数。你可能也想这样做。
答案 2 :(得分:0)
我是否正确地假设画廊的每个页面都是3个项目的垂直列表?
在您的getWidth()
覆盖范围内致电getHeight()
和LayoutManager.onMeasure(Recycler, int, int, int)
,以获取回收商的实际尺寸。然后,您可以在onLayoutChildren()
中使用它来确定孩子应该有多大。
至于滚动到下一个视图,我不完全确定。也许可以在RecyclerView horizontal snap in center中添加自定义OnScrollListener
到RecyclerView
?