https://blog.csdn.net/guolin_blog/article/details/50727753
https://blog.csdn.net/zhaokaiqiang1992/article/details/49787117
基本概念:
1. px: 分辨率单位像素
平常所说的1920×1080只是像素数量,也就是1920px × 1080px,代表手机高度上有1920个像素点,宽度上有1080个像素点。
2. dpi: 像素密度单位,表示1英寸上有多少个像素 px/inc
160dpi表示1英寸上有160个像素 160dpi = 160px/inc
240dpi表示1英寸上有240个像素 240dpi = 240px/inc
设备dpi越高,即1英寸含有的像素点越多,显示效果越好
2.dp:在定义 UI 布局时应使用的虚拟像素单位,用于以密度无关方式表示布局维度 或位置
在android api中
1.densityDpi:这个对应dpi(像素密度单位) 单位: px /inc
2.density:显示的逻辑密度,这是密度独立像素单位 ,表示1个虚拟像素对应多少个屏幕像素px
即1dp 对应 几个px --------- 单位: px /dp
3.虚拟像素单位: 官方规定 1英寸有160个虚拟像素 160dp/inc
下面推导px和dp之间的关系
假设 像素密度densityDpi = 240(1英寸含有240个像素, 即240px/inc ),
因为官方规定 1英寸有160个虚拟像素 ( 160dp/inc ),
所以1英寸中,160dp对应240px(即 1dp = 1.5px),即 density = 240px/160dp = 1.5 px /dp
所以 density = densityDpi / 160 px/dp --- 1dp 对应 density个屏幕像素px
所以 1dp = density 个 px
3dp = 3 * density 个px
a个dp = a* density 个px = a * densityDpi / 160 个px --------这就是dp 和px 之间的关系
--------------------------------------------------------------------
当 densityDpi = 160
1英寸中,160dp对应160px(即 1dp = 1px),即dp 和px等价
将分辨率转换成虚拟像素表示
1. dip = 160 , 320 x 480 px 转换成dp 表示
首先计算出 density = 160 / 160 px/dp , 1dp 对应1个px
设 320px 对应 a 个dp , 所以 a = 320 /dendity = 320 dp
同理得高 480dp
所以 在dip = 160, 320 x 480 px 转换成dp 表示 320dp x 480dp
1. dip = 240 , 320 x 480 px 转换成dp 表示
首先计算出 density = 240 / 160 px/dp , 1dp 对应1.5个px
设 320px 对应 a 个dp , 所以 a = 320 /dendity = 233dp
同理得高 320dp
所以 在dip = 240, 320 x 480 px 转换成dp 表示 233dp x 320dp