Android onHoverEvent 和 onTouchEvent

标签 android

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

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

我想知道是否有办法知道我何时收到 ACTION_HOVER_EXIT 事件,是手写笔开始触摸屏幕还是离开屏幕。

当我抬起手写笔但仍处于悬停区域时也是如此:一个 ACTION_UP 和一个 ACTION_HOVER_ENTER

最佳答案

这适用于 Galaxy Note。

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

  1. 事件坐标 (getX, getY) - 有时让手写笔离开屏幕时的坐标类似于 0、-146,并且当手写笔开始触摸屏幕时坐标都大于 0。
  2. 与屏幕的距离。触控 Nib 距屏幕的距离有一个轴。通过检查它是否在 0 附近的任何地方,手写笔 Nib 应该接触屏幕。不幸的是,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

关于Android onHoverEvent 和 onTouchEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11693578/

相关文章:

java - 如何优雅地依赖注入(inject)原始 boolean 值进行测试?

java - 在 Android 中将月份 +1 添加到日历月份中的日历问题

android - 在 Android webview 中禁用地址栏

android - CopyToRealm - 值已存在 : null

java - Android:Toast 中的字符串连接不起作用

android - 菜单项单击隐藏弹出窗口

java - 在android中获取编码,用这种编码读取和写入?

android - 在教室 :Request had insufficient authentication scopes 中创建类(class)

android - 在 Android Studio 中将 gradle 更新为 4.1

android - 确定 GPS 是否无法锁定