Android动画
Android中的动画分为:View动画,帧动画,属性动画
- View动画:让对象不断做图像变换(平移 缩放 旋转 透明度)从而产生动画效果,是渐进式动画
- 帧动画:通过顺序播放一系列图片产生动画效果,图片过多过大会产生OOM
- 属性动画:动态地改变对象的属性从而达到动画的效果
1. View动画
View动画的作用对象是View,支持4种动画效果:平移动画,缩放动画,旋转动画和透明度动画.
补间动画是指只要指定动画的开始,结束的“关键帧”,而动画变化的“中间帧”由系统计算并补齐.上面4种动画都属于补间动画.
1.1 View动画的分类
View动画的四种变换效果对应着Animation的四个子类,除了用代码来动态创建,也可以用XML格式来定义
< set > : 表示动画集合,对应AnimationSet类,可以包含多个动画
< translate >: 表示平移动画,对应TranslateAnimation类
< scale >: 表示缩放动画,对应ScaleAnimation,默认轴点是View的中心
< rotate >: 表示在旋转动画,对应RotateAnimation
< alpha >: 表示透明度动画,对应AlphaAnimation
View还有一些常见的属性:
- duration:动画的持续时间
- fillAfter:动画结束以后View是否停留在结束位置
1.2 View动画的使用场景
- LayoutAnimation:作用于ViewGroup,为ViewGroup指定一个动画,当子元素出场时都会具有这种动画效果,经常使用在ListView上
- Activity的切换效果:调用
overridePendingTransition(int enterAnim, int exitAnim)
方法,必须在startActivity或finish之后调用才可以生效.- enterAnim — Activity被打开时,所需的动画资源id
- exitAnim — Activity被暂停时,所需的动画资源id
2. 帧动画
帧动画是顺序播放一组预先定义好的图片,系统提供了一个类AnimationDrawable来使用帧动画,使用时要尽量避免使用过多尺寸较大的图片
3.属性动画
属性动画是API11新加入的特性,和View动画不同,属性动画可以对任何对象(对象的该属性有set方法和get方法)做动画.
3.1插值器和估值器
TimeInterpolator:时间插值器,根据时间流逝的百分比来计算出当前属性值改变的百分比. 系统预设的有LinearInterpolator(线性插值器: 匀速动画),AccelerateDecelerateInterpolator(加速减速插值器: 动画两头慢中间快),DecelerateInterpolator(减速插值器: 动画越来越慢)
TypeEvaluator:类型估值器,根据当前属性改变的百分比来计算改变后的属性值. 系统预设的有IntEvaluator(针对整型属性),FloatEvaluator(针对浮点型属性),ArgbEvaluator(针对Color属性)
属性动画中的插值器和估值器很重要,它们是实现非匀速运动的重要手段.
3.2 属性动画的基本使用
属性动画几个比较常用的类是ValueAnimator,ObjectAnimator,AnimatorSet,其中ObjectAnimator继承自ValueAnimator,AnimatorSet是动画集合.
属性动画的基本使用可以分为如下三个步骤:
- 如果没有设置属性的初始值,系统会通过该属性的get方法获取初始值,所以在没有设置属性的初始值时,必须提供该属性的get方法,否则会Crash.
- 在动画的播放过程中,属性动画会利用时间插值器获取属性值改变的百分比,然后再通过估值器计算出改变后的属性值.
- 通过该属性的set方法将改变后的属性值设置到对象中.