前言
说起Android里面的动画,我可能会立马想起平移、旋转、渐变、缩放等动画效果,但是对于他们的属性就记的不太清了,知道的都是皮毛而且很容易忘记,每次需要用到的时候总要去baidu或者google,完全无法做到灵活应用,信手拈来。所以抽时间重新温故了一下动画相关的知识,把相关知识点记录下来,所谓好记性不如烂笔头
为了更好的记忆Android动画,我会给自己提出下面几个问题:
- Android提供了几种动画类型?
- 他们分别是什么,有什么意义?
- 不同类型之间有什么区别?
- 分别适用于什么样的场景?
带着这几个问题(可能还有其他的问题,你可以来补充),我们再来学习Android动画...
Android提供了几种动画
我画了一下Android动画关系图
从上图可以看得出,我们可以理解Android给我们提供了两种动画类型,一种是View Animation,一种是Property Animtion。
也可以分为三类,它们分别是Tween Animation、Frame Animation以及Property Animtion
哪些类型,有什么意义
View Animation
View Animtion从字面是可以称作视图动画(也可以叫传统动画),主要是针对控件进行动画操作,它是Andorid一出现就引入的。
Property Animtion
View Animtion称作属性动画,主要是控制改变控件属性值来达到动画效果,是Android 3.0时引入了
Tween Animation
Tween Animation称作补间动画,顾名思义,补间动画是通过改变控件的大小、颜色、位置、透明度,从而实现动画效果。图表中Tween Animation下面的四种动画类型就分别代表渐变(alpha)、旋转(rotate)、缩放(scale)、平移(translate)
Frame Animation
Frame Animation被称作逐帧动画,经常也被叫成Drawable Animation,通过顺序播放事先准备好的图片从而实现动画效果,类似于电影放映效果
ValueAnimator
顾名思义,ValueAnimator,不会对控件做任何操作,我们可以给它设定从哪个值运动到哪个值,通过监听这些值的渐变过程来自己操作控件
ObjectAnimator
ObjectAnimator 是派生自 ValueAnimator 的,所以 ValueAnimator 中所能使用的方法,在 ObjectAnimator 中都可以正常使用ValueAnimator只能对数值对动画计算,而ObjectAnimator能让动画直接与对应控件相关联。
不同类型之间有什么区别
通常说动画之间的区别主要是比较View Animation 和 Property Animation。
- View Animation是API 1的时候就引入了,而Property Animation是从API 11即Android3.0开始才引入。
- View Animation主要操作的视图控件,而Propety Animation主要操作的是控件内部的属性(举个例子:控件的点击事件,View Animation点击区域是在控件的初始位置,而Property Animation是在最后停留的位置)
- View Animation 在包 android.view.animation 中,而 Property Animation API 在包 android.animation 中
- Property Animation基于Animator和AnimatorSet的类结构,而View Animation则基于Animation和AnimationSet的类结构
- Property Animation的XML声明文件存放在res/animator目录下,而View Animation则存放在res/anim目录
适用场景
Tween Animation
一般进行平移,缩放,渐变、旋转操作,比如启动页渐入渐出动画、Activity页面进入和退出动画、对话框从底部弹出动画等
如果是一般的动画,使用Tween Animation基本上都能满足我们的需求
Frame Animation
帧动画,从名字也能看出那些地方可以使用,就像Flash一样,需要一帧一帧的显示一系列图片,连续起来就是动画效果
通常使用的场景是请求网络的等待进度、下拉刷新的等待进度等
或者可以理解为如果是需要用多张图片组合起来的动画都是通过Frame Animation实现的
Property Animtion
属性动画实现的相对比较复杂的动画效果。当然,Tween Animation的效果他基本上都能实现
比如带百分比的圆形进度条、控件背景颜色切换闪烁等等
结束语
本篇文章主要是对Android的动画的概念进行了一个总结,个人水平有限,可能总结的不够完善,欢迎补充。