美文网首页
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