1.1 屏幕的尺寸信息
Android的手机屏幕,不管是分辨率还是大小都是五花八门、千奇百怪的,这在一定程度上造成了绘图时的难度。要想在不同的屏幕上保持绘图的准确性,那么我们必须对这些屏幕有充分的认识。
1.1.1 屏幕参数
一块屏幕通常具有以下几个参数:
(1) 屏幕大小
指屏幕对角线的长度,通常使用“寸”来度量,例如4.7寸手机、5.5寸手机等。
(2) 分辨率
分辨率是指手机屏幕的像素点个数,例如720 X 1280就是指屏幕的分辨率,指宽有720个像素点,而高有1280个像素点。
(3) PPI
每英寸像素(Pixels Per Inch)又被称为DPI(Dots Per Inch)。它是由对角线的像素点数除以屏幕的大小得到的,通常达到400PPI就已经是非常高的屏幕密度了。
1.1.2 系统屏幕密度
每个厂商的Android手机具有不同的大小尺寸和像素密度的屏幕。Android系统如果要精确到每种DPI的屏幕,那基本是不可能的。因此,系统定义了几个标准的DPI值,作为手机的固定DPI,如下表所示:
1.1.3 独立像素密度dp
正是由于各种屏幕密度的不同,导致同样像素大小的长度,在不同密度的屏幕上显示长度不同。因为相同长度的屏幕,高密度的屏幕包含更多的像素点。Android系统使用mdpi即密度值为160的屏幕作为标准,在这个屏幕上1px = 1dp。其他屏幕则可以通过比例进行换算,例如同样是100dp的长度,在mdpi中为100px,而在hdpi中为150px。我们也可以得出在各密度值中的换算公式,在mdpi中1dp=1px,在hdpi中1dp=1.5px,在xhdpi中1dp=2px,在xxhdpi中1dp=3px。由此我们也可以得到各个分辨率直接的换算比例,即ldpi:mdpi:hdpi:xhdpi:xxhdpi=3:4:6:8:12。
1.1.4 单位转换
在程序中,可以非常方便地对这些单位进行转换。下面的代码给出了一种转换的方法,我们可以把这些代码作为工具类保存到项目中。
/**
* dp、sp 转换为px的工具类
*/
public class DisplayUtil {
/**
* 将px值转换为dip或dp值,保证尺寸大小不变
*
* @param context
* @param pxValue
* @return