Скрыть указатель мыши на Android
Я пишу игру для OUYA и Android и использую трекпад на контроллере OUYA. Когда ты прикасаешься к нему, появляется указатель мыши, и я не могу найти способ его скрыть. Я представляю, что это будет проблемой и для игр на нетбуке с Android. Кто-нибудь нашел способ взаимодействия с курсором вместо того, чтобы просто слушать события?
3 ответа
Это не скроет мышь, но по крайней мере поможет предотвратить сенсорные события от вмешательства в ваш код обработки джойстика - я не знаю правильного решения, но все же может помочь людям, которые попадают на эту страницу:
public boolean onGenericMotionEvent(MotionEvent event) {
if ( (event.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) != 0) {
//handle the event
return true;
}
else {
return false;
}
}
Android в настоящее время не предоставляет никаких функций, чтобы скрыть курсор мыши. Всякий раз, когда у вас есть внешнее указательное устройство (например, USB / Bluetooth-мышь, трекпад и т. Д.), Указатель мыши будет отображаться на экране при каждом взаимодействии с устройством.
К сожалению (с JB 4.2.2) это означает, что это невозможно без модифицированного ПЗУ.
Теперь можно запросить захват указателя . Вам нужно явно запросить захват:
fun onClick(view: View) {
view.requestPointerCapture()
}
Как указано в документации:
Android обычно доставляет события указателя из источников, отличных от мыши, но указатель мыши больше не отображается.
Вы можете обрабатывать события указателя, переопределив
onCapturedPointerEvent
:
override fun onCapturedPointerEvent(motionEvent: MotionEvent): Boolean {
// Get the coordinates required by your app
val verticalOffset: Float = motionEvent.y
// Use the coordinates to update your view and return true if the event was
// successfully processed
return true
}
или зарегистрировать обработчик событий для
OnCapturedPointerListener
:
myView.setOnCapturedPointerListener { view, motionEvent ->
// Get the coordinates required by your app
val horizontalOffset: Float = motionEvent.x
// Use the coordinates to update your view and return true if the event was
// successfully processed
true
}
И вы должны отпустить указатель, когда закончите:
override fun onClick(view: View) {
view.releasePointerCapture()
}
Я знаю, что контекст этого вопроса в целом может не подходить (например, разработка Ouya), но это был первый результат поиска, когда я изучал, как это сделать сам. Я решил обновить ответ!