[英]How to get consistent touch size on Android devices?
我正在绘制一个绘图应用程序,并希望根据用户指尖的使用量来调整笔刷的大小。 即轻触应该产生一个薄的行程并且使用完整的指尖应该产生厚的行程。
我认为我使用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()来缩放我选择的画笔大小。 到目前为止它似乎工作得很好。
如上所述,延伸到约瑟夫厄尔关于校准实用程序的建议,我会看一下早期触摸的大小,以尝试建立一个基线。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.