Android平滑移动——Scroller类研究,2024谈一下当下最合适的Android架构

文章详细解释了Android中的Scroller类,特别是computeScrollOffset和fling方法在动画和滑动过程中的作用,涉及坐标计算、模式选择(SCROLL_MODE和FLING_MODE)、速度调整和惯性滑动。还提到阅读源码对开发者的重要性,提供了一份全面的学习资源清单。
摘要由CSDN通过智能技术生成

public void startScroll(int startX, int startY, int dx, int dy, int duration) {

mMode = SCROLL_MODE;

mFinished = false;

mDuration = duration;

mStartTime = AnimationUtils.currentAnimationTimeMillis();

mStartX = startX;

mStartY = startY;

mFinalX = startX + dx;

mFinalY = startY + dy;

mDeltaX = dx;

mDeltaY = dy;

mDurationReciprocal = 1.0f / (float) mDuration;

}

简单到让人无法相信,仅仅是设置了一下动画开始时间,起始坐标,终点坐标、时间倒数(仅仅是方便计算而已)等变量而已;其实这样我们的动画可以说已经开始了,只是没有根据坐标绘制到界面上而已;因为它这里保存了开始时间,当平滑开始的时候,Scroller就可以根据滑动的时间差来计算当前坐标应该处的位置,View根据坐标invalidate就可以滑动了;

当然这里影响到坐标计算的还有一个就是加速器,在重载的构造方法方法 public Scroller(Context context, Interpolator interpolator) 里面有详述:这里我们也可以自定义自己的加速器,具体原理与如何自定义这里就不阐述了;

2、computeScrollOffset()方法:

public boolean computeScrollOffset() {

if (mFinished) {

return false;

}

int timePassed = (int)(AnimationUtils.currentAnimationTimeMillis() - mStartTime);

if (timePassed < mDuration) {

switch (mMode) {

case SCROLL_MODE:

float x = timePassed * mDurationReciprocal;

if (mInterpolator == null)

x = vi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值