我想缩放图片以保持相同的比例。因此,例如,在重新缩放之后,箭头在所有图像中具有相同的尺寸。所以我跟着this example,它运行正常。
但是在失去对listview的操作后,我可能会出现OutOfMemoryError
错误。我在DDMS中查看堆转储,这是正确的,分配大小总是上升。我添加了一些bitmap.recycle()
,但会导致错误:"cannot draw recycled bitmaps"
。
我也试过the official tutorial,但我遇到了问题,下载的示例与解释的不一样,而且我并不了解所有内容。
拜托,你能解释一下如何解决我的错误吗? 感谢
答案 0 :(得分:0)
Bitmaps
始终存储在设备堆内存中,而您的设备堆内存无法承载Bitmaps
这个数量您尝试的方式与图像的相同分辨率相同,如此,首先尝试grow the heap使用您的应用清单,然后尝试这种方式来调整Bitmaps
:< / p>
public static Bitmap scaleBitmap(Bitmap bitmapToScale, float newWidth, float newHeight) {
if(bitmapToScale == null)
return null;
//get the original width and height
int width = bitmapToScale.getWidth();
int height = bitmapToScale.getHeight();
// create a matrix for the manipulation
Matrix matrix = new Matrix();
// resize the bit map
matrix.postScale(newWidth / width, newHeight / height);
// recreate the new Bitmap and set it back
return Bitmap.createBitmap(bitmapToScale, 0, 0, bitmapToScale.getWidth(), bitmapToScale.getHeight(), matrix, true);
}
如果这也不起作用,那么,您必须执行以下操作之一:
提示:回收Bitmap会将其从堆内存中完全删除,因此,出现"cannot draw recycled bitmaps"
错误是合乎逻辑的,因此,如果您想要recycle
它,然后在您的应用中使用它,您必须首先将其存储在ArrayList<Bitmaps>
。