将像素值转换为毫米-Android

8
由于特定的需求,我在我的 Android 布局中使用了“mm”来提供大小。在 TextView 中,我也以“mm”为单位提供了大小。当我执行textView.getTextSize()时,返回的大小总是以像素值为单位。我想将该像素值转换为“mm”。例如,如果我将字体大小设置为“2mm”,则在任何设备上,当我执行getTextSize()时,我希望得到“2mm”。
我应该使用特定的方法吗?我找到了将“mm”转换为“pixel”的答案,但找不到有关相反转换的内容。
5个回答

11

我们使用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)); - Raj Patel
嗯...奇怪,但是断点仍然不存在。 - Eugene Dudnyk
我也进行了编辑:MM = pix / metrics.xdpi * 25.4f; 或许他们会接受我的修改... - Oliv
公式原写法正确,请忽略编辑。 - federico verchez

8

我认为一个更加健壮的方法(随着应用于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);
}

0

0

-2
float mm = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 1, 
            getResources().getDisplayMetrics());

applyDimesion参数


这将按原样返回像素值。 - Eugene Dudnyk

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