1、基本特点

补间动画(Tween动画),是android最早的动画框架,从Android1.0开始就有。

功能:可以实现移动、旋转、缩放、渐变四种效果以及这四种效果的组合形式。

实现形式:xml和代码。

优点:使用简单效果流畅。

缺点:1、扩展性差,不支持自定义view;

2、动画只改变控件在屏幕的位置,不改变控件的实际属性。典型例子:Button执行完动画移动到另外位置,点击事件还在原来的地方。

2、设计原理:

虽然补间动画有点古老,但是他的设计思想挺值得分析和借鉴的。这一块的源代码位于package android.view.animation

下图是补间动画的主体类图:

图1-补间动画UML类图

动画的状态数据存在Transformation类中,主要的两个成员是mAlpha用了描述渐变效果和Matrix用来描述缩放旋转和平移效果。

通过AnimationUtils可以加载xml描述的动画或者通过调用构造函数生成需要的动画

动画的中间值则是由TimeInterpolator子类通过各种算法插值得出。

而Animation和Interpolator是由AnimationUtils加载xml或者通过默认值创造出来。

整个补间动画模块是在View绘制时嵌入的,下图是简要的时序图:

图1-调用时序图

VIew的绘制过程是很复杂的,这里只是介绍了一下调用补间动画模块的一个过程,如果有兴趣可以自己查看Android源码。上图箭头上是函数方法名。

3、使用指南

这一块有很多人都写过,也写的很好。这里推荐一篇

4、总结

(1)通过看源码可以彻底明白补间动画的优缺点,实现原理及设计思路;

(2)只能实现平移、缩放、旋转、渐变的原因是这一套框架中的元数据Transformation 只保存了alpha和一个描述几何变换的矩阵。

(3)不支持自定义view的原因是动画模块的调用起点在viewgroup

/**
* This method is called by ViewGroup.drawChild() to have each child view draw itself.
*
* This is where the View specializes rendering behavior based on layer type,
* and hardware acceleration.
*/
boolean draw(Canvas canvas, ViewGroup parent, long drawingTime) {}