Android HTC Flyer - 使用 MotionEvents 捕捉触控笔

Posted

技术标签:

【中文标题】Android HTC Flyer - 使用 MotionEvents 捕捉触控笔【英文标题】:Android HTC Flyer - Capturing stylus with MotionEvents 【发布时间】:2012-05-06 02:37:16 【问题描述】:

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

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

感谢您的帮助。

【问题讨论】:

构建并检查一些使用笔的 HTC 示例。 【参考方案1】:

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

【讨论】:

感谢您的帮助。我发现了问题所在。这是 Flyer 随附的专用触控笔。

以上是关于Android HTC Flyer - 使用 MotionEvents 捕捉触控笔的主要内容,如果未能解决你的问题,请参考以下文章

在使用 Android 2.2 的 HTC Desire 上使用 Android MediaPlayer 进行流式传输时的奇怪行为

HTC Thunderbolt 上的 Android 电子邮件多个附件问题

错误:Android HTC 设备中的“所选设备不兼容”

即使已连接,也看不到我的 Android HTC

HTC g6 android系统发微博图片像素变低,图片变得很小张

Android:HTC EVO 3d 的布局问题