通用概念
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. 图片所占内存
网络图,内存占⽤用只与图⽚片的分辨率、透明度通道有关,与其他任何因素⽆无关。
本地图,内存占⽤用只与图⽚片的分辨率、存放⽬目录有关,与其他任何因素⽆无关。