我正在尝试计算可变数量的像素,以密度独立的像素,反之亦然。
此公式(px to dp): dp = (int)(px / (displayMetrics.densityDpi / 160));在小型设备上不起作用,因为它被零除。
这是我的dp to px公式:
px = (int)(dp * (displayMetrics.densityDpi / 160));有没有人能给我点建议?
发布于 2013-07-02 01:17:52
注意:上面广泛使用的解决方案是基于displayMetrics.density的。然而,文档解释说这个值是一个四舍五入的值,与屏幕‘bucket’一起使用。例如:在我的Nexus10上,它返回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));
}将像素转换为dp:
public int pxToDp(int px) {
DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
return Math.round(px / (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
}请注意,您可能希望区分xdpi和ydpi属性,但我无法想象这两个值有很大差异的正常显示。
发布于 2011-12-13 21:55:01
我用下面的公式解决了我的问题。愿其他人从中受益。
dp到px:
displayMetrics = context.getResources().getDisplayMetrics();
return (int)((dp * displayMetrics.density) + 0.5);px到dp:
displayMetrics = context.getResources().getDisplayMetrics();
return (int) ((px/displayMetrics.density)+0.5);发布于 2016-01-13 18:04:40
最有效的方法
DP到像素:
private int dpToPx(int dp)
{
return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
}DP的像素:
private int pxToDp(int px)
{
return (int) (px / Resources.getSystem().getDisplayMetrics().density);
}希望这能对你有所帮助。
https://stackoverflow.com/questions/8309354
复制相似问题