AnimationDrawable 資源

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);
            }
        });
    }
}
相關文章
相關標籤/搜索