1.物理像素:物理像素是手机上最小物理显示单元
2.设备独立像素:设备独立像素(也叫密度无关像素),可以认为是计算机坐标系统中得一个点,这个点代表一个可以由程序使用的虚拟像素(比如: css像素),然后由相关系统转换为物理像素。
3.设备像素比:设备像素比简称为dpr,其定义了物理像素和设备独立像素的对应关系。它的值可以按下面的公式计算得到:
设备像素比 = 物理像素 / 设备独立像素
在Retina屏的iphone上,devicePixelRatio的值为2,也就是说1个css像素相当于2个物理像素。通常所说的二倍屏(retina)的dpr是2, 三倍屏是3。
设备宽高为375×667,可以理解为设备独立像素(或css像素)。
dpr为2,根据上面的计算公式,其物理像素就应该×2,为750×1334。
一张图表示
在不同的屏幕上(普通屏幕 vs retina屏幕),css像素所呈现的大小(物理尺寸)是一致的,不同的是1个css像素所对应的物理像素个数是不一致的。
在普通屏幕下,1个css像素 对应 1个物理像素(1:1)。
在retina 屏幕下,1个css像素对应 4个物理像素(1:4)。
RN长宽单位默认对应DP:所谓与密度无关就是密度变化不引起物理尺寸的变化,这一点DP与RN官方说的一致.
现在想想,也就是说1DP在物理尺寸上不管屏幕的分辨率怎么变化,它的物理尺寸是固定不变的是核心
脑海里想象我的电脑是一个手机屏幕,我把分辨率调高了,也就是屏幕密度变大了,物理尺寸没有变,那么一个像素代表的物理尺寸也就小了,1DP要保持它的物理尺寸不变化,那么就要转化成更多的像素点
在React Native 中 PixelRatio.get() 是获取屏幕密度的.
80 dpi 上 PixelRatio.get()=0.5 1dp=0.5px
160 dpi 上 PixelRatio.get()=1 1dp=1px
320dpi 上PixelRatio.get()=2 1dp=2px
从上面的规律分析得出 react native 中 1px=1dp/屏幕密度 而屏幕密度=PixelRatio.get()
所以 1px=1dp/PixelRatio.get()
px:逻辑像素,一般为浏览器使用的单位
dp,pt:物理像素,与设备无关
dpr:像素比,
1.自适应屏幕的大小方法,自适应不同屏幕:
//375是默认iphone6二倍屏设计稿(除以像素密度之后的设备独立像素)
function(size) {
return Math.round((size/375)*屏幕宽);
}
2. 一般用于1px线条等细小的样式,适配不同分辨率:
const dpi = PixelRatio.get();
function(size) {
return size/dpi
}
网友评论