我正在开发一款游戏,我正在使用图形,我遇到了一些力量关闭。所以我的问题是:我们怎样才能让图片在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 :(得分: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