1

我有一个正在扩展的类,View我想使用手写笔(银河笔记)进行输入,因为它具有悬停功能。

我已经为悬停和触摸事件添加了侦听器,但是我遇到了这个问题,我无法很好地解决:当我用触控笔触摸屏幕时,我会生成一个悬停事件ACTION_HOVER_EXIT和一个使用ACTION_DOWN.

我想知道如果ACTION_HOVER_EXIT手写笔开始触摸屏幕或者它是否被移开,是否有办法知道我何时收到事件。

当我抬起触控笔但仍处于悬停区域时也是如此: oneACTION_UP和 one ACTION_HOVER_ENTER

4

1 回答 1

3

这是为 Galaxy Note 准备的。

ACTION_HOVER_EXIT事件操作中,我尝试了几种不同的方法,但均未成功:

  1. 事件坐标 (getX, getY) - 有时,将触控笔从屏幕上移开时的坐标类似于 0、-146,而当触控笔开始触摸屏幕时,坐标都大于 0。
  2. 与屏幕的距离。触控笔笔尖到屏幕的距离有一个轴。通过检查它是否接近 0,手写笔尖端应该接触到屏幕。不幸的是,Galaxy note 上的触控笔设备没有此功能。
  3. 检查尖端的压力。ACTION_HOVER_EXIT当调度带有动作的悬停事件时,这仍然为 0 。

查看存储在设备中的信息,device.toString()我没有看到这两种情况有什么不同。但是,通过使用handler.postDelayed()电话,我设法解决了这个问题。基本上我会在 10 毫秒后执行退出悬停动作,并且只有在此期间没有发送触摸事件。

这是我的手写笔的输出device.toString()

Input Device 5: sec_e-pen
Keyboard Type: non-alphabetic
Key Character Map: /system/usr/keychars/Generic.kcm
Sources: 0x2103 ( keyboard mouse )
AXIS_X: source=0x2002 min=0.0 max=799.8877 flat=0.0 fuzz=0.11234377
AXIS_Y: source=0x2002 min=0.0 max=1279.8877 flat=0.0 fuzz=0.11234969
AXIS_PRESSURE: source=0x2002 min=0.0 max=1.0 flat=0.0 fuzz=0.0
于 2012-07-28T20:59:29.553 回答