android - 如何在 Android 设备上获得一致的触摸大小?

标签 android touch

我正在开发一个绘图应用程序,我想根据用户指尖的使用程度来调整画笔笔触的大小。 IE。轻触应该产生细的笔触,而用完整的指尖应该产生粗的笔触。

我以为我使用 MotionEvent.getSize() 让它工作得很好,但后来发现结果不一致。我的 Galaxy I9000 手机和我的 7"Galaxy Tab 给出了相似的结果,但 friend 的 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:谢谢你的好建议!我决定尝试“观察”几个早期 Activity (用户进行选择)中触摸事件的大小,而不是进行特定校准,然后使用它来确定粗略的平均值。

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

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

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

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() 来缩放我选择的画笔大小。到目前为止,它似乎工作得很好。

最佳答案

如上所述,根据 Joseph Earl 关于校准实用程序的建议,我查看了早期接触的大小以尝试建立基线。

关于android - 如何在 Android 设备上获得一致的触摸大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20912256/

相关文章:

ios - 添加 subview Controller 时容器中断中的 UIView 帧动画

java - 如何使用方法在 Activity 之间滑动?

javascript - sencha touch dateFormat 不起作用?

linux - 我正在使用触摸在我桌面上的文件夹中创建一个文件...当我尝试这个时它说找不到命令

android - 如何检测手指何时从 ImageButton 上滑落?

android - Crosswalk 的 Ionic Framework 不工作 - 不幸的是应用程序已停止

android - 如何将图标添加到第二个工具栏

java - Android Manifest 自动生成无效权限

android - 如何在 Android XML 中绘制圆弧?

android - Gradle 同步失败 - 将 Android Studio 更新到 3.2 后