我一直想自己解决这个问题,但没有机会。
我需要的是回收站视图
(水平滚动)始终显示3个项目。每当用户向左或向右滚动时,它应该捕捉到接下来的3个项目,如果还有更多的话。如果有的话,我只是在寻找最简单的解决方案。
我已经找到了具有单个项目的Gallery解决方案,但我需要3个项目。我知道这一定是可能的,但我真的不知道如何做到。首先,LayoutManager
应该计算项目宽度以使其与设备的宽度相匹配。我想我需要以某种方式使用RecycliView. OnScrollListener
。
有人能帮我吗?
使用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水平对齐中心一样?