我正在使用一个菜单,用户可以在其中选择要显示的类别。类别开始后,我会在后台加载图层并将其用作GestureImageView
的资源。这很好用,但是当我这样做了几次。在类别选择和地图之间来回,它会抛出OutOfMemory Exception
。
这是用于创建GestureImageView
的方法。 bgverkenning drawable在每个可绘制的地图中,尺寸根据4:6:8:12(mdpi - hdpi - xhdpi - xxhdpi)。
private void loadImageFromStorage(String path, String name)
{
try {
File f=new File(path, name);
BitmapFactory.Options options=new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.RGB_565;
options.inSampleSize=2;
// options.inJustDecodeBounds = true;
Bitmap b = BitmapFactory.decodeStream(new FileInputStream(f),null,options);
BitmapFactory.Options options2=new BitmapFactory.Options();
options2.inPreferredConfig = Bitmap.Config.RGB_565;
Drawable laag = new BitmapDrawable(b);
Bitmap back = BitmapFactory.decodeResource(getResources(), R.drawable.bgverkenning, options2);
Drawable bg = new BitmapDrawable(back);
Drawable [] lagen = {bg,laag};
LayerDrawable ld = new LayerDrawable(lagen);
map.setImageDrawable(ld);
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
}
当活动停止时,将删除drawable。
@Override
protected void onStop() {
super.onStop();
Drawable d = map.getDrawable();
if(d!=null) d.setCallback(null);
map.setImageDrawable(null);
}
答案 0 :(得分:2)
如前所述,您应该使用库。我建议Glide易于使用。 Glide LayerDrawable with Glide
答案 1 :(得分:1)
位图对于Android来说真的很重要。考虑使用此库来设置图片: https://square.github.io/picasso/
答案 2 :(得分:0)
在Java文件中使用它
roundBitmap.recycle();