Android-动画实现原理
一 实现原理:
图形变换通过矩阵实现。图形变换是图形学的基本知识,简单来说就是,每种变换都是一次矩阵运算。
在Android中,CAnvas类中包含当前矩阵,当调用Canvas.drawBitmap(bmp, x, y, paint)绘制时,Android会先把bmp
做一次矩阵运算,然后将运算的结果显示在Canvas上。这样,我们只需要不断修改Canvas的矩阵
并刷新屏幕,View里面的对象就会不停的做图形变换,动画就形成了
二 具体过程
1,view创建动画对象,设置动画属性,调用invalidate刷新屏幕,启动动画
2,invalidate方法触发了onDraw函数
3,在onDraw()函数中进行下面的步骤
4,调用动画的getTransformation方法,得到当前时间点的矩阵
5,将该矩阵设置为Canvas的当前矩阵
6,调用canvas的drawBitmap方法,绘制屏幕
7,判断getTransformation的返回值,为真,调用invalidate方法,
刷新屏幕进入下一帧,为假,动画结束
如下图:
三 动画运行模式
1,动画运行模式:使用的是独占模式
独占模式:
程序在主线程中进入一个循环,根据动画指令不断刷新屏幕,直到动画结束
中断模式:
另外开启线程
四 动画使用的常用类
每个动画都重载了父类的applyTransformation方法,这个方法
会被父类的getTransformation方法调用,另外每个动画还有个initialize方法,完成初始化工作
1,Animation
使用的基本类,4中补间动画都继承它
2,Interpolater类
动画的插入器类,用于描述动画的过度效果
3,Transformation类
这个类记录了仿射矩阵Matrix,动画每触发一次,就会对原来的矩阵做一次运算
View的Bitmap与这个矩阵相乘即可实现相应的操作(旋转,平移,缩放)
这个类封装了矩阵和alpha值,有两个重要的成员,一是mMatrix,还有事mAlpha
五 为Activity指定动画效果
通过xml配置
1,修改Activity的Theme
在style.xml中定一Activity的切换动画,一般定义四种
左边进出,右边进出。
<style name="AnimationActivity" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/push_left_in</item>
<item name="android:activityOpenExitAnimation">@anim/push_left_out</item>
<item name="android:activityCloseEnterAnimation">@anim/push_right_in</item>
<item name="android:activityCloseExitAnimation">@anim/push_right_out</item>
</style>
2,然后在themes.xml中设置主题风格为style.xml中定义的xml
<style name="ThemeActivity">
<item name="android:windowAnimationStyle">@style/AnimationActivity</item>
<item name="android:windowNoTitle">true</item>
</style>
3,在AndroidManifest文件中为Activity指定theme
<activity android:theme="@theme/ThemeActivity">
使用代码设定
可调用overridePendingTransition实时修改Activity的切换动画
但是需要注意的是:该函数必须在调用startActivity()或者finish()后立刻调用,切只有效一次
版权声明:欢迎交流指正文章的错误,必定虚心接受,QQ872785786