3.0以前,android支持兩種動畫模式,補間動畫(tween animation),幀動畫(frame animation),在android3.0中又引入了一個新的動畫系統:屬性動畫(property animation)。今天先主要說一下補間動畫
補間動畫我們直接成爲View動畫,他包含四種變換
平移動畫 TranslationAnimation
縮放動畫 ScaleAnimation
旋轉動畫 RotateAnimation
透明度動畫 AlphaAnimation
這四種動畫創建方式有倆種,一種是通過代碼動態創建,另一種是採用XML來定義動畫,對於View動畫來說,一般建議採用XML來實現,這是應爲XML格式的動畫擁有更好的可讀性。
創建View動畫,首先創建XML文件,在res/anim/下創建XML文件,一個有五種標籤可選,四中動畫變化以及一種集合變換,View動畫既可以單獨採用一種動畫,也可以採用set標籤創建一系列動畫。
在創建動畫是,有一個屬性是android:interpolator,表示動畫的插值器,用於管理動畫的速度,如,加速、減速等,系統默認的是加速減速加值器accelerate_decelerate_interpolator;除此以外,還有一個屬性是android:shareInterpolator,他表示動畫是否與幾何使用同一個插值器。
tranlationanimation,屏移動畫。新建translate標籤,完成以下幾個重要屬性
android:fromXDelta="0"---表示X的起始值
android:fromYDelta="0"---表示Y的起始值
android:toXDelta="500"---表示X的結束值
android:duration="2000"----表示時長
android:toYDelta="500"----表示Y的結束值
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="500"
android:duration="2000"
android:toYDelta="500">
</translate>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fillAfter="true"動畫是都停留在結束<span style="font-family:微軟雅黑;">位置</span>
android:duration="2000"
android:shareInterpolator="true">
<span style="font-family:微軟雅黑;"><!--起始透明度,終止透明度--></span>
<alpha
android:fromAlpha="1"
android:toAlpha="0.1">
</alpha>
<pre name="code" class="java"><span style="font-family:微軟雅黑;"><!--起始角度,終止角度,軸心是view中心--></span>
<rotate android:fromDegrees="0" android:toDegrees="359" android:pivotX="0" android:pivotY="0"></rotate><scale android:fromXScale="0.1" android:toXScale="1.5" android:fromYScale="0.1" android:toYScale="1.5">
</scale> <translate android:fromXDelta="0" android:fromYDelta="0" android:toXDelta="500" android:toYDelta="500"></translate></set>
在應用中,通過AnimationUtils找到相應的動畫,在用添加動畫的控件啓動該動畫
animation_alpha = AnimationUtils.loadAnimation(this, R.anim.animation_alpha);
<span style="font-family:微軟雅黑;"> </span> animation_rotate = AnimationUtils.loadAnimation(this, R.anim.animation_rotate);
<span style="font-family:微軟雅黑;"> </span> animation_scale = AnimationUtils.loadAnimation(this, R.anim.animation_scale);
<span style="font-family:微軟雅黑;"> </span>animation_set = AnimationUtils.loadAnimation(this, R.anim.animation_set);
<span style="font-family:微軟雅黑;"> </span>animation_trans = AnimationUtils.loadAnimation(this, R.anim.animation_trans);
@Override
public void onClick(View v) {
if (v.getId()==R.id.btn_alpha){
iv.startAnimation(animation_alpha);
}else if (v.getId()==R.id.btn_translate){
iv.startAnimation(animation_trans);
}else if (v.getId()==R.id.btn_rotate){
iv.startAnimation(animation_rotate);
}else if (v.getId()==R.id.btn_set){
iv.startAnimation(animation_set);
}else if (v.getId()==R.id.btn_scale){
iv.startAnimation(animation_scale);
}
}
通過XML文件來實現動畫已經完成了,接下來使用代碼來完成
AlphaAnimation alphaAnimation = new AlphaAnimation(0, 1);
alphaAnimation.setDuration(1000);
iv.startAnimation(alphaAnimation);
TranslateAnimation translateAnimation = new TranslateAnimation(0, 0, 0, 500);
translateAnimation.setDuration(1000);
iv.startAnimation(translateAnimation);
其他動畫同理。
效果圖如下: