【问题标题】:Converting Pixel values to mm - Android将像素值转换为 mm - Android
【发布时间】:2013-01-28 19:48:46
【问题描述】:

由于具体需要,在我的android布局中,我使用了“mm”来提供尺寸。在 TextView 中,我也提供了“mm”的尺寸。当我执行textView.getTextSize() 时,返回的大小始终以像素值表示。我想将该像素值转换为“mm”。例如,如果我将字体大小设置为“2mm”,那么在任何设备上,当我执行getTextSize() 时,我希望得到“2mm”。

我应该为此使用任何特定的方法吗?我可以找到将“mm”转换为“pixel”的答案,但找不到任何关于转换反之亦然的信息。

【问题讨论】:

    标签: android pixel


    【解决方案1】:

    我们使用TypedValue.java

    float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_MM, 1, 
                    getResources().getDisplayMetrics());
    
      public static float applyDimension(int unit, float value,
                                           DisplayMetrics metrics)
        {
            switch (unit) {
            case COMPLEX_UNIT_PX:
                return value;
            case COMPLEX_UNIT_DIP:
                return value * metrics.density;
            case COMPLEX_UNIT_SP:
                return value * metrics.scaledDensity;
            case COMPLEX_UNIT_PT:
                return value * metrics.xdpi * (1.0f/72);
            case COMPLEX_UNIT_IN:
                return value * metrics.xdpi;
            case COMPLEX_UNIT_MM:
                return value * metrics.xdpi * (1.0f/25.4f);
            }
            return 0;
        }
    

    所以你可以试试

    Pix = mm * metrics.xdpi * (1.0f/25.4f);

    MM = pix / metrics.xdpi * 25.4f;

    【讨论】:

    • 感谢 Nimish,您的回答对我来说似乎是正确的。我对其进行了一些编辑 - 添加了括号 - float mm = pix /(dm.xdpi * (1.0f/25.4f));
    • 嗯……很奇怪,但仍然没有休息。
    • 我也编辑过:MM = pix / metrics.xdpi * 25.4f;也许他们会接受我的编辑...
    • 公式与最初编写的一样正确。

      请忽略修改
    【解决方案2】:

    我想说一种更强大的方法(随着 Android 框架中应用的任何新见解而发展)是这样的:

    public static float pxToMm(final float px, final Context context)
    {
        final DisplayMetrics dm = context.getResources().getDisplayMetrics();
        return px / TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_MM, 1, dm);
    }
    

    【讨论】:

      【解决方案3】:

      尝试查看此链接。您正在寻找屏幕像素密度。

      getting the screen density programmatically in android?

      从这里您可以使用英寸到毫米的转换(1 英寸 == 25.4 毫米)来获得答案。

      【讨论】:

        【解决方案4】:

        这是来自 google 的另一个选项:http://developer.android.com/reference/android/util/DisplayMetrics.html

        您需要将此数字缩放为毫米,因此请使用 25.4 毫米 = 1 英寸。

        【讨论】:

          【解决方案5】:
          float mm = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 1, 
                      getResources().getDisplayMetrics());
          

          applyDimesion parameters

          【讨论】:

          • 这将按原样返回像素值。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-27
          • 2014-10-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多