相关文章推荐

前言

这都9012年了, SnapHelper 不是新鲜玩意,为啥我要拿出来解析?首先,Google已经放出 Viewpager2 测试版本,该方案计划用 RecyclerView 替换掉 ViewPager ;其次,我发现身边很多 Android同学 SnapHelper 了解并不深;所以,弄懂并熟练使用 SnapHelper 是必要的;我借着阅读 androidx Viewpager2 源码的机会,跟大家仔细梳理一下 SnapHelper 的原理;

SnapHelper认识

我忽然觉得有必要科普一下 SnapHelper 的基本情况,首先 SnapHelper 是附加于 RecyclerView 上面的一个辅助功能,它能让 RecyclerView 实现类似 ViewPager 等功能;如果没有 SnapHelper RecyclerView 也能很好的使用;但一个普通的 RecyclerView 在滚动方面和 ListView 没有特殊的区别,都是给人一种直来直往的感觉,比如我想实现横向滚动左边的子View始终左对齐,或者我用力一滑,惯性滚动最大距离不能超过一屏,这些看似不属于 RecyclerView 的功能,有了 SnapHelper 就很好的解决;所以 SnapHelper 有它存在的价值,它不是 RecyclerView 核心功能的参与者,但有它就能锦上添花;

RecyclerView滚动基础

在正式介绍 SnapHelper 之前,先了解一下滚动相关的基础知识点,我把RecyclerView的滚动分为 滚动状态 Fling 这两类,主要应对的是 OnScrollListener OnFlingListener 这两个回调接口;

滚动状态监听

RecyclerVier 一共有三种描述滚动的状态: SCROLL_STATE_IDLE SCROLL_STATE_DRAGGING SCROLL_STATE_SETTLING ,稍微注释一下:

  • SCROLL_STATE_IDLE
  •  
    推荐文章