安卓中的幀動畫是按順序預(yù)先設(shè)置好的一組連貫的圖片組合而成的動畫,類似于電影畫面。系統(tǒng)提供了AnimationDrawable來使用幀動畫。幀動畫的使用步驟比較簡單,通常有兩種方式,1是通過xml預(yù)先定義好,2是通過動態(tài)代碼加載相關(guān)的動畫資源。
第一種方式是通過xml定義幀動畫:
1:在res目錄下的Drawable資源文件下通過xml定義一個drawable文件.里面是一系列的圖片資源。類似于下面的frame_anim_3.xml:
<?xml version="1.0" encoding="utf-8"?>
<animation-list
xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false"
>
<item android:drawable="@mipmap/page_loading_01" android:duration="100"/>
<item android:drawable="@mipmap/page_loading_02" android:duration="100"/>
<item android:drawable="@mipmap/page_loading_03" android:duration="100"/>
<item android:drawable="@mipmap/page_loading_04" android:duration="100"/>
<item android:drawable="@mipmap/page_loading_05" android:duration="100"/>
<item android:drawable="@mipmap/page_loading_06" android:duration="100"/>
<item android:drawable="@mipmap/page_loading_07" android:duration="100"/>
<item android:drawable="@mipmap/page_loading_08" android:duration="100"/>
<item android:drawable="@mipmap/page_loading_09" android:duration="100"/>
<item android:drawable="@mipmap/page_loading_10" android:duration="100"/>
<item android:drawable="@mipmap/page_loading_11" android:duration="100"/>
<item android:drawable="@mipmap/page_loading_12" android:duration="100"/>
<item android:drawable="@mipmap/page_loading_13" android:duration="100"/>
<item android:drawable="@mipmap/page_loading_14" android:duration="100"/>
</animation-list>
<strong>注意:</strong>其中父標簽中的oneshot屬性表示的是重復(fù)播放還是只播放一次,當(dāng)其值為true時,動畫只播放一次;當(dāng)其值為false,動畫將無限循環(huán)播放;
子標簽中drawable=""表示圖片的資源,duration=""表示該幀畫面執(zhí)行的時長。
2:在代碼中設(shè)置相關(guān)資源文件,并啟動動畫。
animtion3= (ImageView) findViewById(R.id.animtion3);
animtion3.setBackgroundResource(R.drawable.frame_anim_3);//設(shè)置drawable資源
AnimationDrawable drawable3= (AnimationDrawable) animtion3.getBackground();
drawable3.start();//開始播放
第二種方式是動態(tài)代碼創(chuàng)建。如下:
animtion3= (ImageView) findViewById(R.id.animtion3);
drawable3=new AnimationDrawable();
drawable3.addFrame(getResources().getDrawable(R.mipmap.page_loading_01),100);
drawable3.addFrame(getResources().getDrawable(R.mipmap.page_loading_02),100);
drawable3.addFrame(getResources().getDrawable(R.mipmap.page_loading_03),100);
drawable3.addFrame(getResources().getDrawable(R.mipmap.page_loading_04),100);
drawable3.addFrame(getResources().getDrawable(R.mipmap.page_loading_05),100);
drawable3.addFrame(getResources().getDrawable(R.mipmap.page_loading_06),100);
drawable3.addFrame(getResources().getDrawable(R.mipmap.page_loading_07),100);
drawable3.addFrame(getResources().getDrawable(R.mipmap.page_loading_08),100);
drawable3.addFrame(getResources().getDrawable(R.mipmap.page_loading_09),100);
drawable3.addFrame(getResources().getDrawable(R.mipmap.page_loading_10),100);
drawable3.addFrame(getResources().getDrawable(R.mipmap.page_loading_11),100);
drawable3.addFrame(getResources().getDrawable(R.mipmap.page_loading_12),100);
drawable3.addFrame(getResources().getDrawable(R.mipmap.page_loading_13),100); drawable3.addFrame(getResources().getDrawable(R.mipmap.page_loading_14),100);
animtion3.setImageDrawable(drawable3);
drawable3.start();//開始播放
AnimationDrawable常用API:
void start() - 開始播放動畫
void stop() - 停止播放動畫
addFrame(Drawable frame, int duration) - 添加一幀,并設(shè)置該幀顯示的持續(xù)時間
void setOneShoe(boolean flag) - false為循環(huán)播放,true為僅播放一次
boolean isRunning() - 是否正在播放

frame.gif
下面是該例子的frame_anim_3.xml中的圖片;

page_loading_01.png

page_loading_02.png

page_loading_03.png

page_loading_04.png

page_loading_05.png

page_loading_06.png

page_loading_07.png

page_loading_08.png

page_loading_09.png

page_loading_10.png

page_loading_11.png

page_loading_12.png

page_loading_13.png

page_loading_14.png