2012-07-05 47 views
1

我正在繪製一幀逐幀動畫到一個畫布,我有大約100張圖片,我正在使用這樣做(總共大約1.5MB)。我開始通過只是在做這樣的:Android:如何使用大量的位圖?

s000 = BitmapFactory.decodeResource(getResources(), R.drawable.s0); 
s001 = BitmapFactory.decodeResource(getResources(), R.drawable.s1); ...etc... 

每一個圖像,然後將每個圖像繪製在畫布上:

c.drawBitmap(s000, X, Y, null); 

做出的動畫。

的問題是,我得到這個錯誤「的OutOfMemoryError:位圖大小超過VM預算」。我怎麼會加載所有的圖片沒有得到這個錯誤?是1.5MB的內存太多,或者我有內存泄漏?我會怎樣解決內存泄漏問題?

非常感謝您的幫助。我是小白與Android,所以你可以請留下的例子,而不是隻告訴我做一些事情,我不會知道:)再次感謝

回答

1

嘗試像這樣每次畫框架:

s000 = BitmapFactory.decodeResource(getResources(), R.drawable.s0); 
c.drawBitmap(s000, X, Y, null); 
s000.recycle(); 
s000 = null; 

這將嘗試繪製幀後釋放內存。

編輯

myImgLen = 30; 
Bitmap bitmap = null; 
for (int i = 0; i < myImgLen; i++) { 
    bitmap = BitmapFactory.decodeResource(getResources(), getResource‌​s().getIdentifier("s" + i, "drawable", getPackageName())); 
    c.drawBitmap(bitmap, X, Y, null); 
    bitmap.recycle(); 
    bitmap = null; 
} 
+0

感謝您的幫助,但現在我有一個新問題。我的動畫循環和我反覆使用相同的Bitmaps,所以如果我回收它,那麼它會給我一個錯誤。在我的應用程序開始時,我解碼所有像這樣的位圖:int myImgLen = 30; 對(INT I = 0; I alexward1230 2012-07-05 10:50:09

+0

查看編輯答案 – Caner 2012-07-05 10:59:23

+0

我無法相信像回收位圖這樣簡單的事情給我帶來了很多麻煩。非常感謝您的幫助,它現在正在工作!是啊!在一個側面說明它正在工作,但由於它必須重新加載位圖在每一幀它繪製它的一點波濤洶涌/緩慢。你有任何提示/指示我怎樣才能使它更加順利明智:) – alexward1230 2012-07-05 20:41:23

0

Store中的形象進入水庫>繪製-xhdpi使文件夾內的res文件夾。
欲瞭解更多信息,請參閱此鏈接http://developer.android.com/guide/practices/screens_support.html

+0

它們被存儲在那裏(或在華電國際),而是把它們畫到畫布上我必須這樣做;位圖位圖= BitmapFactory.decodeResource(getResources(),R.drawable.s0);對他們每個人,那是什麼導致我認爲的問題。 – alexward1230 2012-07-05 10:05:51

+0

你必須在res文件夾內製作「drawable-xhdpi」文件夾。一般hdpi(高)和xhdpi(超高)。你的形象是1.5 MB這就是你必須做出繪製-xhdpi文件夾內的res文件夾 – 2012-07-05 10:21:13

+0

的方式,但我的圖像(S)的共1.5MB的一起(也有很多他們)每個圖像是480×800,屬於中hdpi文件夾。我認爲... – alexward1230 2012-07-05 10:26:32

相關問題