2011-10-31 88 views
1

我在我的遊戲瀏覽器級別上有一個活動。在此活動中一次顯示25個水平Horizo​​ntalScrollViewer。級別由作爲自定義組件的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沒有關係,因爲我甚至無法獲得這麼好的效果。

+1

什麼是您的圖像的分辨率(px * px)?某些壓縮文件格式爲35KB的事實對Bitmap的實際內存要求幾乎沒有提及。 –

+0

它們是350x300。 – Moresby

+0

因此,您已經獲得了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 –

回答

0

這是一個類似的問題,我回答並展示瞭如何去動態加載正確的圖像大小。

內存不足異常+分析hprof文件轉儲