Android平滑移动——Scroller类研究(2)

答:跟上面一样,会死循环刷新View,只是由于Y坐标不断的在变化,导致了View根据Y坐标变化规律上下移动,这样一来,如果Y坐标的变化是有规律的,是慢慢向下移动的,那这就达到了我们今天要研究的效果----平滑移动了;而这里我们今天要谈的Scroller就是这样一个工具类,给我们提供有规律变化的坐标的工具类;嘿嘿,似乎发现了什么…

有种拨云见日的感觉啊,原来平滑移动如此easy,那么与其说Scroller是Android中View平滑移动的一个辅助类,不如直接说Scroller是一个计算坐标的工具类。其实Scroller与View的滑动是没有关系的,它只是计算在动画执行某个时间所在的某个位置的坐标,这样就形成了坐标路线,再view根据坐标路线循环invalidate在界上新显示,就形成了我们看到的平滑移动了。

知道了Scroller的工作原理,下面根据源码分析一下Scroller类常用的几个方法:

1、startScroll()方法:

源码:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值