Android系统提供了很多丰富的API去实现UI的2D与3D动画,最主要的划分可以分为如下几类:
1、Tween动画,也叫补间动画、视图动画。
2、Frame动画,也叫逐帧动画。
3、属性动画。
一、Tween动画
通过对View执行一系列简单变换来实现动画效果,它提供了4种动画效果:
AlphaAnimation:透明度动画
RotateAnimation:旋转动画
ScaleAnimation:缩放动画
TranslateAnimation:平移动画
可以单独使用,也可以通过动画集合类(AnimationSet)可以将多个补间动画以组合的形式显示出来。
在Android3.0之前,Tween动画一家独大,它的优点非常明显,即效率比较高且使用方便,能够满足绝大多数的动画需求,但是随着Android 3.0以后属性动画的推出,它的风光就大不如从前。主要是因为它有以下缺点:
1、只能应用于View对象
2、不具备交互性,当某个元素发生视图动画后,其响应事件的位置还依然在动画前的地方,所以视图动画只能做普通的动画效果,避免交互的发生。
一个Tween动画的实例:
二、Frame动画
Frame动画,从字面上理解就是一帧挨着一帧的播放图片,就像放电影一样。和补间动画一样可以通过xml实现也可以通过java代码实现。
一个Frame动画的效果展现:
三、Frame动画、Tween动画的补充说明:
1、Frame动画是在时间帧上逐帧绘制帧内容,由于是一帧一帧的画,所以逐帧动画具有非常大的灵活性,几乎可以表现任何想表现的内容,但是Frame动画只能实现比较小的动画效果,如果复杂而且帧数比较多的动画不太建议使用Frame动画,一方面是因为会造成OOM,另一方面会显得很卡,如果真是超级复杂的动画的话建议选择双缓冲绘制View来实现。
2、与Frame动画相比,Tween动画具有以下几个特点:首先,制作方法简单方便。只需要为动画的第一个关键帧和最后一个关键帧创建内容,两个关键帧之间帧的内容由Flash自动生成,不需要人为处理。其次,相对于Frame动画来说,Tween动画更为连贯自然。因为逐帧动画是由手工控制,帧与帧之间的过渡很可能会不自然、不连贯,而Tween动画除了两个关键帧由手工控制外,中间的帧都由Flash自动生成,技术含量很高,因此过渡更为自然连贯。最后,相对于逐帧动画来说,补间动画的文件更小,占用内存少。
四、属性动画
由于已有的动画框架Animation存在一些局限性:动画改变的只是显示,并不能响应事件,Andorid在3.0版本上推出了属性动画,它实际上是一种不断地对值进行操作的机制,并将值赋值到指定对象的指定属性上,可以是任意对象的任意属性。所以我们仍然可以将一个View进行移动或者缩放,也可以针对非view对象进行操作,我们只需要告诉系统动画的运行时长,需要执行哪种类型的动画,以及动画的初始值和结束值,剩下的工作就可以全部交给系统去完成了。
属性动画最大的特点就是 保留了这些监听之类的属性,即使位置发生变化也不会影响它的使用。
一个属性动画的例子:
这里对android的动画进行简单介绍,后续会详细记录每种动画的原理及使用方法。