Android,从像素差异中获取真实尺寸(英寸,厘米)?

时间:2015-02-20 22:43:13

标签: android dpi

我有两个用户可以在屏幕上移动的图像视图:

<ImageView
    android:layout_width="35dp"
    android:layout_height="match_parent"
    android:id="@+id/leftRulerView"/>

<ImageView
    android:layout_width="35dp"
    android:layout_height="match_parent"
    android:id="@+id/rightRulerView"/>

按以下方式初始化:

mLeftRuler = (ImageView) view.findViewById(R.id.leftRulerView);
mRightRuler = (ImageView) view.findViewById(R.id.rightRulerView);

当两者都在移动时,我正在计算两个视图之间的实际物理距离(这将用于测量真实世界的物体)。 rightRulerView始终位于左侧的右侧,因此它们之间的距离是从最左侧视图的右边缘到右侧视图的左边缘。请参阅下图:

enter image description here

首先,两个视图的像素分离:

float distance = mRightRuler.getX() - (mLeftRuler.getX() + mLeftRuler.getWidth());

这是因为getX()返回视图左侧的x位置。我对右标尺的左侧感兴趣,但我需要添加左标尺的宽度以获得右侧标尺的位置。然后,只需减去两者之间的像素数。这很好用,可以很好地提供视图之间的像素数。

要将其转换为英寸,我会执行以下操作:

DisplayMetrics mDisplayMetrics = getResources().getDisplayMetrics();
float mDPI = (float) mDisplayMetrics.densityDpi;

float measurement = distance / mDPI;

这一切相当不错,但它并不完美。什么时候说&#34; 1.00英寸&#34;在两个视图之间,它实际上只有不到1 1/8英寸(用物理屏幕上的标尺测量)。不准确性传播到更远的距离(即&#34; 3.00英寸&#34;在应用程序中实际测量到超过3 1/4英寸,屏幕上有标尺)。

那里有标尺应用程序,它们对于真实世界的标尺是准确的,那么如何将两个视图之间的像素距离转换为准确的测量?

提前谢谢。

3 个答案:

答案 0 :(得分:2)

据我所知,至少没有办法在没有任何用户输入的情况下获得精确的物理尺寸。我所做的是制作一个弹出窗口,用户必须输入直径,然后使用一些7年级的数学,并获得屏幕边缘的物理尺寸,假设它们是正方形。然后你就像“0.1mm /像素”一样,然后你可以继续使用你的方法。

答案 1 :(得分:1)

DisplayMetrics中,您可以使用

mDisplayMetrics.xdpi X维度中每英寸屏幕的确切物理像素数。 mDisplayMetrics.ydpi Y维度中每英寸屏幕的确切物理像素。

然后你可以做一些简单的数学运算来获得真正的距离

答案 2 :(得分:0)

在API 17中引入了getRealMetrics()。它应该在xdpiydpi中为您提供准确的值。

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

但是,如果您需要支持较低的API版本,则无法在没有用户输入和校准的情况下实现目标。