Android中dip、px的详细说明

1、我刚开始不理解的东西:

(1)手机平板说的屏幕大小3.7英寸是指屏幕对角线的长度,分辨率是这块屏幕显示的像素点个数。(我的手机ME525 屏幕大小:3.7寸 分辨率:854*480)

(2)屏幕密度指的是单位长度(英寸)显示像素点的个数(px),即px/英寸。

屏幕密度=对角线的像素点数量/对角线的英寸长度

(3)我们看下dp,px在android源码包TypedValue.java中的换算,我们看如下函数:

 

public static float applyDimension(int unit, float value,DisplayMetrics metrics)
{
        switch (unit) {
        case COMPLEX_UNIT_PX://像素
            return value;
        case COMPLEX_UNIT_DIP://dip  要乘以像素密度
            return value * metrics.density;
        case COMPLEX_UNIT_SP:
            return value * metrics.scaledDensity;
        case COMPLEX_UNIT_PT:
            return value * metrics.xdpi * (1.0f/72);
        case COMPLEX_UNIT_IN:
            return value * metrics.xdpi;
        case COMPLEX_UNIT_MM:
            return value * metrics.xdpi * (1.0f/25.4f);
            }
        return 0;
}

该函数功能:是把各单位换算为像素。
【注】:
metrics.density:默认值为DENSITY_DEVICE / (float) DENSITY_DEFAULT;
DENSITY_DEFAULT:是常量,值是160
2、做一下几道题目
(1)计算我的手机的屏幕密度,如下:

知道像素密度怎么计算之后,看下下一题

(2)假设现在有一块屏幕一英寸显示320个像素,另外一块屏幕一英寸显示220个像素,我的一个安卓应用上用10dp表示按钮的高,那么,

第一块显示的:像素密度(320),10dp*(320/160)= 20px

第二块显示的:像素密度(240),10dp*(240/160)= 15px  就是说在屏幕质量高的显示的像素点多。

之后看下英寸的长度,

第一块20px/320px=1/16英寸

第二块15px/240英寸=1/16英寸

也就是说dp就是屏幕长度的单位。这只是感光的觉得,下面做详细证明:

(3)证明:

  英寸=dp*(px/英寸/160)/(px/英寸)=dp/160

  也就是说1dp=1/160 英寸,1dp等于在屏幕上面显示1/160 英寸(我们人间的空间单位,也就是屏幕的单位)

总结,使用dp,不会因为屏幕的大小分辨率的原因改变它的长度,一厘米就是一厘米。

2、度量单位含义

      dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。 

     dp: dip是一样的

     px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。

 

![](https://raw.githubusercontent.com/wlxklyh/book/master/Tool/Resource/wcgif.gif)

>个人简介:高级开发工程师,兴趣和领域(Unity、Unreal、cocos creator、安卓终端开发、ios终端开发、音视频开发、图形学),欢迎加W:wlxklyh 探讨问题。(欢迎star:https://github.com/wlxklyh/SoftRenderer)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值