介绍
这篇文章给大家介绍怎么在android中将px和dp进行转换,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
在android开发中dp和px, sp和px之间的转换时必不可少的,网上流传的方法
public class DisplayUtils { ,/* * ,,*,convert px 用its equivalent dp ,,*,将px转换为与之相等的dp ,,*/public 才能static int  px2dp (Context 上下文,float pxValue), { ,,,final float scale =, context.getResources () .getDisplayMetrics () .density; ,,,return (int),(时间/pxValue scale +, 0.5度); ,,} ,/* * ,,*,convert dp 用its equivalent px ,,*,将dp转换为与之相等的px ,,*/public 才能static int  dp2px (Context 上下文,float dipValue), { ,,,final float scale =, context.getResources () .getDisplayMetrics () .density; ,,,return (int), (dipValue *, scale +, 0.5度); ,,} ,/* * ,,*,convert px 用its equivalent sp ,,*,将px转换为sp ,,*/public 才能static int  px2sp (Context 上下文,float pxValue), { ,,,final float fontScale =, context.getResources () .getDisplayMetrics () .scaledDensity; ,,,return (int),(时间/pxValue fontScale +, 0.5度); ,,} ,/* * ,,*,convert sp 用its equivalent px ,,*,将sp转换为px ,,*/public 才能static int  sp2px (Context 上下文,float spValue), { ,,,final float fontScale =, context.getResources () .getDisplayMetrics () .scaledDensity; ,,,return (int), (spValue *, fontScale +, 0.5度); ,,} }
关于转换公式中,通过类比一元一次函数,怎么看都是有问题的,这么明显的问题,为什么没人纠正,后来发现是自己并没有理解,原因是浮动类型在强转为int类型是,用的是去尾法,精度上有较大差异,所以通过+ 0.5 f的方式,将去尾法转变成四舍五入法,提高精度。
调用TypedValue类实现转换
/* * *,convert dp 用its equivalent px */protected int  dp2px (int dp) { ,,,return (int), TypedValue.applyDimension (TypedValue.COMPLEX_UNIT_DIP, dp, getresource () .getDisplayMetrics ()); }/* * *,convert sp 用its equivalent px */protected int  sp2px (int sp) { ,,,return (int), TypedValue.applyDimension (TypedValue.COMPLEX_UNIT_SP, sp, getresource () .getDisplayMetrics ()); } public class  TypedValue { ,,…/* *,才能{@link # TYPE_DIMENSION}, complex 单位:,Value is raw 像素只*/public 才能static final  int COMPLEX_UNIT_PX =, 0;/* *,才能{@link # TYPE_DIMENSION}, complex 单元:Value is Device 独立 ,,*,像素只*/public 才能static final  int COMPLEX_UNIT_DIP =, 1;/* *,才能{@link # TYPE_DIMENSION}, complex 单位:,Value is a scaled 像素只*/public 才能static final  int COMPLEX_UNIT_SP =, 2;/* *,才能{@link # TYPE_DIMENSION}, complex 单位:,Value is 拷贝点只*/public 才能static final  int COMPLEX_UNIT_PT =, 3;/* *,才能{@link # TYPE_DIMENSION}, complex 单位:,Value is 英寸只拷贝*/public 才能static final  int COMPLEX_UNIT_IN =, 4;/* *,才能{@link # TYPE_DIMENSION}, complex 单位:,Value is 毫米只拷贝*/public 才能static final  int COMPLEX_UNIT_MM =, 5; ,/* * ,,*,Converts an unpacked complex data value holding a dimension 用its final floating ,,*,point 价值只,two parameters & lt; var> unit,以及& lt; var> value ,,*,断开连接;as 拷贝{@link # TYPE_DIMENSION}。 ,,*, ,,*,@param unit 从而unit 用convert 从。 ,,*,@param value 从而value 用apply 从而unit 。 ,,*,@param metrics Current display metrics 用use 拷贝,conversion ,, null null null null null null null null null null null null null null null null null null null null null null null null null null怎么在android中将px和dp进行转换