将dp和px转化成对应的px数值

实例:

int padding =4;

padding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4,

context.getResources().getDisplayMetrics());

解释:

padding的单位是:dip, padding的大小是:4

虽然是4dip,但是,不是最终padding的真实单位。

他是通过计算以后,4dp和密度系数相乘得到的一个值,实际上计算出来的padding单位是像素,也就是它的宽度。在不同dpi的屏幕上,这个值是不一样的。

即:将dp转化为px,返回的是一个dp对应的px数值。

如果这里是COMPLEX_UNIX_SP,就是讲sp转化为dp。

单位间的转换就用这个方法,可以将其封装成一个工具方法。

进一步理解:

applyDimension方法是将4像素转换为6dp(480x800)、4dp(320x800)、3dp(240x320), 所以返回的值对应不同的分辨率(通过getDisplayMetrics就得到了)就是6、4、3

源代码:

public static float applyDimension(int unit, float value,

DisplayMetrics metrics)

{

switch (unit) {

case COMPLEX_UNIT_PX:

return value;

case COMPLEX_UNIT_DIP:

return value * metrics.density;

case COMPLEX_UNIT_SP:

return value * metrics.scaledDensity;

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;

}

你可能感兴趣的:(将dp和px转化成对应的px数值)