量化密度如何影响图像资源选择和缩放?

时间:2015-05-04 23:14:54

标签: android

每个Android设备都有物理像素密度和量化密度' Sources表示量化密度是用于确定如何在运行时选择和缩放drawable-dpi图像的密度。

问题:如何选择这些图像(1)和(2)缩放?

例如,放入drawable-xhdpi存储桶的64x64图像会缩放到什么尺寸?

1 个答案:

答案 0 :(得分:10)

对于问题的缩放部分,首先通过运行

获取设备的量化密度
adb shell getprop ro.sf.lcd_density

并将其称为设备的量化密度。通常,这种量子化密度不同于器件的物理密度,但如果物理密度完全落入dpi“桶”边界之一,它可以是相同的。物理密度描述了实际测量,而量化密度由设备制造商设置,通常选择为以下值之一:

  • 160
  • 240
  • 320
  • 480

量化密度控制我称之为设备的图像缩放因子(ISF)。公式如下:

ISF = ro.sf.lcd_density / 160

ISF是当Android的资源加载/布局管理器从文件读取资源位图并将其呈现到屏幕时使用的比例因子(我不知道在加载时是否发生缩放或渲染-时间)。在Nexus 6设备上,ISF为3.5,因为量化密度设置为560(和560/160 = 3.5)。可以肯定的是,运行时渲染的大小也是包含相关文件的可绘制存储桶的函数。例如,在Nexus 6上:

  • mdpi文件夹中的64像素图像呈现为224像素(自3.5 * 64 / 1.0 = 224)
  • hdpi文件夹中的64像素图像呈现为149像素(自3.5 * 64 / 1.5 = 149)
  • xhdpi文件夹中的64像素图像呈现为112像素(自3.5 * 64 / 2.0 = 112)
  • xxhdpi文件夹中的64像素图像呈现为75像素(自3.5 * 64 / 3.0 = 75)
  • xxxhdpi文件夹中的64像素图像呈现为56像素(自3.5 * 64 / 4.0 = 56)

顺便提一下,量化密度还定义了您在布局文件中指定的dp的物理大小。其公式为:

+=======================+
|          Dq           |
|   1dp = ----- px      |
|          160          |
+=======================+

其中Dq是量化密度。例如,

  • 在Dq为160,1dp = 1px
  • 的设备上
  • 在Dq为240,1dp = 1.5px
  • 的设备上
  • 在Dq为320,1dp = 2px
  • 的设备上