1
我在我的遊戲瀏覽器級別上有一個活動。在此活動中一次顯示25個水平HorizontalScrollViewer。級別由作爲自定義組件的LevelBrowserButtons表示。每個LevelBrowserButton圖像的水平和這些圖像都不是很大,每個都不超過35K。Android圖像內存問題
因此,使用25個按鈕時,它不應該使用超過1MB的圖像,但即使VM堆大小爲24我也會得到「java.lang.OutOfMemoryError:位圖大小超過VM預算」。
我的代碼如下:
public class LevelBrowserButton extends LinearLayout
{
int LayoutNumber = 1;
public LevelBrowserButton(Context context, String layoutName, int layoutNumber)
{
super(context);
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.levelbrowser_button, this);
LayoutNumber = layoutNumber;
// Set Layout Name
TextView nameTextView = (TextView) findViewById(R.id.NameTextView);
nameTextView.setText(layoutNumber + ": " + layoutName);
// Set Layout Image
int imageResource = this.getResources().getIdentifier("levelbrowser_" + layoutNumber, "drawable", "mobile.firegame");
ImageView backgroundImageView = (ImageView)findViewById(R.id.BoardImageView);
backgroundImageView.setImageResource(imageResource);
// Set Status Image
ImageView statusImageView = (ImageView)findViewById(R.id.StatusImageView);
if (Settings.getLevelStats(layoutName).Completed)
statusImageView.setImageResource(R.drawable.levelbrowser_completed);
else
statusImageView.setImageResource(R.drawable.levelbrowser_uncompleted);
}
}
我看了相當多的具有相同類型問題的人的線程,但無法弄清楚。這與正確處理Bitmaps沒有關係,因爲我甚至無法獲得這麼好的效果。
什麼是您的圖像的分辨率(px * px)?某些壓縮文件格式爲35KB的事實對Bitmap的實際內存要求幾乎沒有提及。 –
它們是350x300。 – Moresby
因此,您已經獲得了350 * 300 * 3 * 8 * 25(w * h * rbg * byte *圖像)字節的Bitmaps,即60 MB ---根據屏幕大小,您可能無法顯示超過2 -3他們在任何時候,你可能要考慮http://stackoverflow.com/questions/541966/android-how-do-i-do-a-lazy-load-of-images-in-listview –