码迷,mamicode.com
首页 > 移动开发 > 详细

Android-动画实现原理

时间:2015-07-12 15:46:39      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:android   动画   原理   矩阵   

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

Android-动画实现原理

标签:android   动画   原理   矩阵   

原文地址:http://blog.csdn.net/qq_22075977/article/details/46849903

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!