【发布时间】:2019-08-08 20:59:24
【问题描述】:
在我的应用程序中,我需要知道哪个输入设备产生了触摸事件:鼠标、触摸屏、触摸板或其他东西。
event.getSource() 返回:
for mouse: 8194
for touchscreen: 4098
我已经做了一个输出到 logcat 类型源的方法:
void dumpSource(MotionEvent e) {
int s = e.getSource();
Log.e("LorieService", "Motion event is from sources: " +
((s&InputDevice.SOURCE_KEYBOARD)!=0?"keyboard ":"") +
((s&InputDevice.SOURCE_DPAD)!=0?"dpad ":"") +
((s&InputDevice.SOURCE_GAMEPAD)!=0?"gamepad ":"") +
((s&InputDevice.SOURCE_TOUCHSCREEN)!=0?"touchscreen ":"") +
((s&InputDevice.SOURCE_MOUSE)!=0?"mouse ":"") +
((s&InputDevice.SOURCE_STYLUS)!=0?"stylus ":"") +
((s&InputDevice.SOURCE_BLUETOOTH_STYLUS)!=0?"bt_stylus ":"") +
((s&InputDevice.SOURCE_TRACKBALL)!=0?"trackball ":"") +
((s&InputDevice.SOURCE_MOUSE_RELATIVE)!=0?"mouse_relative ":"") +
((s&InputDevice.SOURCE_TOUCHPAD)!=0?"touchpad ":"") +
((s&InputDevice.SOURCE_TOUCH_NAVIGATION)!=0?"touch_navigation ":"") +
((s&InputDevice.SOURCE_ROTARY_ENCODER)!=0?"rotary_encoder ":"") +
((s&InputDevice.SOURCE_JOYSTICK)!=0?"joystick ":"") +
((s&InputDevice.SOURCE_HDMI)!=0?"hdmi":"")
);
}
但它为鼠标和触摸屏输出touchscreen mouse stylus bt_stylus。
如何正确区分鼠标和触屏事件?
【问题讨论】:
-
有 View.isInTouchMode() 方法,它是区分鼠标和触摸屏的答案,但不是游戏手柄。如果您从鼠标更改为触摸,它的行为是正确的,但是如果您使用触摸然后移动鼠标,则会出现光标但视图仍处于触摸模式。我只能将 ACTION_HOVER_MOVE 视为鼠标,它不会打扰我。
-
但是游戏手柄和手写笔还是有问题
标签: java android input mouse touchscreen