SnapHelper实现RecyclerView滑动对齐效果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SnapHelper实现RecyclerView滑动对齐效果相关的知识,希望对你有一定的参考价值。

参考技术A 在列表滑动浏览,有时希望当滑动停止某个 ItemView 时可以停留在屏幕中央吸引用户的焦点,或者在边缘显示半个提示用户还有更多内容。RecyclerView在24.2.0版本中新增了SnapHelper这个辅助类来实现该效果。

SnapHelper 是个抽象类,在25.1.+版本官方提供了 ItemView 停留在中间位置的实现 LinearSnapHeler ,和类似于 ViewPager 效果的 PageSnapHelper

首先来张图

SnapHelper的主作用就是寻找离目标位置最近的ItemView作为SnapView并滑动到目标位置。

查找当前离目标最近的ItemView

根据加速度返回需要对齐ItemView的位置,主要用于fling 操作

返回targetView 对齐到指定目标位置的x,y轴上的偏移量。

在 SnapHelper.attachToRecyclerView() 方法中调用了 RecyclerView.addOnScrollListener() 和RecyclerView.setOnFlingListener()两个方法监听RecyclerView的滑动事件。

全面解析:SnapHelper用法、原理,含演示效果对比+实现代码

参考技术A

   SnapHelper 是在 Android 24.2.0 的support 包中新添加的一个支持库,是对RecyclerView的拓展。SnapHelper旨在支持RecyclerView的对齐方式,通过计算对齐RecyclerView中TargetView 的指定点或者容器中的任何像素点,可以使RecyclerView实现类似于 ViewPager 的切换效果。
  SnapHelper是对RecyclerView的一种拓展功能,支持snapping。SnapHelper通过处理RecyclerView的 fling ,来达到要展示的效果。

   作用 :LinearSnapHelper,可滑动多页,居中显示。

   作用 :每次只能滑动一页,居中显示。

Tips:
  此外,在RecyclerViewAdapter中具备多个ViewType时,可能会遇到抛出异常问题:java.lang.IllegalStateException: An instance of OnFlingListener already set.(当Adapter中有多个ViewType时可能发生)。
   具体解决方法 :参照我的另一篇博客: 完美解决:RecyclerViwe中使用SnapHelper报错:“An instance of OnFlingListener already set.”
   应评论区“无相孤君”同学的要求,大家可以传送去看看我的这篇博客 : 用ViewPager实现轮播图:图片无限轮播+动态切换+小圆点切换+透明标题

以上是关于SnapHelper实现RecyclerView滑动对齐效果的主要内容,如果未能解决你的问题,请参考以下文章

RecyclerView + SnapHelper实现炫酷ViewPager效果

全面解析:SnapHelper用法、原理,含演示效果对比+实现代码

SnapHelper 项目位置

RecyclerView SnapHelper 无法显示第一个/最后一个项目

Android——实现RecyclerView左侧滑删除与右侧滑选择

Android-RecyclerView系列 RecyclerView实现Item居中效果