导读
- 移动开发知识体系总章(Java基础、Android、Flutter)
- Android 动画的分类介绍
- Android中的基础动画 属性动画(Property Animation)
- View Animation(视图动画)详解
- Drawable Animation(帧动画)详解
Android 动画的分类
Android开发中,常用的动画有三种:
- Property Animation(属性动画)
- View Animation(视图动画)
- Drawable Animation(帧动画)
Property Animation(属性动画)
属性动画是Android3.0版本推出的动画框架,可谓Tween动画的升级版,它不仅能实现所有Tween动画的功能,还有很强的拓展性。
属性动画从本质上已经完全摆脱了控件,虽然我们大多数情况下使用属性动画都是给控件做动画,但是属性动画的底层只是一个数值发生器,和控件没有直接关系。
在Tween动画中即使他的位置发生了变化,但是点击事件,监听 ,都还停留在原地,不会跟着控件位置的变化去跟着改变。
一个经典的问题就是一个Button从一个地方移动到另一个地方,点击事件还是在原来的地方。
而属性动画,顾名思义直接是改变的控件的属性。所以,所有使用Tween动画的场景都可以用属性动画来替代。
属性动画还保留了Tween动画的监听属性,即使位置发生变化也不会影响它的使用。
属性动画的特性:
- 支持对所有View能更新的属性的动画(需要属性的setXxx()和getXxx())。
- 更改的是View实际的属性,所以不会影响其在动画执行后所在位置的正常使用。
- Android3.0(API11)及以后出现的功能,3.0之前的版本可使用github第三方开源库nineoldandroids.jar进行支持。
属性动画的优缺点:
缺点:(3.0+API出现)向下兼容问题
优点:易定制,效果强
View Animation(视图动画、Tween动画)
视图动画即View动画也被称作补间动画(Tween动画),在Android1.0版本的时候就有了,Tween动画一般直接作用页面中的 View 上,实现基本的动画效果:平移、旋转、缩放、透明度、或前几者的组合。
- 渐变动画支持四种类型:平移(Translate)、旋转(Rotate)、缩放(Scale)、透明度(Alpha)
- TranslateAnimation(平移动画)
- RotateAnimation(旋转动画)
- ScaleAnimation(缩放动画)
- AlphaAnimation(透明度动画)
- 只是显示的位置变动,View的实际位置未改变,表现为View移动到其他地方,点击事件仍在原处才能响应。
- 组合使用步骤较复杂。
- AnimationSet (动画集合)
View动画作用于视图整体,只需设定初始状态(关键帧)和结束状态(关键帧),中间的状态(变化过程)则由系统计算计算并补齐,这也就是为什么叫补间动画/Tween动画。
Tween动画的优缺点
优点:
使用/制作简单
效果流畅
文件小,占用内存少
缺点:
效果单一
扩展性差
只是在屏幕绘制上的动画,控件的属性并没有改变(如前面提到的Button从一个地方移动到另一个地方的问题)
更多关于View Animation(视图动画)的使用及详解
Drawable Animation(帧动画)
帧动画即Drawable动画,是在时间帧上逐帧绘制帧内容,由于是一帧一帧的画,所以逐帧动画具有非常大的灵活性,几乎可以表现任何想表现的内容。就是逐帧显示定义好的一组图片或者Drawable资源,效果类似于范灯片,一张张地切换图片,不同于View动画,系统提供了另外一个类AnimationDrawable来使用帧动画。实际的开发中,帧动画使用的场景相对较少。
帧动画的优缺点
优点:
- 有非常大的灵活性,表现任何想表现的内容,合于表演很细腻的动画
- 适合设备的开机动画
- 适合其“复杂”的效果,看似不可能完成的动画
缺点: - 增加制作负担而且最终输出的文件量普遍较大,会占用较大空间,容易卡顿,容易引起OOM
- 帧动画不能添加监听事件
更多关于Drawable Animation(帧动画)的使用及详解
文献:
https://www.jianshu.com/p/769242cba1f8
https://www.jianshu.com/p/0eb89d43eea4