Android将像素转换为dp(视频宽高比)

28

可能是重复问题:
在Android中将像素转换为dp

我想要将像素转换为dp,这个公式是什么呢?

让我们将640和480转换为dp。文档中说:

将dp单位转换为屏幕像素很简单:px = dp * (dpi / 160)

但我不认为这是我需要的(也不知道如何使用它)。我猜我只需要公式。 我已经准备好代码了:

DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);

    switch(metrics.densityDpi)
    {
         case DisplayMetrics.DENSITY_LOW:
         int sixForty = ?
         int fourEighty = ?
         break;

         case DisplayMetrics.DENSITY_MEDIUM:
         int sixForty = ?
         int fourEighty = ?
         break;

         case DisplayMetrics.DENSITY_HIGH:
         int sixForty = ?
         int fourEighty = ?
         break;
    }

1
如果您想进行一次性转换(例如从Photoshop导出精灵),这里有一个不错的转换器 - Paul Lammertsma
1个回答

84

不必从屏幕密度分类中推断出dp转换因子,您可以直接查询它:

getWindowManager().getDefaultDisplay().getMetrics(metrics);
float logicalDensity = metrics.density;

logicalDensity将包含您需要将dp乘以该因子以获得设备屏幕的物理像素尺寸。

int px = (int) Math.ceil(dp * logicalDensity);

10
要从像素获取dp,请将像素值除以密度而不是相乘。 - mportuesisf
13
public int convertToDp(int input) { // 获取屏幕密度比例 final float scale = getResources().getDisplayMetrics().density; // 根据密度比例将dp转换为像素 return (int) (input * scale + 0.5f); } - neeraj t
7
古老的问题,但为什么要加上0.5? - Idistic
5
如果必要的话,+0.5会向上舍入到最近的整数。转换成整数后,小数点后的所有内容都会被简单地删掉。+0.5 确保返回最“正确”的整数。 - mportuesisf
7
我会使用 int px = (int) Math.ceil(dp * logicalDensity);。至少在教育目的上是这样的 :-) - dunadar
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接