1 屏幕尺寸、分辨率、dpi、px、dp、sp都是什么,它们换算关系是怎么样的?
1.1 屏幕尺寸
- 定义:手机对角线的物理尺寸
- 单位:英寸(inch),1英寸=2.54cm
Android手机常见的尺寸有5寸、5.5寸、6寸等
1.2 屏幕分辨率
- 定义:手机在横向、纵向上的像素点数总和
- 单位: px(pixel),1px=1像素点
比如:分辨率1080px * 1920px,即指宽有1080个像素点,高有1920个像素点
1.3 dpi
- 定义:每英寸的像素点数
- 单位:dpi(dots per ich)
假设设备内每英寸有160个像素,那么该设备的屏幕像素密度=160dpi
1.4 屏幕尺寸、分辨率、dpi换算关系
- 换算关系: dpi = 屏幕对角线上的像素个数 / 屏幕尺寸
举例分辨率:1080px * 1920px ,屏幕尺寸: 6寸
- 屏幕对角线上的像素个数^2 = 1080^2 + 1920^2 (勾股定理)
- 像素密度dpi = 屏幕对角线上的像素个数 / 6寸
- 最终得到像素密度为:360dpi
1.5 密度无关单位 dp、sp
- dp定义:dp是一个虚拟像素单位,1dp约等于中密度屏幕(160dpi;“基准”密度)上的1px
- sp定义:可缩放像素sp,sp用于定义文本大小。默认情况下,sp 单位与dp大小相同,但它会根据用户的首选文本大小来调整大小
1.6 dp、px、dpi换算关系
换算公式: px = dp * (dpi / 160)
dpi范围-密度表格如下:
密度限定符 | 说明 | 1dp对应px |
---|---|---|
ldpi | 适用于低密度 (ldpi) 屏幕 (~ 120dpi) 的资源 | 0.75 |
mdpi | 适用于中密度 (mdpi) 屏幕 (~ 160dpi)的资源(这是基准密度) | 1 |
hdpi | 适用于高密度 (hdpi) 屏幕 (~ 240dpi) 的资源 | 1.5 |
xhdpi | 适用于加高 (xhdpi) 密度屏幕 (~ 320dpi) 的资源 | 2 |
xxhdpi | 适用于超超高密度 (xxhdpi) 屏幕 (~ 480dpi) 的资源 | 3 |
xxxhdpi | 适用于超超超高密度 (xxxhdpi) 屏幕 (~ 640dpi) 的资源 | 4 |
nodpi | 适用于所有密度的资源。这些是与密度无关的资源。无论当前屏幕的密度是多少,系统都不会缩放以此限定符标记的资源 |
2 Bitmap内存占用
2.1 内存计算公式
内存占用大小 (约等于)≈ bitmap.width × bitmap.height × 单个像素的字节大小
2.1.1 单个像素的字节大小
单个像素的字节大小由Bitmap的一个可配置的参数Config来决定。
Bitmap中,存在一个枚举类Config,定义了Android中支持的Bitmap配置:
Config | 占用字节大小(byte) | 说明 |
---|---|---|
ALPHA_8 | 1 | 单透明通道 |
RGB_565 | 2 | 简易RGB色调 |
ARGB_4444 | 2 | 弃用 |
ARGB_8888 | 4 | 24位真彩色 |
Android系统中,默认Bitmap加载图片,使用24位真彩色模式
/*
* Image are loaded with the {@l