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/

相关文章:

php - 从 Web 服务器接收数据不起作用( Volley 库 android)

android - 为什么我在 android.support.v4.app.Fragment.setTargetFragment 期间得到 java.lang.IllegalArgumentException

android - Android 7.1.1 中的 KeyPairGenerator.generateKeyPair()

android - 如何将Visual Studio宏传递到android gradle构建脚本中?

java - 使用 Spinner 从 assets 文件夹中访问文件

android - 在 Android 2.3 中编辑位图

Android - 获取此设备的蓝牙 UUID

android - 如何提取图像中的红色/绿色像素

java - 在一个公共(public)方法中使用相同的私有(private)方法

java - Android 从静态上下文中获取 fragment 中的资源