android提供两类动画 Tween 和 frame动画
Tween 即对场景里的对象里的图片不断的做图像变换,(缩放,平移,旋转,透明)
Tween的进度有Interpolator 进行操作,匀速:linearInterpolator 加速 Accelerateinterpolator 减速 DecelerateInterpolator 先加速后减速AccelerateDecelerateInterpolator
动画的运行模式有两种:
- 独占模式,即程序主线程进入一个循环,根据动画指令不断刷新屏幕,直到动画结束;
- 中断模式,即有单独一个线程对时间计数,每隔一定的时间向主线程发通知,主线程接到通知后更新屏幕;
图形变换通过仿射矩阵实现。图形变换是图形学中的基本知识。简单来说就是,每种变换都是一次矩阵运算。在 Android 中,Canvas 类中包含当前矩阵,当调用 Canvas.drawBitmap (bmp, x, y, Paint) 绘制时,android 会先把 bmp 做一次矩阵运算,然后将运算的结果显示在 Canvas 上。这样,编程人员只需不断修改 Canvas 的矩阵并刷新屏幕,View 里的对象就会不停的做图形变换,动画就形成了。
TranslateAnimation,,RotateAnimation、AlphaAnimation 等是 Animation 的 子类,分别实现了平移、旋转、改变 Alpha 值等动画。
如何在 View 中实现动画
从逻辑上讲,实现动画需要如下几步:
- view 创建动画对象,设置动画属性,调用 invalidate 刷新屏幕,启动动画;
- invalidate 方法触发了 onDraw 函数;
- 在 onDraw 函数中:
- 调用动画的 getTransformation 方法,得到当前时间点的矩阵
- 将该矩阵设置成 Canvas 的当前矩阵
- 调用 canvas 的 drawBitmap 方法,绘制屏幕。
- 判断 getTransformation 的返回值,若为真,调用 invalidate 方法,刷新屏幕进入下一桢;若为假,说明动画完成。
http://www.linuxgraphics.cn/animation/android_tween_animation.html
浙公网安备 33010602011771号