通用概念

px:像素点,整数

in:英寸,平时说的5英寸通常指指屏幕的对角线尺寸,1英寸 = 2.54厘米

dpi:每英寸包含的像素个数,例如分辨率320*480,宽2英寸,长3英寸,那么该屏幕的横向纵向dpi均等于160(320/2 == 480/3 == 160),大部分屏幕使用正方向像素点因此,横向纵向的dpi一般相同。

density:屏幕密度,density = dpi/160

dp:即dip,设备独立像素。Android特有单位,1dp = density*1px(在dpi为320的屏幕下,1dp = 2px)

sp:与dp类似,专门用来设置字体大小,和dp的区别是它可以根据用户的字体大小偏好来缩放。

Android文件夹

一个Android项目有很多drawable文件夹,分别对应不同的dpi

  • drawable-ldpi (dpi=120, density=0.75)
  • drawable-mdpi (dpi=160, density=1)
  • drawable-hdpi (dpi=240, density=1.5)
  • drawable-xhdpi (dpi=320, density=2)
  • drawable-xxhdpi (dpi=480, density=3)

通常来讲,Android sdk会优先使用屏幕尺寸对应的资源文件进行渲染,但如果全局只有一套图的话也是可以运行的。而在每一个对应的文件夹下都放一套图片资源的话会占很大内存,所以我们选择提供一套支持最大的dpi的图片。

转换

ldpi

mdpi

hdpi

xhdpi

xxhdpi

xxxhdpi

px比

3

4

6

8

12

16

density

0.75

1

1.5

2

3

4

如果dp是固定的,代表显示出来的效果是一样的,相对的在不同分辨率的屏幕上所占的内存大小就是不一样的了(例如120x120(px)分辨率的图片存放在xhdpi文件夹中,在xhdpi的设备上实际显示的大小为120x120,在hdpi的设备上实际显示的大小为90x90,在mdpi的设备上实际显示的大小为60x60,在xxhdpi的设备上实际显示的大小为180x180)

如果使用的是wrap_content,那么为了图片显示完全则会图片进行缩放。资源放到低dpi显示在高dpi,图片会被放大以填充多出来的px,清晰度降低;资源放到高dpi显示在低dpi,减少了多余的px点,图片会被缩小,,因此只准备一套高dpi的图考虑清晰度是稳妥的选择。

p.s.红字为自己的见解,未经证实

4. 图片所占内存

网络图,内存占⽤用只与图⽚片的分辨率、透明度通道有关,与其他任何因素⽆无关。

本地图,内存占⽤用只与图⽚片的分辨率、存放⽬目录有关,与其他任何因素⽆无关。