xmlns:android=""
android:oneshot="false" >
android:drawable="@drawable/img0"
android:duration="17" />
android:drawable="@drawable/img1"
android:duration="17" />
android:drawable="@drawable/img2"
android:duration="17" />
animation-list>
animationdrawable animationdrawable;
if (imageview.getdrawable() == null)
animationdrawable.start();//開始
animationdrawable.stop();//結束
. 記憶體溢位咋辦
用普通方法實現幀動畫用到普通場景是沒問題的,如果碰到幾十甚至幾百幀,而且每張幾百k的情況,呵呵。例如,做乙個很炫的閃屏幀動畫,要保證高畫質且動作絲滑,就需要至少幾十張高畫質。這時,oom問題就出來了,閃屏進化成了一閃~
別慌,像我這樣的菜鳥遇到問題就會找度娘和gayhub,大神們肯定已經有解決方案了。隨手一搜就在stackoverflow上找到了解決辦法:
public
synchronized
void
start()
return;
}misrunning = true;
//新開執行緒去讀下一幀
mhandler.postdelayed(this, mdelaymillis);
if (imageview.isshown()) catch (exception e)
if (bitmap != null) else
} else }}
};mhandler.post(runnable);
}
. 進一步優化
為了快速讀取sd卡中的資源,這裡用到了apache的ioutils。在位圖處理上使用了bitmapfactory.options()相關設定,inbitmap,當大小型別相同時,虛擬機器就對位圖進行記憶體復用,不再分配新的記憶體,可以避免不必要的記憶體分配及gc。
if (build.version
.sdk_int >= 11)
將大神的**整理搬運後,整合成demo到自己github上,具體專案請移步
使用很簡單:
/**
* 將幀動畫資源id以字串陣列形式寫到values/arrays.xml中
*/animationscontainer.framessequenceanimation animation
= animationscontainer.getinstance(r.array.***, fps).createprogressdialoganim(imageview);
animation.start();//動畫開始
animation.stop();//動畫結束
注意資源id需要以string陣列形式放入xml中,然後再利用typedarray將字串轉為資源id。如果直接用@drawable/img1這樣的形式放入int陣列中,是沒法讀取到正真的資源id的。
從xml中讀取資源id陣列**:
/**
* 從xml中讀取幀陣列
*@param resid
*@return
*/private
int getdata(int resid)
array.recycle();
return intarray;
}
Android 幀動畫OOM問題優化
animationdrawable animationdrawable if imageview.getdrawable null animationdrawable.start 開始 animationdrawable.stop 結束 oom問題及優化 記憶體溢位咋辦 用普通方法實現幀動畫用到普通...
Android動畫 幀動畫
首先在res中新建乙個drawable資料夾,將需要展示的放在裡面,同樣的還有展示的fight.xml檔案,如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ...
Android動畫之幀動畫詳解
xml資源檔案方式 1.在res drawable目錄中放入需要的 3.在布局檔案中進行設定animationdrawable animationdrawable animationdrawable imageview.getbackground 開始動畫 animationdrawable.sta...