Android Recyclerview作为Snappy Gallery

Android Recyclerview作为Snappy Gallery,android,android-recyclerview,recyclerview-layout,Android,Android Recyclerview,Recyclerview Layout,我一直想自己解决这个问题,但没有机会 我需要的是RecyclerView(水平滚动)来始终显示3个项目。当用户向左或向右滚动时,它应该捕捉到接下来的3个项目(如果还有)。我只是在寻找最简单的解决方案 我发现画廊解决方案只有一个项目,但我需要3个项目。我知道这一定是可能的,但我真的不知道怎么做。例如,LayoutManager应该计算项目宽度,使其与设备的宽度相匹配。我想我需要以某种方式使用一个RecyclerView.OnScrollListener 有人能帮我吗?我假设图库的每一页都是由3个项

我一直想自己解决这个问题,但没有机会

我需要的是
RecyclerView
(水平滚动)来始终显示3个项目。当用户向左或向右滚动时,它应该捕捉到接下来的3个项目(如果还有)。我只是在寻找最简单的解决方案

我发现画廊解决方案只有一个项目,但我需要3个项目。我知道这一定是可能的,但我真的不知道怎么做。例如,
LayoutManager
应该计算项目宽度,使其与设备的宽度相匹配。我想我需要以某种方式使用一个
RecyclerView.OnScrollListener


有人能帮我吗?

我假设图库的每一页都是由3个项目组成的垂直列表,对吗

LayoutManager.onMeasure(Recycler,int,int,int)
的覆盖范围内调用
getWidth()
getHeight()
,以获取回收器的实际大小。然后,您可以在
onLayoutChildren()
中使用它来计算子项的大小


至于滚动到下一个视图,我不完全确定。可能会将自定义的
OnScrollListener
添加到
RecyclerView
中,如?

我有一个类似的用例,我使用此SO线程中的建议获得了很好的结果:

结果是:使用自定义的RecyclerView.OnScrollListener来检测滚动状态何时更改为scroll_state_IDLE,此时使用LayoutManager的子类来实现getFixScrollPos()计算,然后滚动到正确的位置,在过程中捕捉

我还能够在设计时使用styleable属性来设置行中的项数。您可能也希望这样做。

使用,现在非常简单

您需要做的就是:

SnapHelper helper = LinearSnapHelper();
helper.attachToRecyclerView(recyclerView);
就这么简单!请注意,
LinearSnapHelper
从版本24.2.0开始添加到支持库中