2011-05-12 97 views
1

我正在使用ViewFlipper顯示來自數據庫的一些圖像。 我將blob值帶到ArrayList,然後將每個字節數組轉換爲位圖。ViewFlipper:位圖大小超過虛擬機預算

然後我將這些每個位圖設置爲ViewFlipper的每個Imageview。 如果圖像的數量低於10,那麼它工作正常。但是,如果它超過10,那麼它會突然發生異常: OutOfMemoryException:位圖大小超過虛擬機預算。

當我使用inSampleSize的BitmapFactory.Options,它工作正常。但我想顯示的圖像與實際的高度和寬度。我怎樣才能無一例外地做到這一點?

我的代碼是:

ViewFlipper vfImage = (ViewFlipper)findViewById(R.id.vfImage); 
for(Photos objPhotos :arPhotos) 
{ 
    byte[] btImages = null; 
    Bitmap bitmapImage = null; 
    btImages = objPhotos.getImage(); 
    ImageView imgPhoto= new ImageView(this); 
    bitmapImage = BitmapFactory.decodeByteArray(btImages, 0, btImages.length); 
    imgPhoto.setImageBitmap(bitmapImage); 
    vfImage.addView(imgPhoto); 
} 
vfImage.startFlipping(); 

請幫助我.. 謝謝...

回答

0

你應該考慮卸載當前未顯示位圖,只有那些在內存中保留現在在屏幕上。祝你好運!

+0

我們應該如何卸載圖像?在調用startFlipping()方法之前,我們將所有圖像添加到ViewFlipper中。我認爲使用ViewFlipper不可能再次刪除和添加圖像。 – Jomia 2011-05-12 11:11:43

+0

你可以在你的ViewFlipper中發佈佈局代碼嗎? – Egor 2011-05-12 11:13:56

+0

我已發佈代碼 – Jomia 2011-05-12 11:48:43

0

一旦你使用位圖完成後,試圖使它空這樣,

Bitmap bitmapImage = null; 

嘗試添加上述行的for循環的最後一行。這意味着每次將位圖設爲空時,這會減少位圖捕獲的內存。還試着提供

bitmapImage.recycle(); 

這將回收位圖併爲您提供可用內存。

Also you can refer to my question here

+0

我嘗試使用recycle()函數並將位圖對象設置爲null。但尚未解決問題 – Jomia 2011-06-07 09:52:25

相關問題