我在HorizontalScrollView中有一个RelativeLayout,对象是捕获整个视图(比屏幕宽)。这就是我使用的:
thelayout = (RelativeLayout) findViewById(R.id.thelayout);
bitmap = Bitmap.createBitmap(thelayout.getWidth(), thelayout.getHeight(), Config.ARGB_8888);
Canvas c = new Canvas(bitmap);
thelayout.draw(c);
然后我显示位图,除非RelativeLayout有很多小部件,否则一切都很好,然后我在Bitmap.createBitmap上收到OutOfMemoryError。
在正常情况下,我们可以在使用之前调整位图大小或压缩位图,例如当图像来自文件系统或相机时,使用Bitmap.createScaledBitmap和BitmapFactory.Options。
然而,由于createBitmap的维度必须是HorizontalScrollView中的RelativeLayout以确保我捕获整个屏幕,我找不到任何东西来克服OutOfMemoryError。
有什么想法吗?
更新
我改为RGB_565,但问题仍然存在。记录猫报告
02-12 10:11:10.897: E/AndroidRuntime(22958): java.lang.OutOfMemoryError: bitmap size exceeds VM budget(Heap Size=17927KB, Allocated=13569KB, Bitmap Size=1046KB)
但是,如果我从堆大小中取出分配给我留下了4358.但是位图大小是1046,所以不应该有效,或者我没有正确地解释日志?
答案 0 :(得分:0)
请注意,我的建议在某种程度上只会掩盖问题,但您可以尝试将以下行添加到清单中的应用程序代码中:
android:largeHeap="true"
对于某些设备,这可能会为您提供更多的堆空间来分配Bitmap。