如何在Android设备上获得一致的触控尺寸?

时间:2014-01-03 20:35:01

标签: android touch

我正在使用绘图应用程序,并希望根据使用者的指尖数量来调整笔刷笔触的大小。即轻触应产生一个薄的笔划,使用完整的指尖应产生一个厚的笔划。

我认为我使用MotionEvent.getSize()工作得很好,但后来发现结果不一致。我的Galaxy I9000手机和我的7“Galaxy Tab给出了类似的结果,但朋友的10.1”Galaxy Note给出了非常不同的数字。

我编写了一个测试应用来尝试其他选项,例如getTouchMajor()getPressure(),但结果更不一致。

我做了一些测试,这里是getSize()的数字......

GTI9000   4.1" light touch = 0.033 medium = 0.1   firm = 0.33
Gal Tab 3   7" light touch = 0.02  medium = 0.1   firm = 0.15
Gal Note 10.1" light touch = 0.008 medium = 0.015 firm = 0.03

getTouchMajor()给出了奇怪的结果,I9000上的触摸测量值为10-15,Tab3上的测量值为50-65,而Note上只有2.5左右。

我试图想办法根据分辨率,密度等进行调整,但找不到能得到一致结果的东西。

任何建议都赞赏!

编辑:

@Joseph Earl:谢谢你的好建议!我没有进行特定的校准,而是决定在几个早期的活动(用户进行选择)中“观察”触摸事件的大小,然后用它来确定粗略的平均值。

在我的选择活动中(有两个)我添加了这个......

    @Override
public boolean dispatchTouchEvent(MotionEvent event) {
    App.adjustSize(event.getSize());
    return super.dispatchTouchEvent(event);
}

App是一个扩展Application的类,我将其用于一些应用程序范围的函数。这是相关部分的片段......

static private int mNSizeSamples = 0;
static private float mSizeTotal = 0;
static private float mSizeAvg = 0;

static public void adjustSize(float val) {
    mNSizeSamples++;
    mSizeTotal += val;
    mSizeAvg = mSizeTotal / mNSizeSamples; 
}

static public float getSizeAvg() {
    return mSizeAvg;
}

然后我从那里通过除以App.getSizeAvg()来缩放我选择的画笔大小。到目前为止它似乎工作得很好。

1 个答案:

答案 0 :(得分:0)

如上所述,根据Joseph Earl对校准实用程序的建议,我会看一下早期触摸的大小,以尝试建立一个基线。