每个Android设备都有一个物理像素密度和一个“量化密度”。来源指出,量化密度是用于确定如何在运行时选择和缩放drawable-dpi图像的密度。
问题:这些图像如何(1)被选择和(2)被缩放?
例如,放置在drawable-xhdpi桶中的64x64图像会被缩放到什么大小?
问题:这些图像如何(1)被选择和(2)被缩放?
例如,放置在drawable-xhdpi桶中的64x64图像会被缩放到什么大小?
对于问题的扩展部分,首先通过运行以下命令获取设备的量化密度:
adb shell getprop ro.sf.lcd_density
将其称为设备的量子化密度。一般情况下,这种量子化密度与设备的物理密度不同,但如果物理密度完美地落在dpi“桶”边界之一上,则可以相同。而物理密度描述了现实世界的测量值,量子化密度由设备制造商设置,并且通常选择以下值之一:
量子化密度控制我所说的设备图像缩放因子(ISF)。公式如下:
ISF = ro.sf.lcd_density / 160
ISF是Android资源加载/布局管理器从文件中读取位图并将其呈现到屏幕上时使用的比例因子(我不知道缩放是在加载时还是在渲染时发生)。在Nexus 6设备上,ISF为3.5,因为量化密度设置为560(560/160 = 3.5)。当然,在运行时呈现的大小也取决于包含所讨论的文件的可绘制存储桶。例如,在Nexus 6上:
顺便提一下,量化密度还定义了您在布局文件中指定的dp的物理大小。此公式为:
+=======================+
| Dq |
| 1dp = ----- px |
| 160 |
+=======================+
其中 Dq 是量化密度。例如: