本文同步自我是一只香脆的大鸡排
Scroller是什么?
是一个帮助计算滑动偏移量的辅助类。关于滑动偏移的介绍可以参考上一篇文章。
Scroller能给我们带来什么好处?
如下图所示,我们想把下面的圆从A点设置到B点。
我们知道可以使用scrollTo与scrollBy来完成这个操作。但问题是直接调用会让人感觉唐突,就像下面这样的。
那么Scroller就是解决这个问题的。如果学过flash的同学一定不会陌生。里面有个动画叫补间动画。这里的补间就是在变化前和变化后中间这个过程插入若干帧来实现一个平滑的变动。
讲了,这么多。不如来看看到底怎么玩的。不贴源码,不搞一大坨文字说明。我画了一张简单的时序图来表示。
这里我们可以看到Scroller本身并不对View进行操作,它仅仅提供了基本的配置,和计算工作。最后还是交给View本身去调用scrollTo和scrollBy方法来实现滑动。
插值器
我们知道一组连续的动作,他们必定是一个个帧组合而成的。那么这些帧中的每一帧放多久,是匀速还是先加速后减速。来完成一组相对接近物理世界中的运动。在android中已经提供了一种叫插值器的类
来计算这些。
他们都实现了Interpolator
接口。在Scroller
的构造方法中如果我们不指定一个差值器,默认会使用ViscousFluidInterpolator
。
具体代码实现见源码,避免代码占用文章篇幅。以后也是这样尽量保持只剖析原理和思路。避免被代码干扰了。
源码参考:Scroller.java