1

我正在开发一个应用程序,旨在捕捉画布上的文字。该应用程序设计用于 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。

我想如果这支手写笔不工作,那么任何其他手写笔也不能工作。但是,我确实尝试了不同的手写笔并且它有效。

不过,感谢您的帮助。

4

1 回答 1

1

首先,您应该将 Flyer 更新为 Honeycomb (Android 3.2),此示例也特定于 ICS (Android 4),但您可以通过使用兼容性库并对代码进行一些小的更改来运行此示例,更多信息将在可在http://htcdev.com

于 2012-04-27T01:07:42.237 回答