将Pixel值转换为mm - Android

时间:2013-01-28 19:48:46

标签: android pixel

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

我应该使用任何特定方法吗?我可以找到将“mm”转换为“像素”的答案,但无法找到任何有关转换的内容,反之亦然。

5 个答案:

答案 0 :(得分:10)

我们使用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;

答案 1 :(得分:4)

我说一个更强大的方法(随着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);
}

答案 2 :(得分:0)

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

getting the screen density programmatically in android?

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

答案 3 :(得分:0)

以下是google的另一个选项:http://developer.android.com/reference/android/util/DisplayMetrics.html

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

答案 4 :(得分:-2)

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

applyDimesion parameters