一、AlphaAnimation(渐变动画)
1.1 代码形式实现
//渐变动画
private void startAlphaAnimation () {
/**
* 创建渐变动画对象
* 参数1:从一个透明值
* 参数2:到另外一个透明值
* 参数取值范围0~1
* 0:全不透明
* 1:全透明
*/
AlphaAnimation aa = new AlphaAnimation (1,0);
//设置动画播放时长
aa.setDuration (1000);
//设置保持动画结束后的动作
aa.setFillAfter (true);
//设置保持动画结束前的动作
//aa.setFillBefore (true);
//设置延时之后再启动动画
aa.setStartOffset (500);
//设置重复播放动画的次数,如果为负数的话,则一直重复播放
aa.setRepeatCount (3);
/**
* 设置重复播放的模式,参数有2个Animation.REVERSE、Animation.RESTART
* Animation.REVERSE,紧接着播放动画
* Animation.RESTART,回到开始的状态再播放动画
*/
aa.setRepeatMode (Animation.RESTART);
//播放动画
iv_anim.startAnimation (aa);
//监听动画的状态,其它动画的监听也是一样的
aa.setAnimationListener (new Animation.AnimationListener () {
//开始动画时回调
@Override
public void onAnimationStart (Animation animation) {
toast("开始动画时回调");
}
//动画结束后回调
@Override
public void onAnimationEnd (Animation animation) {
toast("动画结束后回调");
}
//重复播放动画时回调
@Override
public void onAnimationRepeat (Animation animation) {
toast("重复播放动画时回调");
}
});
}
1.2 使用xml方式
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="1"
android:toAlpha="0">
</alpha>
二、ScaleAnimation(缩放动画)
2.1 代码形式实现
//缩放动画
private void startScaleAnimation () {
/**
* 创建缩放动画对象
* 参数1:X轴从多大开始缩放
* 参数2:X轴缩放到多大
* 参数3:Y轴从多大开始缩放
* 参数4:Y轴缩放到多大
* 0是从没有开始缩放
* 其他大于零的数是缩放的倍数
* 小于零的数是将缩放的控件翻转再进行缩放
*
* 参数5:X轴围绕哪里(可以是自己,也可以是父控件)缩放Animation.RELATIVE_TO_SELF,Animation.RELATIVE_TO_PARENT
* 参数6:围绕X轴的哪个点进行缩放
* 参数7:Y轴围绕哪里缩放
* 参数8:围绕Y轴的那个点进行缩放
*/
ScaleAnimation sa = new ScaleAnimation (1,0,1,0,Animation.RELATIVE_TO_SELF,2.0f,Animation.RELATIVE_TO_SELF,2.0f);
//以下设置的参数同渐变动画设置的参数一致
sa.setDuration (1000);
sa.setRepeatCount (3);
sa.setRepeatMode (Animation.REVERSE);
sa.setFillAfter (true);
sa.setStartOffset (500);
iv_anim.startAnimation (sa);
}
2.2 使用xml方式
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXScale="1"
android:fromYScale="1"
android:toXScale="2"
android:toYScale="2"
android:pivotX="50%"
android:pivotY="50%">
</scale>
三、RotateAnimation(旋转动画)
3.1 代码的形式实现
//旋转动画
private void startRotateAnimation () {
/**
* 创建旋转动画对象
* 参数1:从哪个角度开始旋转
* 参数2:旋转到哪个角度
* 参数3:X轴围绕哪里(可以是自己,也可以是父控件)旋转Animation.RELATIVE_TO_SELF,Animation.RELATIVE_TO_PARENT
* 参数4:X轴围绕着哪个点进行旋转
* 参数5:Y轴围绕哪里旋转
* 参数6:Y轴围绕着哪个点进行旋转
*/
RotateAnimation ra = new RotateAnimation (0,720,Animation.RELATIVE_TO_PARENT,1.0f,Animation.RELATIVE_TO_SELF,1.0f);
//以下设置的参数同渐变动画设置的参数一致
ra.setDuration (1000);
ra.setStartOffset (500);
ra.setFillAfter (true);
ra.setRepeatCount (4);
ra.setRepeatMode (Animation.REVERSE);
iv_anim.startAnimation (ra);
}
3.2 使用xml方式实现
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:toDegrees="360"
android:pivotY="100%p"
android:pivotX="100%p">
</rotate>
四、TranslateAnimation(平移动画)
4.1 代码的形式实现
//平移动画
private void startTranslateAnimation () {
/**
* 创建平移动画的对象
* 参数1:X轴平移起始位置相对于哪里(可以相对自己,起始位置相对于自己或者父控件,其实是一样的,可以相对父控件,如果是父控件,有可能跑到屏幕外面)
* 参数2;X轴平移动画的起始位置
* 参数3:X轴平移动到的位置相对哪里(可以相对自己,起始位置相对于自己或者父控件,其实是一样的,可以相对父控件,如果是父控件,有可能跑到屏幕外面)
* 参数4:X轴平移到的位置
* 参数5:Y轴平移起始位置相对于哪里(可以相对自己,起始位置相对于自己或者父控件,其实是一样的,可以相对父控件,如果是父控件,有可能跑到屏幕外面)
* 参数6;Y轴平移动画的起始位置
* 参数7:Y轴平移动到的位置相对哪里(可以相对自己,起始位置相对于自己或者父控件,其实是一样的,可以相对父控件,如果是父控件,有可能跑到屏幕外面)
* 参数8:Y轴平移到的位置
*
* 总结:平移相对位置只和平移到的相对位置有关。
*/
TranslateAnimation ta = new TranslateAnimation (Animation.RELATIVE_TO_PARENT,0,Animation.RELATIVE_TO_SELF,1F,Animation.RELATIVE_TO_PARENT,0f,Animation.RELATIVE_TO_SELF,1f);
//以下设置的参数同渐变动画设置的参数一致
ta.setRepeatMode (Animation.REVERSE);
ta.setRepeatCount (4);
ta.setDuration (1000);
ta.setStartOffset (500);
ta.setFillAfter (true);
iv_anim.startAnimation (ta);
}
4.2 使用xml方式实现
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="200"
android:toYDelta="200">
</translate>
五、AnimationSet(组合动画)
5.1 代码的形式实现
//组合动画
private void startSetAnimation () {
/**
* 创建组合动画对象
* 参数的具体意义不是很清楚,待以后清楚了补充
*/
AnimationSet as = new AnimationSet (true);
TranslateAnimation ta = new TranslateAnimation (Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,1F,Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF,1f);
ta.setRepeatMode (Animation.REVERSE);
ta.setRepeatCount (4);
ta.setDuration (1000);
ta.setStartOffset (500);
ta.setFillAfter (true);
RotateAnimation ra = new RotateAnimation (0,360,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
ra.setDuration (1000);
ra.setStartOffset (500);
ra.setFillAfter (true);
ra.setRepeatCount (4);
ra.setRepeatMode (Animation.REVERSE);
ScaleAnimation sa = new ScaleAnimation (0,1,0,1,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
sa.setDuration (1000);
sa.setRepeatCount (4);
sa.setRepeatMode (Animation.REVERSE);
sa.setFillAfter (true);
sa.setStartOffset (500);
AlphaAnimation aa = new AlphaAnimation (0,1);
aa.setDuration (1000);
aa.setFillAfter (true);
aa.setStartOffset (500);
aa.setRepeatCount (4);
aa.setRepeatMode (Animation.REVERSE);
//往组合动画中添加其它动画对象
as.addAnimation (ta);
as.addAnimation (sa);
as.addAnimation (aa);
as.addAnimation (ra);
//启动动画
iv_anim.startAnimation (as);
}
5.2 使用xml方式实现
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha android:fromAlpha="1"
android:toAlpha="0"/>
<rotate android:fromDegrees="0"
android:toDegrees="180"
android:pivotX="50%"
android:pivotY="50%"/>
<scale android:pivotY="50%"
android:pivotX="50%"
android:fromXScale="1"
android:fromYScale="1"
android:toYScale="2"
android:toXScale="2"/>
<translate android:fromYDelta="0"
android:fromXDelta="0"
android:toYDelta="200"
android:toXDelta="200"/>
</set>
六、xml方式需要在代码中加载
//加载xml动画
AnimationSet animation = (AnimationSet) AnimationUtils.loadAnimation(this, R.anim.myset);
Demo下载地址:点击打开链接