美文网首页
Android像素

Android像素

作者: tuionf | 来源:发表于2016-01-18 23:30 被阅读95次

    首先来看屏幕密度DPI和分辨率PPI

    DPI

    DPI的全称是 Dots Per Inch,Inch是一个物理单位(无论在任何设备上,其大小都是固定的),所以DPI就指在一个Inch的物理长度内有多少个Dot,160DPI的屏幕就表示一个Inch包含160个Dot。Android设备用DPI来表示屏幕密度(Density),屏幕密度大就表示一个Inch包含的Dot比较多。

    PPI

    其实对Android而言,DPI等价于PPI(Pixels-Per-Inch)。


    enter description hereenter description here

    通常我们说一个设备是多少寸时,指的是屏幕对角线(Diagonal)是多少inch,所以用对角线的像素值(px)除以对角线长度(inch),就可以计算出PPI。


    enter description hereenter description here

    Android中有哪些尺寸单位?

    主要包括:dp,sp,pt,px,mm,in

    dp

    即dip(Density-independent Pixels),是一种与屏幕密度无关的尺寸单位,当屏幕密度是160dpi时,1dp = 1px。当运行在高dpi的屏幕上时,dp就会按比例放大,当运行在低dpi的屏幕上时,dp就会被按比例缩小。
    当屏幕密度是320时,1dp = 2px,因此dp是一种简单的解决view在不同大小屏幕上显示的问题的解决办法。

    sp

    sp(Scale-independent Pixels)和dp是比较相似的,但是它会随着用户对系统字体大小的设置进行比例缩放,换句话说,它能够跟随用户系统字体大小变化。所以它更加适合做为字体大小的单位。

    pt

    pt(Point)是一个基于屏幕大小的物理尺寸,1pt等于1/72英寸(inch)。(不常用)

    px

    px(Pixels)相当于实际屏幕的像素,由于不同屏幕的像素数差异比较大,因此这个单位不被推荐用于尺寸单位,

    mm

    mm(Millimeters)即毫米,这是一个基于屏幕物理尺寸的单位。(不常用)

    in

    in(Inches)即英寸,也是一个基于屏幕物理尺寸的单位。(不常用)

    dp与px之间的换算

    px = dp * (dpi / 160)
    

    举例来说,小米Pad的屏幕密度为326dpi,如果需要显示的图片大小为20dp,那么就需要提供一个 20 (326 / 160) = 40px的图片才能达到最佳显示效果,如果还要适配一个163dpi的屏幕,那么还需要再提供一个20 (163 / 160) = 20px的图片。

    各个尺寸之间的转换

    dp转px

    public static int dip2px(Context context,float dipValue){
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dipValue*scale+ 0.5f);
    }
    

    注意:这块为啥没有160呢?
    因为查看源码就知道了。

    px转dp

     public static int px2dip(Context context,float px){
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int)(px/scale +0.5f);
    }
    

    sp转px

     public static int sp2px(Context context,float spValue){
        final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int)(spValue*fontScale+0.5f);
    }
    

    px转sp

     public static int px2sp(Context context,float pxValue){
        final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int)(pxValue/fontScale+0.5f);
    }
    

    mm转in

     public static double mm2in(double mmValue){
        return mmValue*(10/254);
    }
    

    in转mm

    public static double in2mm(double inValue){
        return inValue*(25.4);
    }
    

    参考链接:
    http://www.jianshu.com/p/913943d25829
    http://blog.csdn.net/wenwen091100304/article/details/49744951

    相关文章

      网友评论

          本文标题:Android像素

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