我需要在彼此的顶部加载20多个图像,以形成一个交互式地图,每个图层都可以打开和关闭。
我决定使用LayerDrawable
,但我一直得到一个OutOfMemoryError。即使在我将Large Heap设置为true之后,它也能够加载大约8个图像,但除此之外它还会抛出错误。
有没有办法将大量图片加载到LayerDrawable
而不会出现错误,或者有更好的方法吗?
答案 0 :(得分:1)
感谢Luksprog的链接,我能够解决问题。
我使用inSampleSize
加载每个图片的较小版本,然后再将其添加到Drawable[]
。这减少了很多人使用的内存量。
答案 1 :(得分:0)
那样的东西?
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);
答案 2 :(得分:0)
使用大堆标志仅适用于蜂窝及以上,并且它不会向您承诺任何有关您将获得多少内存的信息。你可以获得与以前相同的金额。
如果您希望加载大量高质量图像,可以将它们缩小到最大值,也可以使用非java解决方案(例如openGL / andengine / lbgdx来显示内容)。
如果你选择一个java解决方案,你应该知道应用程序的最小设备堆是16MB。我希望它从某种Android API开始更大,但这不是你可以假设的东西(虽然我从来没有见过有这种限制的新设备)。
通常,您可以假设您的应用程序始终有足够的内存来容纳具有整个屏幕的位图。你甚至可能认为它总是比这更重要,但就是这样。
如果您选择本机其他解决方案,则仅限于设备RAM内存,但您可以自行释放内存。
请注意,无论您选择何种解决方案,您仍然只能使用该设备的内存容量。