Android畫圖學習總結(四)——Animation(下)

Android畫圖學習總結(四)——Animation(上)中,我們詳細介紹了Tween  Aniamation,這裏我們將介紹另外一種動畫Frame Animation。在前面已經說過,Frame Animation是順序播放事先做好的圖像,跟電影類似。不同於animation package, Android SDK提供了另外一個類AnimationDrawable來定義、使用Frame Animation。

Frame Animation可以在XML Resource定義(還是存放到res\anim文件夾下),也可以使用AnimationDrawable中的API定義。由於Tween Animation與Frame Animation有着很大的不同,因此XML定義的格式也完全不一樣,其格式是:首先是animation-list根節點,animation-list根節點中包含多個item子節點,每個item節點定義一幀動畫:當前幀的drawable資源和當前幀持續的時間。下面對節點的元素加以說明:

XML屬性 說明
drawable 當前幀引用的drawable資源
duration 當前幀顯示的時間(毫秒爲單位)
oneshot 如果爲true,表示動畫只播放一次停止在最後一幀上,如果設置爲false表示動畫循環播放。
variablePadding If true, allows the drawable’s padding to change based on the current state that is selected.
visible 規定drawable的初始可見性,默認爲flase;

下面就給個具體的XML例子,來定義一幀一幀的動畫:
<animation-list xmlns:android=”http://schemas.android.com/apk/res/android”
android:oneshot=”true”>
<item android:drawable=”@drawable/rocket_thrust1″ android:duration=”200″ />
<item android:drawable=”@drawable/rocket_thrust2″ android:duration=”200″ />
<item android:drawable=”@drawable/rocket_thrust3″ android:duration=”200″ />
</animation-list>

上面的XML就定義了一個Frame Animation,其包含3幀動畫,3幀動畫中分別應用了drawable中的3張圖片:rocket_thrust1,rocket_thrust2,rocket_thrust3,每幀動畫持續200毫秒。

然後我們將以上XML保存在res/anim/文件夾下,命名爲rocket_thrust.xml,顯示動畫的代碼,如下:在OnCreate()中增加如下代碼:
ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.anim.rocket_thrust); rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
最後還需要增加啓動動畫的代碼:
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
rocketAnimation.start();
return true;
}
return super.onTouchEvent(event);
}

代碼運行的結果想必大家應該就知道了(3張圖片按照順序的播放一次),不過有一點需要強調的是:啓動Frame Animation動畫的代碼rocketAnimation.start();不能在OnCreate()中,因爲在OnCreate()中AnimationDrawable還沒有完全的與ImageView綁定,在OnCreate()中啓動動畫,就只能看到第一張圖片。

下面,閱讀Android SDK中對AnimationDrawable的介紹,有個簡單的瞭解:

AnimationDrawable

獲取、設置動畫的屬性
int getDuration() 獲取動畫的時長
int getNumberOfFrames() 獲取動畫的幀數
boolean isOneShot()

Void setOneShot(boolean oneshot)

獲取oneshot屬性
設置oneshot屬性
void inflate(Resurce r,XmlPullParser p,
AttributeSet attrs)
增加、獲取幀動畫
Drawable getFrame(int index) 獲取某幀的Drawable資源
void addFrame(Drawable frame,int duration) 爲當前動畫增加幀(資源,持續時長)
動畫控制
void start() 開始動畫
void run() 外界不能直接掉調用,使用start()替代
boolean  isRunning() 當前動畫是否在運行
void stop() 停止當前動畫
總結說明

Frame Animation的定義、使用比較簡單,在這裏已經詳細介紹完了,更加深入的學習還是到Android SDK去仔細瞭解吧,在Android SDK中也包含很多這方面的例子程序。

轉自http://www.moandroid.com/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章