Android的基础动画有四种
1.Tween Animation —— 变换动画
2.Layout Animation —— 布局动画
3.Frame Animation —— 帧动画
4.Property Animation —— 属性动画
两种实现方法
1.配置文件(/res/anim) —— alpha、scale、translate、rotate (简单)
2.java代码实现 —— AlphaAnimation、ScaleAnimation、TranslateAnimation、RotateAnimation(更灵活)
Tween Animation(变换动画)
Alpha —— 渐变透明度动画
Scale —— 渐变尺寸缩放动画
Translate —— 位置移动动画
Rotate —— 旋转动画
Alpha(渐变透明度):
1.xml实现方式:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<alpha
android:duration="1000"
android:fromAlpha="0.1"
android:toAlpha="1.0" >
</alpha>
</set>
duration: 动画持续时间(单位:毫秒)
fromAlpha: 透明度从10%开始
toAlpha:透明度截至到100%
在Activity中调用:
Animation loadAnimation = AnimationUtils.loadAnimation(this, R.anim.alpha);
image.startAnimation(loadAnimation);
2.java代码实现:
例如闪烁效果:
//创建动画
AlphaAnimation alphaAnimation = new AlphaAnimation(0.1f, 1.0f);
alphaAnimation.setDuration(100);
//次数 可以直接写int
alphaAnimation.setRepeatCount(ValueAnimator.INFINITE);
//倒序重复REVERSE 正序重复RESTART
alphaAnimation.setRepeatMode(Animation.REVERSE);
//开始播放
image.startAnimation(alphaAnimation);
Scale(渐变尺寸缩放):
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
>
<scale
android:duration="2000"
android:fromXScale="0.0"
android:fromYScale="0.0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="1.0"
android:toYScale="1.0" />
</set>
fromXScale:动画起始时 x坐标上的伸缩尺寸
fromYScale:动画起始时 y坐标上的伸缩尺寸
toXScale:动画结束时 x坐标上的伸缩尺寸
toYScale:动画结束时 y坐标上的伸缩尺寸
interpolator:指定一个动画的插入器 (accelerate_decelerate_interpolator 加速-减速 动画插入器 ; accelerate_interpolator 加速;decelerate_interpolator 减速)
pivotX:动画相对于物件的x坐标的开始位置
pivotY:动画相对于物件的y坐标的开始位置
Translate(位置移动):
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true"
android:fillBefore="false"
>
<translate
android:duration="1000"
android:fromXDelta="10"
android:fromYDelta="10"
android:toXDelta="100"
android:toYDelta="100"
/>
</set>
fromXDelta:动画起始时 x坐标上的位置
fromYDelta:动画起始时 y坐标上的位置
toXDelta:动画结束时 x坐标上的位置
toYDelta:动画结束时 y坐标上的位置
fillAfter:为true时 动画停留在结束时的状态 (注意:要放在set里 否则无效)
fillBefore:为true时 动画返回开始时的状态 (注意:要放在set里 否则无效)
用java写一下:
TranslateAnimation translate = new TranslateAnimation(-50, 50,0, 0);
translate.setDuration(1000);
translate.setRepeatMode(Animation.REVERSE);
//将fillAfter、fillBefore放到set里
AnimationSet set = new AnimationSet(true);
set.addAnimation(translate);
set.setFillBefore(false);
set.setFillAfter(true);
image.startAnimation(set);
Rotate(旋转动画):
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
>
<rotate
android:duration="1000"
android:fromDegrees="0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="+360" />
</set>
fromDegrees:动画起始时的角度
toDegrees:动画结束时的角度 可以大于360度 (+代表顺时针,-代表逆时针)
简单的组合动画效果:
顺序播放:
loadAnimation = AnimationUtils.loadAnimation(this, R.anim.translate);
image.startAnimation(loadAnimation);
final Animation loadAnimation2 = AnimationUtils.loadAnimation(this,R.anim.rotate);
loadAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation arg0) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationRepeat(Animation arg0) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationEnd(Animation arg0) {
// TODO Auto-generated method stub
image.startAnimation(loadAnimation2);
}
});
同时播放:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<alpha
android:duration="3000"
android:fromAlpha="1.0"
android:startOffset="3000"
android:toAlpha="0.2" />
<translate
android:duration="1000"
android:fromXDelta="10"
android:fromYDelta="10"
android:toXDelta="100"
android:toYDelta="100"
/>
</set>