2

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

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

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

任何人都可以在这里帮助我吗?

4

3 回答 3

7

有了LinearSnapHelper,现在这很容易。

您需要做的就是:

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

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

于 2016-08-19T10:04:59.520 回答
1

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

RecyclerView 中的快速滚动

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

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

于 2015-04-20T16:51:35.623 回答
0

我是否正确假设画廊的每一页都是 3 个项目的垂直列表?

调用getWidth()getHeight()在您的覆盖范围内LayoutManager.onMeasure(Recycler, int, int, int)获取回收站的实际大小。然后你可以用它onLayoutChildren()来计算孩子们应该有多大。

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

于 2015-04-19T04:21:45.053 回答