提问者:小点点

RecyClerview作为Snappy画廊


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

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

我已经找到了具有单个项目的Gallery解决方案,但我需要3个项目。我知道这一定是可能的,但我真的不知道如何做到。首先,LayoutManager应该计算项目宽度以使其与设备的宽度相匹配。我想我需要以某种方式使用RecycliView. OnScrollListener

有人能帮我吗?


共3个答案

匿名用户

使用LinearSnapHelper,这现在非常容易。

你需要做的就是:

SnapHelper helper = LinearSnapHelper();
helper.attachToRecyclerView(recyclerView);

就这么简单!请注意,LinearSnapHelper是从版本24.2.0开始添加到支持库中的。

匿名用户

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

快速滚动在回收视图

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

我还可以使用可样式属性在设计时设置行中的项目数。您可能也想这样做。

匿名用户

我假设图库的每一页是3个项目的垂直列表是正确的吗?

调用getWidth()getHeight()在您的LayoutManager. onMeasure(Recycler,int,int,int)的覆盖中获取回收器的实际大小。然后,您可以在onLayout儿童()中使用它来确定子级应该有多大。

至于滚动到下一个视图,我不完全确定。也许将自定义OnScrollListener添加到RecyclerView中,就像在RecyclerView水平对齐中心一样?