我正在尝试为水平RecyclerView
实现类似ViewPager的行为。来自适配器的数据应该正常膨胀和绑定,但是Recycler
的导航应该以不同方式处理。当用户滑动(或尝试滚动)时,我向该方向移动Recycler
一个项目,将其粘贴到左侧。
我已经拥有了所有项目转换逻辑。我使用的是自定义LayoutManager
,它会使用自定义onSmoothScrollToPosition()
覆盖LinearSmoothScroller()
,该项会将项目保持在左侧。
问题是 - 如何覆盖RecyclerView
的滚动行为来拦截滑动并自行处理?我尝试在LayoutManager
中禁用滚动,然后在onTouchListener
中拦截手势,但这似乎不起作用。 RecyclerView
框架是否有一个干净的方法来处理这个问题?
答案 0 :(得分:16)
this帖子中介绍的原生Android解决方案是让RecyclerView像ViewPager一样运行的超级简便方法。
相关位:
24.2.0版本的支持库引入了两个新类(SnapHelper和LinearSnapHelper),它们应该用于处理RecyclerView中的捕捉。 .... 唯一需要的代码是:
SnapHelper snapHelper = new LinearSnapHelper();
snapHelper.attachToRecyclerView(recyclerView);
SnapHelper snapHelper = new GravitySnapHelper(Gravity.START);
snapHelper.attachToRecyclerView(startRecyclerView);
答案 1 :(得分:2)
完全有一个库layoutmanagers。
您需要的是ViewPagerLayoutManager。它基于您已有的相同想法,但更多扩展并处理多个案例。它基本上滚动,直到页面和页面发生变化。然后状态接管并调整到正确的页面。
要使用它,您只需将其设置为普通的布局管理器:
recyclerView.setLayoutManager(new ViewPagerLayoutManager(getActivity()));
了解更多信息和示例,请查看here
答案 2 :(得分:1)