AnimationDrawable資源
AnimationDrawable,代表一個動畫。
android既支持傳統的逐幀動畫(類似于電影方式,一張圖片一張圖片的切換),也支持通過平移、變換計算出來的補間動畫、屬性動畫。
下面以補間動畫為例,介紹如何定義AnimationDrawable資源。
定義補間動畫的XML資源文件以<set.../>元素作為根元素,該元素內可定義如下4個元素:
1.alpha:設置透明度的改變;
2.scale:設置圖片進行縮放改變;
3.translate:設置圖片進行位移變換;
4.rotate:設置圖片進行旋轉;
定義動畫的XML資源文件存放于/res/anmi路徑下,當使用ADT(Android Development Tools)創建一個android應用時,默認不會包含該路徑,開發者需要自行創建該路徑。
定義補間動畫的思路:
設置一張圖片的開始狀態(包括透明度、位置、縮放比、旋轉度)
設置該圖片的結束狀態(包括透明度、位置、縮放比、旋轉度)
設置動畫的持續時間,android系統會使用動畫效果把這張圖片從開始狀態變換到結束狀態。
設置補間動畫的語法格式如下圖:
實例:實現圖片資源的縮放變換、位移變換
訪問方式:java-->R.anim.filename xml-->anim.filename
java中獲取Animation對象,可通過AnimationUtils的LoadAnimation(context ctx,int resId)方法獲取。
動畫資源文件==》myanim
需要手動創建res/anim文件夾
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"android:interpolator="@android:anim/linear_interpolator" ><!-- 定義縮放變換 --><scaleandroid:duration="2000"android:fillAfter="true"android:fromXScale="1.0"android:fromYScale="1.0"android:pivotX="50%"android:pivotY="50%"android:toXScale="1.4"android:toYScale="0.6" /><!-- 定義位移變換 --><translateandroid:duration="2000"android:fromXDelta="10"android:fromYDelta="30"android:toXDelta="130"android:toYDelta="-80" /><!-- 設置透明度的改變 --><alpha /><!-- 設置圖片進行旋轉 --><rotate /></set>布局文件==》
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity" ><Buttonandroid:id="@+id/btnStar"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center|center"android:gravity="center"android:text="啟動"tools:ignore="HardcodedText" /><!-- tools:ignore="HardcodedText" 表示忽略編碼方式警告 --><!-- tools:ignore="ContentDescription" 表示忽略編碼方式警告 --><ImageViewandroid:id="@+id/image"android:layout_width="match_parent"android:layout_height="wrap_content"android:src="@drawable/nicenice"tools:ignore="ContentDescription" /></LinearLayout>代碼實現==》
package com.example.myanimationdrawable;import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
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;public class MainActivity extends Activity
{@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);final ImageView img = (ImageView) this.findViewById(R.id.image);// 加載動畫資源final Animation anim = AnimationUtils.loadAnimation(this, R.anim.myanim);// 設置動畫結束后保留結束狀態,false表示動畫結束后恢復到最初狀態anim.setFillAfter(false);Button btnStart = (Button) this.findViewById(R.id.btnStar);btnStart.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){img.startAnimation(anim);// 開始動畫}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu){// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}
}
?