怎么在android中将px和dp进行转换

  介绍

这篇文章给大家介绍怎么在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进行转换