我有一个扩展 View
的类,我想使用手写笔(galaxy note)进行输入,因为它具有悬停功能。
我已经为悬停和触摸事件添加了监听器,但我遇到了这个问题,我无法很好地解决这个问题:当我用手写笔触摸屏幕时,我有一个用ACTION_HOVER_EXIT
生成的悬停事件和一个使用 ACTION_DOWN
的触摸事件。
我想知道是否有办法知道我何时收到 ACTION_HOVER_EXIT
事件,是手写笔开始触摸屏幕还是离开屏幕。
当我抬起手写笔但仍处于悬停区域时也是如此:一个 ACTION_UP
和一个 ACTION_HOVER_ENTER
。
最佳答案
这适用于 Galaxy Note。
在 ACTION_HOVER_EXIT
事件操作中,我尝试了几种不同的方法但没有成功:
- 事件坐标 (getX, getY) - 有时让手写笔离开屏幕时的坐标类似于 0、-146,并且当手写笔开始触摸屏幕时坐标都大于 0。
- 与屏幕的距离。触控 Nib 距屏幕的距离有一个轴。通过检查它是否在 0 附近的任何地方,手写笔 Nib 应该接触屏幕。不幸的是,Galaxy note 上的手写笔设备没有此功能。
- 检查尖端的压力。当具有
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
关于Android onHoverEvent 和 onTouchEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11693578/