美文网首页
移动端像素问题

移动端像素问题

作者: 野蛮生长_ed2e | 来源:发表于2019-05-14 21:10 被阅读0次

    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
    }
    

    相关文章

      网友评论

          本文标题:移动端像素问题

          本文链接:https://www.haomeiwen.com/subject/eyvphqtx.html