- dp <=> px
public static float convertDpToPixel(float dp, Context context){
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
float px = dp * (metrics.densityDpi / 160f);
// float px = dp * metrics.density;
return px;
}
public static float convertPixelsToDp(float px, Context context){
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
float dp = px / (metrics.densityDpi / 160f);
// float dp = px / metrics.density;
return dp;
}metrics.densityDpi 是屏幕像素密度,即一英寸有多少个像素,
标准情况下1dp=1px,即设备的像素密度为160
- 另一种实现
public static float convertDpToPixel(float dp, Context context){
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, metrics);
return px;
}- sp <=> px
public static int px2sp(Context context, float pxValue) {
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (pxValue / fontScale + 0.5f);
}
public static int sp2px(Context context, float spValue) {
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (spValue * fontScale + 0.5f);
}因为使用px的时候,需要的是整数,因此可以利用4舍5入法转换。
- 另一种实现
// 此类方法可以将多重尺寸单位转化成px(像素)
public static float convertDpToPixel(float sp, Context context){
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, metrics);
return px;
}