AnimationDrawable表明一個動畫,Android 既支持傳統的逐幀動畫(類 似於電影方式,一張圖片、一張圖片地切換),也支持經過平移、變換計算出來的補間動畫。
下面以補間動畫爲例來介紹如何定義 AnimationDrawable 資源,定義補間動畫的 XML 資 源文件以<set.../>元素做爲根元素,該元素內能夠指定以下 4 個元素:
- alpha:設置透明度的改變。
- scale:設置圖片進行縮放改變。
- translate:設置圖片進行位移變換。
- rotate:設置圖片進行旋轉。
定義動畫的 XML 資源應該放在/res/anmi 路徑下,當使用 ADT 建立一個 Android 應用時, 默認不會包含該路徑,開發者須要自行建立該路徑。
定義補間動畫的思路很簡單:設置一張圖片的開始狀態(包括透明度、位置、縮放比、 旋轉度)、並設置該圖片的結束狀態(包括透明度、位置、縮放比、旋轉度),再設置動畫的 持續時間,Android 系統會使用動畫效果把這張圖片從開始狀態變換到結束狀態。
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView
android:id="@+id/image"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:src="@drawable/java"
/>
<Button
android:id="@+id/bn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="開始動畫"
/>
</LinearLayout>
my_anim.xml
圖片將會變寬爲原來的1.4倍,同時高度變爲原來的0.6倍,向上向右移動。
<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator"
android:duration="5000">
<!-- 定義縮放變換 -->
<scale android:fromXScale="1.0"
android:toXScale="1.4"
android:fromYScale="1.0"
android:toYScale="0.6"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="true"
android:duration="2000"
/>
<!-- 定義位移變換 -->
<translate android:fromXDelta="10"
android:toXDelta="130"
android:fromYDelta="30"
android:toYDelta="-80"
android:duration="2000"
/>
</set>
AnimationDrawable.java
package org.crazyit.res;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;
/**
* Description:
* <br/>site: <a href="http://www.crazyit.org">crazyit.org</a>
* <br/>Copyright (C), 2001-2014, Yeeku.H.Lee
* <br/>This program is protected by copyright laws.
* <br/>Program Name:
* <br/>Date:
* @author Yeeku.H.Lee kongyeeku@163.com
* @version 1.0
*/
public class AnimationDrawable extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ImageView image = (ImageView)findViewById(R.id.image);
// 加載動畫資源
final Animation anim = AnimationUtils.loadAnimation(this,
R.anim.my_anim);
// 設置動畫結束後保留結束狀態
anim.setFillAfter(true);
Button bn = (Button) findViewById(R.id.bn);
bn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
// 開始動畫
image.startAnimation(anim);
}
});
}
}