Bra*_*ram 145 android formula density-independent-pixel
我试图计算可变数量的像素到密度独立像素,反之亦然.
此公式(px to dp): dp = (int)(px / (displayMetrics.densityDpi / 160));不适用于小型设备,因为它除以零.
这是我的dp to px公式:
px = (int)(dp * (displayMetrics.densityDpi / 160));
Run Code Online (Sandbox Code Playgroud)
有人可以给我一些指示吗?
Bac*_*chi 314
注意:上面广泛使用的解决方案基于displayMetrics.density.但是,文档解释说这个值是一个舍入值,与屏幕"桶"一起使用.例如.在我的Nexus 10上,它返回2,其中实际值为298dpi(实际)/ 160dpi(默认值)= 1.8625.
根据您的要求,您可能需要精确的转换,可以这样实现:
[编辑]这并不意味着与Android的内部dp单元混合,因为这当然仍然基于屏幕存储桶.如果您希望在不同设备上呈现相同实际大小的单位,请使用此选项.
将dp转换为像素:
public int dpToPx(int dp) {
DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
return Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
}
Run Code Online (Sandbox Code Playgroud)
将像素转换为dp:
public int pxToDp(int px) {
DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
return Math.round(px / (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
}
Run Code Online (Sandbox Code Playgroud)
请注意,有xdpi和ydpi属性,您可能想要区分,但我无法想象这些值差别很大的理智显示.
Bra*_*ram 103
我通过使用以下公式解决了我的问题.愿其他人从中受益.
dp到px:
displayMetrics = context.getResources().getDisplayMetrics();
return (int)((dp * displayMetrics.density) + 0.5);
Run Code Online (Sandbox Code Playgroud)
px到dp:
displayMetrics = context.getResources().getDisplayMetrics();
return (int) ((px/displayMetrics.density)+0.5);
Run Code Online (Sandbox Code Playgroud)
Kan*_*esh 34
px到dp:
int valueInpx = ...;
int valueInDp= (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, valueInpx , getResources()
.getDisplayMetrics());
Run Code Online (Sandbox Code Playgroud)
Hir*_*tel 28
DP到像素:
private int dpToPx(int dp)
{
return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
}
Run Code Online (Sandbox Code Playgroud)
像素到DP:
private int pxToDp(int px)
{
return (int) (px / Resources.getSystem().getDisplayMetrics().density);
}
Run Code Online (Sandbox Code Playgroud)
希望这会帮助你.
pel*_*lus 27
只需调用getResources().getDimensionPixelSize(R.dimen.your_dimension)从dp单位转换为像素
Pra*_*dro 14
使用此功能
private int dp2px(int dp) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, getResources().getDisplayMetrics());
}
Run Code Online (Sandbox Code Playgroud)
使用这些 Kotlin 扩展:
/**
* Converts Pixel to DP.
*/
val Int.pxToDp: Int
get() = (this / Resources.getSystem().displayMetrics.density).toInt()
/**
* Converts DP to Pixel.
*/
val Int.dpToPx: Int
get() = (this * Resources.getSystem().displayMetrics.density).toInt()
Run Code Online (Sandbox Code Playgroud)
px = dp * (dpi / 160)
dp = px * (160 / dpi)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
158222 次 |
| 最近记录: |