作为一个爱好和学习,这是否可能,我正在尝试为Android实现一个简单的自我射击游戏。不幸的是,在处理鼠标事件处理时,我遇到了死胡同。
我已经有一个onGenericMotion()
- 侦听器,它处理系统框架生成的MotionEvent
个对象。问题是,鼠标生成的MotionEvent
个对象只包含绝对坐标,一旦光标到达屏幕的边缘或角落,它们就会“卡住”。所以我在考虑相对鼠标坐标。虽然我发现MotionEvent
上没有可以提供相对动作的功能,但使用
adb shell su -- getevent -lt /dev/input/event3
并检查其输出显示内核在尝试移动光标时会生成不同的相对运动事件,即使它被卡在屏幕的一角。所以,鉴于我的射手有su访问权限,我可以获得相对动作。
现在的问题是:一点点Google-fu透露,在许多自我射手中,典型的鼠标移动是通过
实现的。所以,问题确实是双重的:
答案 0 :(得分:0)
现在,没有root权限,使用pointer capture API在Android 8.0+(2017年8月发布)中就可以实现。总结:
要请求捕获指针,请在视图上调用requestPointerCapture()方法。
捕获指针的请求成功后,Android会调用onPointerCaptureChange(true),并开始传递鼠标事件。
您的焦点视图可以通过执行以下任务之一来处理事件:
如果您使用的是自定义视图,请覆盖onCapturedPointerEvent(MotionEvent)。
否则,注册一个OnCapturedPointerListener。
您的应用中的视图可以通过调用releasePointerCapture()来释放指针捕获。
答案 1 :(得分:-1)
事实证明this完全回答了我的问题。别介意。