您的位置:首页 > 其它

动画的正确使用姿势

2017-06-13 17:08 453 查看

一、Android 的动画由alpha、scale、translate、rotate四种类型组成。它们在xml中的使用姿势是怎样的呢?

在xml中定义的动画存放于res/anim文件夹下,使用R.anim.xxx来引用



alpha、scale、translate、rotate这四种动画都继承自Animation类,继承的属性如下:

android:duration="1500" //动画持续时间
android:fillAfter="true" //动画结束时是否保持结束时的状态
android:fillBefore="true" //动画结束时是否还原开始时的状态
android:repeatCount="11"  //重复次数,repeatCount和repeatMode要一起使用才有效果
android:repeatMode="reverse" //设置回放的类型,取值:reverse(倒序回放)、restart(重新从头播放).
android:interpolator="@android:anim/accelerate_interpolator"//插值器,指定动作的效果


1.scale缩放动画

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXScale="0.0" //开始时x方向上相对于自身的缩放比例,浮点值,例如:1.0表示原始大小,0.5表示原来的一半
android:toXScale="2.0" //结束时x方向上相对于自身缩放比例
android:fromYScale="0.0" //开始时y方向上相对于自身的缩放比例
android:toYScale="2.0" //结束时y方向上相对于自身缩放比例
android:pivotX="50%" //下面详解
android:pivotY="50%" //下面详解
/>


pivotX 和pivoY的取值有三种形式:数值,百分数,百分数p,都是以控件左上角为坐标原点来计算的,下面详细说明:

pivotX 和pivoY的取值都为0时,动画起始点就是坐标原点



(1) pivotX 和pivoY的取值都为数值: 50,表示在坐标原点的基础上在x轴和y轴上分别加50px,作为动画的起始点



(2)pivotX 和pivoY的取值都为百分数:50%,表示在坐标原点的基础上在x轴加上自身宽度的50%,在y轴加上自身高度的50%,作为动画的起始点



(3)pivotX 和pivoY的取值都为百分数p:50%p,此时取值的基数是父控件,也就是在坐标原点的基础上在x轴加上父控件宽度的50%,在y轴上加上父控件高度的50%,作为动画的起始点



2.alpha调节透明度

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="0.0" //动画开始时的透明度,0.0表示全透明,1.0表示完全不透明,取值范围:0.0~1.0
android:toAlpha="1.0"   //动画结束时的透明度,
/>


3.rotate旋转动画

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0" //开始旋转时的角度位置,正值表示顺时针方向度数,负值表示逆时针度数
android:toDegrees="360" //结束旋转时要转到的角度位置,
android:pivotX="50"    //取值类型:数值、百分数、百分数p,具体含义与scale中相同
android:pivotY="50"
/>


4.translate平移动画

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0" //起始点x坐标,取值类型:数值、百分数、百分数p,使用方式同scale中一样,下面的属性也相同
android:toXDelta="100" //结束点的x坐标
android:fromYDelta="0" //起始点的y坐标
android:toYDelta="100" //结束点的y坐标
/>


5.set组合动画

set标签没有自己的属性,它的属性都是从Animation中继承来的,会对set标签下的所有子控件起作用

android:duration="1500" //动画持续时间
android:fillAfter="true" //动画结束时是否保持结束时的状态
android:fillBefore="true" //动画结束时是否还原开始时的状态
android:repeatCount="11"  //重复次数,repeatCount和repeatMode要一起使用才有效果
android:repeatMode="reverse" //设置回放的类型,取值:reverse(倒序回放)、restart(重新从头播放).
android:interpolator="@android:anim/accelerate_interpolator"//插值器,指定动作的效果


例子:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fillAfter="true"
>
<alpha
android:fromAlpha="0.0"
android:toAlpha="1.0"
/>
<rotate
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50"
android:pivotY="50"
/>
<scale
android:fromXScale="0.5"
android:toXScale="1.0"
android:fromYScale="0.5"
android:toYScale="1.0"
android:pivotX="50%"
android:pivotY="50%"
/>
<translate
android:fromXDelta="0"
android:toXDelta="100"
android:fromYDelta="0"
android:toYDelta="100"
/>
</set>


6.执行动画

调用下面的方法就可以获取到在res/anim中定义的动画文件了

Animation animation = AnimationUtils.loadAnimation(this,R.anim.set_anim);
view.startAnimation(animation);


二、Android 的动画在代码中的使用姿势

ScaleAnimation TranslateAnimation RotateAnimation AlphaAnimation继承自Animation,继承的方法与xml中对应:

setDuration(long ) 动画持续时间,单位:毫秒
setFillAfter(boolean) 动画结束时是否保持结束时的状态
setFillBefore(boolean) 动画结束时是否保持开始时的状态
setRepeatCount(int) 设置重复次数
setRepeatMode(int)  设置重复类型,取值RESTART或REVERSE,必须和setRepeatCount()一起使用才有效果
setInterpolator(Interpolator)设置插值器


1.ScaleAnimation

pivotXType有三种取值分别对应xml中的数值,百分数,百分数p:Animation.ABSOLUTE、Animation.RELATIVE_TO_SELF、Animation.RELATIVE_TO_PARENT

public ScaleAnimation(float fromX, float toX, float fromY, float toY)
public ScaleAnimation(float fromX, float toX, float fromY, float toY,
float pivotX, float pivotY)
public ScaleAnimation(float fromX, float toX, float fromY, float toY,
int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)

ScaleAnimation scaleAnimation = new ScaleAnimation(1.0f,2.0f,1.0f,2.0f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);


2.AlphaAnimation

AlphaAnimation alphaAnimation = new AlphaAnimation(0.0f,1.0f);


3.RotateAnimation

pivotXType有三种取值分别对应xml中的数值,百分数,百分数p:Animation.ABSOLUTE、Animation.RELATIVE_TO_SELF、Animation.RELATIVE_TO_PARENT

public RotateAnimation(float fromDegrees, float toDegrees)
public RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY)
public RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue,
int pivotYType, float pivotYValue)
RotateAnimation rotateAnimation = new RotateAnimation(0f,360f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);


4.TranslateAnimation

pivotXType有三种取值分别对应xml中的数值,百分数,百分数p:Animation.ABSOLUTE、Animation.RELATIVE_TO_SELF、Animation.RELATIVE_TO_PARENT

public TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
public TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue,
int fromYType, float fromYValue, int toYType, float toYValue)
TranslateAnimation translateAnimation = new TranslateAnimation(Animation.ABSOLUTE,0,Animation.ABSOLUTE,100,Animation.ABSOLUTE,0,Animation.ABSOLUTE,100);


5.AnimationSet

public AnimationSet(boolean shareInterpolator) 是否共用一个插值器
public void addAnimation(Animation a) 将Animation添加到AnimationSet中,同时执行动画
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: