android图片适配(图片大小与屏幕密度)Bitmap占用内存计算

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

目录

概述

dpi 计算公式

dp与px换算公式:

android系统适配图片规律:

同名图片放在不同密度的文件夹下,系统选择图片规律

同一张图片,放在不同密度的Drawable文件夹下,ImageView设置src,宽高为warp_content,ImageView被加载出来的实际尺寸的规律

实际加载的UI情况如下:

不同dpi的手机,同一张图片,放在不同密度的Drawable文件夹下,ImageView被加载后,ImageView尺寸和Bitmap尺寸。

ImageView尺寸计算规律:

Bitmap占用内存计算

Bitmap占用内存大小计算公式

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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值