1

我正在开发一款游戏,我正在处理图形,我遇到了一些强制关闭。所以我的问题是:我们如何让图像在 android 中消耗更少的内存?

我将解释我的游戏,这是一个带有一些小图像和背景的逻辑游戏。我正在银河笔记中测试应用程序,1 GB 的 RAM,我认为它可以采用高分辨率,但如果我使用大图像作为背景,它会在进入暂停布局并返回后强制关闭。

所以我降低了图形并且没有强制关闭。无论如何有什么方法可以避免这个内存问题?我直接在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;
}
4

1 回答 1

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

于 2013-06-04T02:39:46.447 回答