Recyclerview作为Snappy Gallery

时间:2015-04-18 17:24:11

标签: android android-recyclerview recyclerview-layout

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

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

我找到了包含单个项目的Gallery解决方案,但我需要3个项目。我知道它一定是可能的,但我无法弄清楚如何。例如,LayoutManager应计算项目宽度以使其与设备的宽度相匹配。我想我需要以某种方式使用RecyclerView.OnScrollListener

任何人都可以帮助我吗?

3 个答案:

答案 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中添加自定义OnScrollListenerRecyclerView