Android源码之DisplayMetrix

来源:互联网 发布:第二国际 知乎 编辑:程序博客网 时间:2024/06/07 22:31

DisplayMetrix是Android下关于显示屏信息的结构类,包括显示屏大小、密度等等。

DisplayMetrix中没有什么方法,在实际应用中主要使用其内部的几个public成员变量,其定义如下:


public static final int DENSITY_LOW = 120;
public static final int DENSITY_MEDIUM = 160;
public static final int DENSITY_HIGH = 240;

上面三个是关于密度定义的常量
public static final int DENSITY_DEFAULT = DENSITY_MEDIUM;

默认密度为DENSITY_MEDIUM

public int widthPixels;  //X方向宽度,单位为pxpublic int heightPixels; //Y方向高度,单位为pxpublic float density;    //逻辑密度,以DENSITY_MEDIUM(160)为基准,即实际大小为density*DENSITY_MEDIUM。在代码中的常用单位dip //与此的关系是:1px = density * 1dip。比如在代码中定义长度为16dip,density为1.5,那么在实际显示时,其占据 //的屏幕大小为16 * 1.5 = 24pxpublic int densityDpi;   //DPI密度,density = densityDpi / DENSITY_MEDIUM;public float scaledDensity;  //字体缩放密度,还不知道具体含义public float xdpi;           //X方向的dpipublic float ydpi;           //Y方向的dpi



这几个成员中,最主要的是density,不过density可以通过xdpi和ydpi来求得,即简单的勾股定理:

density = Math.sqrt(Math.pow(xdpi, 2), Math.pow(ydpi, 2)) / DENSITY_MEDIUM;


通过这几个变量,也可以求得设备的尺寸,步骤如下:

1、计算X方向的宽度:x = widthPixels / xdpi;

2、计算Y方向的高度,y = heightPixels / ydpi;

3、勾股定理:size = Math.sqrt(Math.pow(x, 2), Math.pow(y, 2)) //这里设备尺寸指对角线长度

在三星Galaxy Tab P1000上测试:

widthPixels = 600

heightPixels = 1024

xdpi = 168.89351

ydpi = 169.33333

求得屏幕尺寸为7寸屏


注:从网上看到有下面求屏幕尺寸的方法:


这种方法是错误的,因为diagonalPixels是屏幕对角线长度,而density*160是每inch的pixel,是单位正方形的对角线,两者根本不能做除法。


附:Android分辨率相关基础概念:



源码下载:http://download.csdn.net/detail/lxgwm2008/5234067

原创粉丝点击