目录
同一张图片,放在不同密度的Drawable文件夹下,ImageView设置src,宽高为warp_content,ImageView被加载出来的实际尺寸的规律
不同dpi的手机,同一张图片,放在不同密度的Drawable文件夹下,ImageView被加载后,ImageView尺寸和Bitmap尺寸。
概述
android项目中图片适配流程。
屏幕密度:单位英寸面积上的像素点数,与分辨率是两个不同的概念。
获取屏幕密度
方法一:adb 命令
adb shell wm density
方法二:api调用
resource.getDisplayMetrics().densityDpi
ldpi: 屏幕密度为120的手机设备
mdpi: 屏幕密度为160的手机设备(此为baseline,其他均以此为基准,在此设备上,1dp = 1px)
hdpi: 屏幕密度为240的手机设备 1.5
xhdpi: 屏幕密度为320的手机设备 2
xxhdpi:屏幕密度为480的手机设备 3
xxxhdpi:屏幕密度为640的手机设备 4
dpi 计算公式
dpi = (屏幕宽度像素的平方 + 屏幕高度像素的平方 )开根号 / 物理尺寸(英寸) = 斜对角的像素值 / 斜对角的物理尺寸(英寸)
dp与px换算公式:
1dp = dpi / 160 px
例:华为p30, dpi = 480, 1dp = 480 /160 px = 3px.
android系统适配图片规律:
同名图片放在不同密度的文件夹下,系统选择图片规律
android终端会根据自己的dpi值,会匹配与之最相近密度的资源目录,如果没有找到,则会向更高资源目录寻找,再向无关屏屏幕密度的文件夹nodpi寻找, 找不到再向低一级的屏幕密度的目录下寻找,如果还是找不到就要匹配drawable目录下了,此时drawable-v24 v21等目录的优先级高于drawable, 最后向 ldpi匹配。
dpi为480的手机,它对应的是xxhdpi目录。它的匹配规律如下:
drawable-xxhdpi > drawable-xxxhdpi > drawable-nodpi > drawable-xhdpi > drawable-hdpi > drawable-mdpi > drawable-v24 27 28... > drawable > drawable-ldpi
dpi为420的手机,没有直接匹配的资源目录,它会先匹配与之相近目录 xxhdpi, 与dpi为480的手机匹配规律是一样的,但是该手机计算ImageView和 Bitmap尺寸时,相同的图片计算的结果是不一样的。
同一张图片,放在不同密度的Drawable文件夹下,ImageView设置src,宽高为warp_content,ImageView被加载出来的实际尺寸的规律
备注:测试手机型号 华为p30 pro 1080*2340 ,屏幕宽度360dp , dpi 为480 ,1dp == 3px。图片尺寸为100px*100px,下面的记录的值均为宽度。
| ImageView宽度 | bitmap宽度 | bitmap ByteCount | 比例 | 压缩 | ||||||
| 图片所在目录 | px | dp | px | dp | byte | kb | 图片像素与imageView的像素尺寸比例 | 图片像素与imageView的dp尺寸比例 | 图片占用内存大小比例 | |
| drawable-xxxhdpi | 75 | 25 | 75 | 25 | 22500 | 21 | 3/4 | 1/4 | 3/4 | 是 |
| drawable-xxhdpi | 100 | 33 | 100 | 33 | 40000 | 39 | 1 | 1/3 | 1 | 否 |
| drawable-nodpi | 100 | 33 | 100 | 33 | 40000 | 39 | 1 | 1/3 | 1 | 否 |
| drawable-xhdpi | 150 | 50 | 100 | 33 | 40000 | 39 | 3/2 | 1/2 | 1 | 否 |
| drawable-hdpi | 200 | 67 | 100 | 33 | ||||||

本文深入探讨Android系统中图片的dpi计算、dp与px转换、资源目录匹配规则,以及ImageView和Bitmap的尺寸计算和内存占用。通过实例分析不同手机型号和dpi下,同一图片在不同目录下的显示效果和内存消耗,总结了Android项目中图片适配的流程和关键点。
最低0.47元/天 解锁文章
4万+

被折叠的 条评论
为什么被折叠?



