分析Android动画模块之Tween动画(3)

Transformation 记录了仿射矩阵 Matrix,动画每触发一次,会对原来的矩阵做一次运算, View 的 Bitmap 与这个矩阵相乘就可实现相应的操作(旋转、平移、缩放等)。

Transformation 类封装了矩阵和 alpha 值,它有两个重要的成员,一是 mMatrix,二是 mAlpha。

Transformation 类图如下所示:

Transformation 类图

Transformation 类图

如何在 View 中实现动画

从逻辑上讲,实现动画需要如下几步:

view 创建动画对象,设置动画属性,调用 invalidate 刷新屏幕,启动动画; invalidate 方法触发了 onDraw 函数; 在 onDraw 函数中: 调用动画的 getTransformation 方法,得到当前时间点的矩阵 将该矩阵设置成 Canvas 的当前矩阵 调用 canvas 的 drawBitmap 方法,绘制屏幕。 判断 getTransformation 的返回值,若为真,调用 invalidate 方法,刷新屏幕进入下一桢;若为假,说明动画完成。

整个流程可用一个序列图表示:

Tween 动画序列图

Tween 动画序列图

使用样例

下面的代码是一个 view,系统创建 view 时会调用 onCreate 方法,该方法定义了一个 TranslateAniamtion,指定了移动起点和终点,动画持续时间为 1s,最后调用 startAnimation 将该动画保存在 View 的成员 mCurrentAnianmtion 中并启动动画。

注意,在 View 中需要定义成员变量 mCurrentAnimation 和 mTransformation ,分别记录当前的动画和变换。另外需要定义成员函数 startAnimation 启动动画。

class MyView extends View { Animation mCurrentAnimation = null; Transformation mTransformation = new Transformation;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwdpwf.html