首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >公式px到dp,dp到px android

公式px到dp,dp到px android
EN

Stack Overflow用户
提问于 2011-11-29 18:38:16
回答 21查看 172.2K关注 0票数 161

我正在尝试计算可变数量的像素,以密度独立的像素,反之亦然。

此公式(px to dp): dp = (int)(px / (displayMetrics.densityDpi / 160));在小型设备上不起作用,因为它被零除。

这是我的dp to px公式:

代码语言:javascript
复制
px = (int)(dp * (displayMetrics.densityDpi / 160));

有没有人能给我点建议?

EN

回答 21

Stack Overflow用户

回答已采纳

发布于 2013-07-02 01:17:52

注意:上面广泛使用的解决方案是基于displayMetrics.density的。然而,文档解释说这个值是一个四舍五入的值,与屏幕‘bucket’一起使用。例如:在我的Nexus10上,它返回2,其中的实际值是298dpi (实数)/ 160dpi (默认值)= 1.8625。

根据您的需求,您可能需要精确的转换,可以像这样实现:

编辑这并不意味着与Android的内部dp单元混为一谈,因为这当然仍然基于屏幕桶。在您想要在不同设备上呈现相同实际大小的单位时,请使用此选项。

将dp转换为像素:

代码语言:javascript
复制
public int dpToPx(int dp) {
    DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
    return Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));     
}

将像素转换为dp:

代码语言:javascript
复制
public int pxToDp(int px) {
    DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
    return Math.round(px / (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
}

请注意,您可能希望区分xdpi和ydpi属性,但我无法想象这两个值有很大差异的正常显示。

票数 327
EN

Stack Overflow用户

发布于 2011-12-13 21:55:01

我用下面的公式解决了我的问题。愿其他人从中受益。

dp到px:

代码语言:javascript
复制
displayMetrics = context.getResources().getDisplayMetrics();
return (int)((dp * displayMetrics.density) + 0.5);

px到dp:

代码语言:javascript
复制
displayMetrics = context.getResources().getDisplayMetrics();
return (int) ((px/displayMetrics.density)+0.5);
票数 104
EN

Stack Overflow用户

发布于 2016-01-13 18:04:40

最有效的方法

DP到像素:

代码语言:javascript
复制
private int dpToPx(int dp)
{
    return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
}

DP的像素:

代码语言:javascript
复制
private int pxToDp(int px)
{
    return (int) (px / Resources.getSystem().getDisplayMetrics().density);
}

希望这能对你有所帮助。

票数 41
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8309354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档