直到现在,我还没有太在意如何存储可绘制资源。
我通常会生成一个图标的多个版本,并将它们存储在drawable-mdpi
,drawable-hdpi
,drawable-xhdpi
,...文件夹下。
对于我没有多个版本的其他图像,我始终将它们存储在drawable-nodpi
或drawable
下。
但是,我最近遇到了一个与之相关的问题,引起了我的全部注意。我在drawable
文件夹下存储了100KB的图像。但是,我的应用程序经常崩溃,并指出它无法分配18MB!
经过一些搜索,原因是图像被缩放到适合屏幕分辨率的水平,从而导致图像变重。解决方法是将其移动到drawable-nodpi
文件夹下,以防止缩放。
所以现在,我试图更好地了解应该在哪里放置图像,以及这种缩放效果如何在该部分上优化我的应用。
我已经进行了大量搜索,但是关于该主题的资源有限或不清楚,因此官方文档确实很糟糕。
我知道drawable
或drawable-nodpi
的官方解释,但并不能阐明所有内容。
通常:
res/drawable-mdpi/image.png
。如果我的屏幕不同于mdpi,这是否意味着会缩放图像,还是会在mdpi的屏幕上缩放图像,从而导致每个设备上的图像尺寸可能都会变大?mdpi
屏幕缩放,而是针对任何其他屏幕缩放,那么这是否意味着如果我针对每种屏幕密度都提供该图像的版本,那么缩放将永远不会发生吗?或相反,如果图像也在mdpi设备上缩放,那么对于每个屏幕密度具有相同版本的同一图像仍会缩放图像,但使用与设备屏幕密度匹配的图像版本吗? li>
mdpi
中,它只会对其进行缩放并使用比必要数量更多的内存。在这种情况下,我应该在nodpi
下放置没有其他版本的图标吗?mdpi
,hdpi
中时,...即使在密度匹配的设备上也可以缩放图像,那么我应该将所有内容移动到{{1 }}或诸如nodpi
之类的高分辨率图片,只能将其缩小比例?谢谢
答案 0 :(得分:2)
假设我有res / drawable-mdpi / image.png。如果我的屏幕与mdpi不同,是否表示图像已缩放
是的
还是会在mdpi屏幕上缩放它,导致每台设备上的图像尺寸可能更大?
否。
如果我为每种屏幕密度都提供此图像的版本,那么缩放将永远不会发生吗?
是的。由于可绘制的7个副本,您的APK会更大。
如何处理我没有多个版本的图标?
选项#1:确定特定版本所属的密度,然后放在那里。对于以其他密度运行的设备,Android会对该图像进行升采样或降采样。
选项#2:将其放置为in -anydpi
or -nodpi
,在这种情况下,Android不会对其进行升采样或降采样。但是,在这种情况下,您需要自己控制图像的大小(例如,在ImageView
中)。
选项3:将图标替换为具有所有相关密度的图标,或者是使用Android Studio中的“矢量资产向导”导入时作为可绘制矢量的SVG的图标。
决策既要基于内存消耗,又要基于结果。看起来很糟糕的低内存解决方案不太可能是一个不错的选择。
我应该将所有内容移动到nodpi下
可能不是。
或诸如xxxhdpi之类的高分辨率只能缩小比例?
可能不是。图标的大规模缩小版本不太可能看起来很好。