前言
最近这段时间对弹性动画比较感兴趣,空闲就做了一下弹性动画的实现。网上对弹性动画的实现其实是有3种,属性动画设置spring插值器、facebook出的rebound以及google出的SpringAnimation。考虑到android的google背景以及想重温一下属性动画的使用,本博实现了第一种和第三种。
最终实现效果
注意上述动态图界面的title,第一个界面是属性动画差值器的实现,第二个界面是SpringAnimation的实现。每一种实现都做了四种常见的动画操作:缩放、平移、旋转、淡入淡出。
思路及代码
所谓“弹性动画”,其实就是控件的某个属性值在到达某个值之后在该值的左右来回变化(变得比改之大,或变得比该值小),最终稳定在该值的效果。这种变化的动画很像弹簧,所以就叫做“弹性动画”。这种变化作用在view的缩放参数(scaleX、scaleY)、平移参数(transactionX、transactionY)、旋转参数(rotation)、透明度参数(alpha)上会有物理运动的那种平滑过渡的效果,比直接到达该值的那种生硬好很多很多,这也是“弹性动画”的意义了。
插值器实现
属性动画的弹性效果实现,是利用插值器。而选择合适的插值器函数至关重要,网上的一篇文章直接给出了函数:pow(2, -10 * x) * sin((x - factor / 4) * (2 * PI) / factor) + 1,我们就可以利用这个函数创建自己的插值器实现此效果:
public class SpringInterpolator implements Interpolator {
private float factor;
public SpringInterpolator(float factor) {
this.factor = factor;
}
@Override
public float getInterpolati