我想通过编程来计算px
到dp
的转换。怎样实现呢?
我从以下位置获取分辨率:
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
ht = displaymetrics.heightPixels;
wt = displaymetrics.widthPixels;
我想通过编程来计算px
到dp
的转换。怎样实现呢?
我从以下位置获取分辨率:
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
ht = displaymetrics.heightPixels;
wt = displaymetrics.widthPixels;
这里所有的答案都展示了dp->px转换而不是OP所要求的px->dp转换。
请注意,TypedValue.applyDimension
无法用于将px转换为dp,对此,您必须使用以下描述的方法:https://dev59.com/MW445IYBdhLWcg3w_O8m#17880012 (下面为方便起见引用)。
fun Context.dpToPx(dp: Int): Int {
return (dp * resources.displayMetrics.density).toInt()
}
fun Context.pxToDp(px: Int): Int {
return (px / resources.displayMetrics.density).toInt()
}
float ht_px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, ht, getResources().getDisplayMetrics());
float wt_px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, wt, getResources().getDisplayMetrics());
TypedValue.COMPLEX_UNIT_DIP
更改为TypedValue.COMPLEX_UNIT_PX
,以将dp -> px
进行转换? - DeltaCap019TypedValue.applyDimension
的文档(https://developer.android.com/reference/android/util/TypedValue.html#applyDimension(int,%20float,%20android.util.DisplayMetrics)),它说:“将保存维度的未打包复杂数据值转换为其最终浮点值”,即返回值始终以px为单位。因此,如果您传递`TypedValue.COMPLEX_UNIT_PX`,它只会执行px->px的“转换”,也就是什么都不做。 - Vicky Chijwani这应该可以给你转换像素-> dp:
DisplayMetrics displaymetrics = new DisplayMetrics();
int dp = (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, myPixels, displaymetrics );
TypedValue.applyDimension
的文档说明第一个参数是要从中转换的单位,返回值是“根据其单位乘以相应度量的复杂浮点数值”。applyDimension
不能用于将 px 转换为 dp,对此你必须按照这里描述的方式进行转换:https://dev59.com/MW445IYBdhLWcg3w_O8m#17880012 - Vicky ChijwaniDisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
String str_ScreenSize = "The Android Screen is: "
+ dm.widthPixels
+ " x "
+ dm.heightPixels;
TextView mScreenSize = (TextView) findViewById(R.id.strScreenSize);
mScreenSize.setText(str_ScreenSize);
您能检查一下吗?
或者这也可能会对您有所帮助
int value = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
(float) 123.4, getResources().getDisplayMetrics());