Android动画
动画分为两类:
补间动画(Tween)和帧动画(Frame),补间动画是又一帧经过透明度、旋转、位移等变化而来。而帧动画则是由一帧帧连接起来的。
补间动画主要有一下几种类:
AlphaAnimation 、RotateAnimation 、ScaleAnimation 、TranslateAnimation
AnimationSet 是前面几种补间动画的组合
补间动画的应用:
1定义:两种方式,一种是在XML文件里面定义,另一种是直接用代码创建
① 用XML文件定义
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fillAfter="true"
android:fillEnabled="true"
android:fromXDelta="0"
android:fromYDelta="0"
android:interpolator="@android:anim/linear_interpolator"
android:repeatCount="2"
android:repeatMode="reverse"
android:toXDelta="100"
android:toYDelta="200" />
引用定义好的补间动画:
TranslateAnimation ta = (TranslateAnimation) (AnimationUtils
.loadAnimation(Activity1.this,
R.anim.anim1_1));
//iv是一个ImageView对象
iv.setAnimation(ta);
ta.start();
② 直接用代码创建:
// 起始x坐标,结束x坐标,起始y坐标,结束y坐标
TranslateAnimation ta = new TranslateAnimation(0f,
-100f, 0f, 200f);
ta.setDuration(2000);// 设置动画持续时间
ta.setRepeatMode(Animation.REVERSE);// 设置动画的重播模式
ta.setRepeatCount(2);// 设置动画的重播次数
ta.setFillEnabled(true);// 设置动画的填充模式,动画播放结束后停留的位置
ta.setFillAfter(true);// 设置动画播放结束后停留在结束位置
ta.setInterpolator(Activity_main.allInterpolator[0]);// 设置动画的播放速度
iv.setAnimation(ta);
ta.start();
动画播放速度效果主要有一下类型:
Interpolator[] allInterpolator = new Interpolator[] {
new AccelerateInterpolator(), // 0越来越快
new DecelerateInterpolator(),// 1越来越慢
new AccelerateDecelerateInterpolator(),// 2先快后慢
new AnticipateInterpolator(),// 3先后退一小步然后向前加速
new OvershootInterpolator(),// 4快速到达终点超出一小步然后回到终点
new BounceInterpolator(),// 5到达终点产生弹球效果,弹几下再回来
new LinearInterpolator() // 6均匀速度
};
其它几种类型的补间动画和上述一种差不多,介绍一下AnimationSet这类混合的补间动画
①XML文件定义:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:shareInterpolator="true" >
<scale
android:duration="2000"
android:fromXScale="0"
android:fromYScale="0"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="1.0"
android:toYScale="1.0" />
<alpha
android:duration="2000"
android:fromAlpha="0"
android:toAlpha="1.0" />
<rotate
android:duration="2000"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360" />
</set>
② 代码生成:
RotateAnimation ta = new RotateAnimation(0f, 2160f,
50f, 50f);
ta.setDuration(2000);
ScaleAnimation sa = new ScaleAnimation(0f, 4f, 0f,
4f, 50f, 50f);
sa.setDuration(2000);
AlphaAnimation aa = new AlphaAnimation(0f, 1f);
aa.setDuration(2000);
// AnimationSet 里面的 动画是否统一使用
// AnimationSet的Interpolator
AnimationSet as = new AnimationSet(true);
as.setInterpolator(Activity_main.allInterpolator[5]);
as.setFillEnabled(true);
as.setFillAfter(true);
as.setDuration(2000);
as.addAnimation(ta);
as.addAnimation(sa);
as.addAnimation(aa);
iv.setAnimation(as);
as.start();
帧动画:
XML定义
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true" >
<item
android:drawable="@drawable/a1"
android:duration="80"/>
<item
android:drawable="@drawable/a3"
android:duration="80"/>
<item
android:drawable="@drawable/a4"
android:duration="80"/>
<item
android:drawable="@drawable/a5"
android:duration="80"/>
</animation-list>
帧动画的播放:
AnimationDrawable ad;
// 从xml获得一个帧动画
ad = (AnimationDrawable) getResources().getDrawable(
R.drawable.drawable_anim);
// 设置是否不重复播放
ad.setOneShot(true);
// 设置控件的背景drawable
iv.setBackgroundDrawable(ad);
// 启动动画
ad.start();
设置Activity启动时候的动画
startActivity(new Intent(Activity_main.this, Activity1.class));
//这一句话一定要紧随其后
overridePendingTransition(R.anim.anim1_0, R.anim.anim1_0);