可能的最精确测量-Android

可能的最精确测量-Android,android,units-of-measurement,Android,Units Of Measurement,我试图在Android上为任何设备创建一个精确的标尺,但我遇到了一个问题。基本上,我的测量距离我的两个不同的设备太远了。我本以为会是这样,但不是因为它发生的程度 目前,对于onTouchEvent,我只是用以下代码以英寸为单位打印x位置 DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); float x = ev

我试图在Android上为任何设备创建一个精确的标尺,但我遇到了一个问题。基本上,我的测量距离我的两个不同的设备太远了。我本以为会是这样,但不是因为它发生的程度

目前,对于onTouchEvent,我只是用以下代码以英寸为单位打印x位置

    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    float x = event.getX()/metrics.xdpi;
    System.out.println(x);
    return true;
我得到了以下结果

(3.01应为3.10)

基本上,我的模拟器是不断的。1英寸,我的银河s5不断上升约。5英寸

对于这些结果,我使用了1dp的标记宽度和8dp的标记间隔。这为我的s5提供了最准确的结果

10dp为0.625英寸,即每个标记之间应间隔一英寸的距离

尽管1dp宽度和8dp间隔在我的S5上给了我准确的结果,1dp宽度和9dp间隔(应该是什么)在android模拟器上给了我完美的结果。然而,在我的S5上,测量值每英寸偏离0.16英寸


我真的不知道该怎么办。我希望这在所有设备之间尽可能准确。

通过模拟器在所有事情上信任真实设备。但至于精确的测量,你不会得到完美的结果。dp是1/160英寸,但真正的DPI并没有那么干净——星系s5是432。1 dp为2.7像素,即8 dp为21.6像素。所以你会减少0.6/21.6或2.7%


如果你在尺子的使用过程中发现误差越来越大,这是可以解决的——很可能是因为你在做数学时允许了加性误差。但是你需要发布你的onDraw来修复它。

奇怪的是,当我在emulator上将间隔宽度从8更改为9时,没有增加错误。每英寸标记8,误差增加0.1,但每英寸9,我得到准确答案。