Android HTC Flyer - 使用MotionEvents捕获手写笔

时间:2012-04-25 12:02:19

标签: android touchscreen stylus-pen

我正在开发一款旨在捕捉画布上的文字的应用程序。该应用程序旨在与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);
    }
});

touchSurface代码

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引起了混乱。

我认为如果这个手写笔不起作用,那么任何其他手写笔都不会起作用。但是,我确实尝试了不同的手写笔,它起作用了。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

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

上提供