在我的应用程序中,我有3个包含多个高分辨率图像的屏幕。屏幕中使用的图像数量约为70-75。我编写了代码,使用扩展BaseAdapter的适配器类在网格布局中添加图像,在我编写代码的getView()方法中,
adapter = new ImageAdapter(this);
gridview.setAdapter(adapter);
int x = (int)(width/5.1f);
imageView.setId(position);
imageView.setLayoutParams(new GridView.LayoutParams(x,x));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(4, 20, 4, 20);
但在加载此屏幕时,它显示了很多内存问题,而在logcat中我收到了错误,
java.lang.OutOfMemoryError: bitmap size exceeds VM budget
请分享我如何编写代码来处理多个高分辨率图像的内存问题。感谢。
答案 0 :(得分:0)
如果无法调整图像分辨率,则应将其打开为BitmapFactory.Options().inJustDecodeBounds = true
,将选项传递给图像(所需的调整大小),然后使用BitmapFactory.Options().inJustDecodeBounds = false
再次解码。
通过将像素数乘以为像素分配的字节数来计算位图图像的实际字节大小。 ARGB_8888
(建议使用)为每个像素分配4个字节,因此,大小将为 width * height * 4 Bytes 。
有关详细信息,请参阅Android上的Loading Large Bitmaps Efficiently课程。此post也应该有所帮助。