许多针对Android开发的博客和最佳做法都说
“您不需要为每个可能的密度提供位图,Android会缩放您的位图(通常在加载时)以匹配当前密度。”
参考链接:https://plus.google.com/105051985738280261832/posts/6eWwQvFGLV8
我试过它效果很好。 但我无法理解一件事。
例如,我在视图寻呼机中创建了一个示例应用程序,其中包含5个大约1.5 MB的全屏图像。
我为像Galaxy Tab 2这样的7英寸MDPI设备创建了大量图像,并将它们放入“drawable-large-mdpi”文件夹中。它有点生涩,但没有崩溃,让我滚动浏览所有图像。
现在我尝试在我的Nexus 7上使用该应用程序,这几乎是一个大型HDPI设备。在解码位图时,应用程序因“OOM错误”而崩溃。
* 如果我将图像从大型MDPI移动到大型HDPI,它可以在没有任何崩溃的设备上正常工作。 *
所以我有两个问题。
答案 0 :(得分:3)
只要缩放时drawables看起来很好,那将是一种方法。缩小尺寸通常比缩放更好。也就是说,有这条线:
即便如此,当位图缩放到密度时,也没有设计 因为,你可能会得到诸如软化边缘之类的文物。
从HDPI
缩放到TVDPI
的原因很好,因为两个密度非常接近。某些图像的问题将开始出现在主要密度之间。例如,从HDPI
跳转到LDPI
肯定会导致很多伪影,因为图像根本就不是为低分辨率而设计的。
最有可能在Nexus 7中使用OOM崩溃,因为它会拍摄设备认为是MDPI
图像并将其缩放到TVDPI
设置的大图像。这将导致更大的图像。
当您将它们放入HDPI文件夹时,您告诉它缩小到TVDPI
,因此生成的图像占用的内存更少。
在实际缩放中也会产生开销。
当您扩展到XHDPI设备时,可能会发生同样的事情。
答案 1 :(得分:0)
当您将图像放入hdpi时,系统按比例缩小图像,这就是为什么可能(不保证)足够的内存用于较小的图像。
解决方案:不要将那些大图像用作背景。尝试可扩展的图像,并查看9补丁格式:link