Scroller源码分析(OverScroller)

本文详细分析了Android中的OverScroller类,它是Scroller的升级版,能够处理超越边界的情况。通过构造器、startScroll方法、computeScrollOffset方法等,解释了OverScroller如何实现平滑滚动和处理超出边界的行为。文章还探讨了ViscousFluidInterpolator插值器的作用,以及其内部复杂的数学计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多和滚动啊滑动啊有关的功能,都绕不开一个类,Scroller,如果只是想移动画布的话,在View中就有一些我们可以使用的api, 例如mScrollX,mScrollY,scrollTo(),ScrollBy(),但是这些方法会直接一步到位,所以我们需要scroller来实现平滑的滚动,或者各种骚操作滚动。

在Api19,Google爸爸新引入了OverScroller,相比之下,多了处理超越边界的方法,所以我们只看新类的源码就好。

先看下OverScroller类的public方法和属性,见下图。
在这里插入图片描述

方法和属性分析

构造器中,初始化了两个主要的组件。

public OverScroller(Context context, Interpolator interpolator, boolean flywheel) {
        if (interpolator == null) {
            mInterpolator = new Scroller.ViscousFluidInterpolator();
        } else {
            mInterpolator = interpolator;
        }
        mFlywheel = flywheel;
        mScrollerX = new SplineOverScroller(context);
        mScrollerY = new SplineOverScroller(context);
    }

一个是ViscousFluidInterpolator,看字面意思是一个插值器,看了下源码灰常复杂的小学四则混合运算,头疼,不过插值器这东西大概是调整速度曲线的吧,什么先快后慢,欲扬先抑,九浅一深之类的,我们先走一遍主流程,所以暂时搁置。

另一个组件SplineOverScroller也是非常重要,主线剧情上很多的函数最后都要靠这个小老弟来实现,不过点进去又是一堆四则混合运算,为了快速通关刷剧情,所以老办法,搁置!

我们是源码分析,所以讲道理应该已经会使用这个类了,But,作为一个资深的api调用师,在分析之前很有必要回想一下,完整的调用流程是什么?

class Api调用师的一个类{
	val scroller:OverScroller...
	
	fun 一个名为A的调用{
		scroller.startScroll(startX,startY,dx,dy,duration)
		invalidate()
	}
	
	
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值