2013-06-04 44 views
0

我正在開發一款遊戲,並且正在處理圖形,我遇到了一些關閉的問題。所以我的問題是:我們如何讓圖像在android中消耗更少的內存?如何讓我的圖像消耗更少的內存? (已解決)

我會解釋我的遊戲,它是一個邏輯遊戲,有一些小圖像和背景。我正在用星系筆記,1 GB內存測試應用程序,我認爲它可能需要高分辨率,但如果我使用大圖像作爲背景,它會在進入暫停佈局並返回後關閉。

所以我降低了圖形,並完成了沒有強制關閉。無論如何有沒有辦法來避免這種記憶問題?我直接在xml上設置圖像是否是錯誤的?

我決定去用這種方法,這要歸功於Durairaj Packirisamy的答案

這裏是我的代碼:

 Bitmap unscaledimgswitch = BitmapFactory.decodeResource(getResources(), R.drawable.switch1on); 
    ImageView switch1 = (ImageView) findViewById(R.id.switch1); 


    int viewheight = screenheight/10; 
    int imgheight = unscaledimgswitch.getHeight(); 
    switch1.getLayoutParams().height = viewheight; 




    BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inJustDecodeBounds = true; 
    options.inSampleSize = ScaledFactor.getScaleFactor(imgheight ,viewheight); // de esta forma cargo la imagen del tamaño exacto necesario 
    options.inJustDecodeBounds = false; 
    imgswitch = BitmapFactory.decodeResource(getResources(), R.drawable.switch1on, options); 
    switch1.setImageBitmap(imgswitch); 

而在其他類

static int getScaleFactor(int imgheight, int viewheight) { 
    int result; 

result = imgheight/viewheight ; 



    return result; 
} 
+0

一樣高的分辨率是我想你應該只包括你需要的大小,每個LDPI,MDPI,華電國際和xhdpi,或圖像更高的密度。例如,你不需要1600×900的圖像1280x800銀河注(xhdpi) –

+0

我知道,但它不是我要求的。 :) – Rodrigofantino

+0

你問如何避免內存問題,沒有設置過大的位圖到不必要的密度是答案 –

回答

1

您需要要使用適當的BitmapFactory.options.inSampleSize值,如果設置爲大於1的值,請求解碼器對原始圖像進行二次採樣,返回較小的圖像以節省內存。

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inSampleSize = 4; 
Bitmap bitmap = BitmapFactory.decodeStream(stream, null, options); 

也可以看看這裏:

http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

+0

所以我應該找到佈局的視圖,並setBackgroundImage(位圖)(即時通訊不是那個代碼但多數民衆贊成在這個想法)?並設置BitmapFactory.decodeResource(getResources(),R.id.myimage,options)? 不是mdpi,drawable上的hdpi ldpi文件夾做的一樣嗎? – Rodrigofantino

+0

經過一番研究後,我表示感謝。一些編碼爲今天,但明天更少的問題。我非常感謝你的回答。我不得不改變我的代碼的一半,但它現在很好用。 – Rodrigofantino