SnapHelper解析

SnapHelper是RecyclerView的辅助工具,用于控制滑动后item的对齐方式。LinearSnapHelper实现居中显示,适用于横向RecyclerView,类似ViewPager效果。PagerSnapHelper限制每次滑动一页。在滚动和Fling过程中,SnapHelper通过findTargetSnapPosition和calculateDistanceToFinalSnap等方法确定目标视图并调整对齐。
摘要由CSDN通过智能技术生成

简介

SnapHelper是RecyclerView的辅助类,可用来控制在滑动结束后,RecyclerView中item的对齐方式。

SnapHelper是一个抽象类,系统内置了两个默认实现类

LinearSnapHelper:使当前Item居中显示,常用场景是横向的RecyclerView, 类似ViewPager效果,但是又可以快速滑动(滑动多页)

PagerSnapHelper:PagerSnapHelper的展示效果和LineSnapHelper是一样的,只是PagerSnapHelper 限制一次只能滑动一页,不能快速滑动。

滑动基础

RecyclerView的滚动分为滚动状态和Fling这两类,主要应对的是OnScrollListener和OnFlingListener这两个回调接⼝;

对应

    private void setupCallbacks() throws IllegalStateException {
        if (mRecyclerView.getOnFlingListener() != null) {
            throw new IllegalStateException("An instance of OnFlingListener already set.");
        }
        mRecyclerView.addOnScrollListener(mScrollListener);
        mRecyclerView.setOnFlingListener(this);
    }

    private void destroyCallbacks() {
        mRecyclerView.removeOnScrollListener(mScrollListener);
        mRecyclerView.setOnFlingListener(null);
    }

滚动状态监听

SCROLL_STATE_IDLE 滚动闲置状态,此时并没有手指滑动或动画执行

SCROLL_STATE_DRAGGING 滚动拖拽状态,由于用户触摸屏幕产生

SCROLL_STATE_SETTLING 自动滚动状态,此时手没有触摸,一般是由动画执行滚动到最终位置、包括smoothScrollTo等方法的调用

Fling操作

手指在屏幕上滑动RecyclerView然后松手,RecyclerView中的内容会顺着惯性继续往手指滑动的方向继续滚动直到停止,这个过程叫做Fling。Fling操作从手指离开屏幕瞬间被触发,在滚动停止时结束。 

过程

调用attachToRecyclerView绑定到RecyclerView时来完成对齐TargetView。

当Scroll被触发时和Fling操作的

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值