1、基本特点
补间动画(Tween动画),是android最早的动画框架,从Android1.0开始就有。
功能:可以实现移动、旋转、缩放、渐变四种效果以及这四种效果的组合形式。
实现形式:xml和代码。
优点:使用简单效果流畅。
缺点:1、扩展性差,不支持自定义view;
2、动画只改变控件在屏幕的位置,不改变控件的实际属性。典型例子:Button执行完动画移动到另外位置,点击事件还在原来的地方。
2、设计原理:
虽然补间动画有点古老,但是他的设计思想挺值得分析和借鉴的。这一块的源代码位于package android.view.animation
下图是补间动画的主体类图:
动画的状态数据存在Transformation类中,主要的两个成员是mAlpha用了描述渐变效果和Matrix用来描述缩放旋转和平移效果。
通过AnimationUtils可以加载xml描述的动画或者通过调用构造函数生成需要的动画
动画的中间值则是由TimeInterpolator子类通过各种算法插值得出。
而Animation和Interpolator是由AnimationUtils加载xml或者通过默认值创造出来。
整个补间动画模块是在View绘制时嵌入的,下图是简要的时序图:
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) {}