一、概述
Android的animation由四种类型组成:alpha、scale、translate、rotate。
1、XML配置文件中
1)alpha:渐变透明度动画效果;
2)Scale:渐变尺寸伸缩动画效果;
3)Translate:画面转换位置移动动画效果;
4)Rotate:画面转移旋转动画效果。
2、动作文件存放位置
动作定义文件应该存放在res/anim文件夹下,访问时采用R.anim.XXX.xml的方式。
二、属性介绍
1、XML配置自有属性
1)android:fromXScale 起始的X方向上相对自身的缩放比例,浮点值,比如1.0代表自身无变化,0.5代表起始时缩小一倍,2.0代表放大一倍;
2)android:toXScale 结尾的X方向上相对自身的缩放比例,浮点值;
3)android:fromYScale 起始的Y方向上相对自身的缩放比例,浮点值,
4)android:toYScale 结尾的Y方向上相对自身的缩放比例,浮点值;
5)android:pivotX 缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,当为数值时,表示在当前View的左上角,即原点处加上50px,做为起始缩放点;如果是50%,表示在当前控件的左上角加上自己宽度的50%做为起始点;如果是50%p,那么就是表示在当前的左上角加上父控件宽度的50%做为起始点x轴坐标。(具体意义,后面会举例演示)
6)android:pivotY 缩放起点Y轴坐标,取值及意义跟android:pivotX一样。
7)android:fromAlpha 动画开始的透明度,从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明
8)android:toAlpha 动画结束时的透明度,也是从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明
9)android:fromDegrees 开始旋转的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数
10)android:toDegrees 结束时旋转到的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数
11)android:pivotX 缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,具体意义已在scale标签中讲述,这里就不再重讲
12)android:pivotY 缩放起点Y轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p
13)android:fromXDelta 起始点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,具体意义已在scale标签中讲述,这里就不再重讲
14)android:fromYDelta 起始点Y轴从标,可以是数值、百分数、百分数p 三种样式;
15)android:toXDelta 结束点X轴坐标
16)android:toYDelta 结束点Y轴坐标
2、从Animation类继承的属性
1)android:duration 动画持续时间,以毫秒为单位
2)android:fillAfter 如果设置为true,控件动画结束时,将保持动画最后时的状态
3)android:fillBefore 如果设置为true,控件动画结束时,还原到开始动画前的状态
4)android:fillEnabled 与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
5)android:repeatCount 重复次数
6)android:repeatMode 重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。
7)android:interpolator 设定插值器,其实就是指定的动作效果,比如弹跳效果等。
3、代码使用XML配置的动画
Animation animation = AnimationUtils.loadAnimation(this, R.anim.xxx); view.startAnimation(animation);
4、代码设置动画
1)ScaleAnimation
ScaleAnimation(Context context, AttributeSet attrs) //从XML文件加载动画,基本用不到 ScaleAnimation(float fromX, float toX, float fromY, float toY) ScaleAnimation(float fromX, float toX, float fromY, float toY, float pivotX, float pivotY) ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
第一个构造函数是从本地XML文件加载动画,基本用不到的,我们主要看下面三个构造函数。
在标签属性android:pivotX中有三种取值,数,百分数,百分数p;体现在构造函数中,就是最后一个构造函数的pivotXType,它的取值有三个,Animation.ABSOLUTE、Animation.RELATIVE_TO_SELF和Animation.RELATIVE_TO_PARENT。
2)AlphaAnimation
AlphaAnimation(Context context, AttributeSet attrs) //同样,从本地XML加载动画,基本不用 AlphaAnimation(float fromAlpha, float toAlpha)
3)RotateAnimation
RotateAnimation(Context context, AttributeSet attrs) //从本地XML文档加载动画,同样,基本不用 RotateAnimation(float fromDegrees, float toDegrees) RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY) RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
RotateAnimation跟ScaleAnimation差不多,关键问题同样是pivotXType和pivotYType的选择,同样有三个取值:Animation.ABSOLUTE、Animation.RELATIVE_TO_SELF和Animation.RELATIVE_TO_PARENT;
4)TranslateAnimation
TranslateAnimation(Context context, AttributeSet attrs) //同样,基本不用 TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta) TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue, int fromYType, float fromYValue, int toYType, float toYValue)
由于fromXDelta、fromYDelta、toXDelta、toYDelta这三个属性都具有三种状态,所以在构造函数中,最理想的状态就是第三个构造函数,能够指定每个值的类型,第二个构造函数:TranslateAnimation (float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)使用是绝对数值。只有最后一个构造函数可以指定百分数和相对父控件的百分数。
5)AnimationSet
它自己是没有XML属性的,所以我们直接说它的构造函数:
AnimationSet(Context context, AttributeSet attrs) //同样,基本不用 AnimationSet(boolean shareInterpolator) //shareInterpolator取值true或false,取true时,指在AnimationSet中定义一个插值器(interpolater),它下面的所有动画/ //共同。如果设为false,则表示它下面的动画自己定义各自的插值器。
增加动画的函数为:(更多函数,请参看SDK文档)
public void addAnimation (Animation a)
三、Interpolator差值器
1、Interpolator的系统值有下面几个:
1)AccelerateDecelerateInterpolator 在动画开始与介绍的地方速率改变比较慢,在中间的时候加速
2)AccelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始加速
3)AnticipateInterpolator 开始的时候向后然后向前甩
4)AnticipateOvershootInterpolator 开始的时候向后然后向前甩一定值后返回最后的值
5)BounceInterpolator 动画结束的时候弹起
6)CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线
7)DecelerateInterpolator 在动画开始的地方快然后慢
8)LinearInterpolator 以常量速率改变
9)OvershootInterpolator 向前甩一定值后再回到原来位置
2、XML配置差值器
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
3、代码配置差值器
Anim.setInterpolator(new BounceInterpolator());