我需要将20+图像叠加在一起,以形成一个交互式地图,其中每个图层都可以打开和关闭。
为此,我决定使用LayerDrawable,但我一直在使用OutOfMemoryError。即使在我将Large Heap设置为true之后,它也可以加载大约8个图像,但如果超过8个图像,它仍然会抛出错误。
有没有一种方法可以将大量图像加载到LayerDrawable中而不出现这种错误,或者有没有更好的方法来做到这一点?
发布于 2013-06-26 01:12:45
多亏了Luksprog的链接,我才能解决这个问题。
在将图像添加到Drawable[]之前,我使用inSampleSize加载了每个图像的较小版本。这大大减少了内存使用量。
发布于 2013-06-25 00:09:15
像这样的东西?
Resources r = getResources();
Drawable[] layers = new Drawable[20];
layers[0] = r.getDrawable(R.drawable.01);
layers[1] = r.getDrawable(R.drawable.02);
etc[...]
LayerDrawable layerDrawable = new LayerDrawable(layers);
testimage.setImageDrawable(layerDrawable);发布于 2013-06-26 01:38:11
使用大堆标志只在honeycomb和更高版本上有效,并且它不能保证您将获得多少内存。你可以得到和以前一样的金额。
如果你想加载很多高质量的图像,你可以将它们缩小到屏幕的最大尺寸,或者使用非java的解决方案(例如openGL/andengine/lbgdx来显示内容)。
如果你选择java解决方案,你应该知道应用程序的最小设备堆是16MB。我希望从某种android API开始,它会更大一些,但这不是你可以假设的(尽管我还没有见过有这样限制的新设备)。
通常,您可以假设您的应用程序总是有足够的内存来容纳整个屏幕的位图。你甚至可以假设它总是比这个值多一倍,但仅此而已。
如果您选择本机其他解决方案,则仅限于设备RAM内存,但您需要自行释放内存。
请注意,无论您选择哪种解决方案,都会受到设备内存容量的限制。
https://stackoverflow.com/questions/17279912
复制相似问题