没有分享这个资源,生成px的类
没有分享这个资源,生成px的类
没有分享这个资源,生成px的类
2016-01-19
// 从这个函数的实现可以看出android系统对dp和sp处理的区别
public static float applyDimension(int unit, float value,
DisplayMetrics metrics)
{
switch (unit) {
case COMPLEX_UNIT_PX:
return value; // px不需要做转换
case COMPLEX_UNIT_DIP:
return value * metrics.density; // dp转换成px
case COMPLEX_UNIT_SP:
return value * metrics.scaledDensity; // sp转换成px
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;
}
看完上述两个函数,有一定基础的同学相信已经一目了然,不过这里我还是做一下详细介绍:
1、 DisplayMetrics是一个封装了屏幕属性的数据结构,其中有屏幕的高度、宽度、dpi(每英寸像素个数)、已及
上面函数中用到的density、scaledDensity等信息;
2、 特定机型的density是确定的,其取值取决于dpi,
如果dpi == 160, 则density = 1;
如果dpi == 120, 则density = 0.75;
如果dpi = 320, 则density = 2;
依次类推,也就是说
density = (dpi*1.0)/ 160;
举报