我正在开发一个应用程序,旨在捕捉画布上的文字。该应用程序设计用于 HTC Flyer (Android 2.3.3)。
此设备已经安装了 Scribbler,因此我禁用了“自动启动 Scribbler 模式”,但选中了“每个应用的笔历史记录”。
在我的测试中,我发现该应用程序可以检测到我在触摸屏上的手指,但不能检测到手写笔。我按下触控笔上的按钮组合无济于事。
我的代码基于 Android 开发人员的 TouchPaint:http: //developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.html
我没有按照上面代码中的描述导入包
com.example.android.apis.graphics;
在我的 Eclipse IDE 中,它报告了以下问题,建议我应该删除 Override 属性。
@Override
public boolean onHoverEvent(MotionEvent event) {
return onTouchOrHoverEvent(event, false /*isTouch*/);
}
所以我做了。
我已将以下内容添加到清单中。
<uses-configuration android:reqTouchScreen="stylus"/>
<uses-configuration android:reqTouchScreen="finger"/>
该应用程序可以检测到我在触摸屏上的手指移动,但不能检测到我的手写笔。为什么?
我还注意到,在 Android 开发人员指南中,MotionEvents 指的是 getToolType,但我在 Eclipse 的“Intellisense”中看不到它。
http://developer.android.com/reference/android/view/MotionEvent.html#getToolType%28int%29
getToolType 方法在我的 Android 代码中不可用。我想我可以使用这种方法来检查触摸输入的类型,例如手指或手写笔。
我还为 PaintView 添加了一个 onTouchListener(基于 TouchPaint 代码)。
this.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return touchSurface(v, event);
}
});
触摸表面代码
private boolean touchSurface(View v, MotionEvent event) {
boolean complete = true;
int pAction = event.getAction();
int pActionIndex = event.getActionIndex();
Log.i("SignName", "touchSurface event fired.");
Log.i("SignName", "Pointer Action: " + pAction + ", pActionIndex: " + pActionIndex);
return complete;
}
当我使用手指时,会触发上述事件。当我使用手写笔时,它不会被解雇。为什么?
我想知道这个问题是否与 HTC Flyer 无关,这是因为它有一个 Scribbler 应用程序,它覆盖了我的应用程序设置,或者我的代码错误。
你能帮我么?
(更新:2012 年 4 月 27 日)我发现了问题所在。引起混乱的是专用触控笔 HTC Flyer。
我想如果这支手写笔不工作,那么任何其他手写笔也不能工作。但是,我确实尝试了不同的手写笔并且它有效。
不过,感谢您的帮助。