Скрыть указатель мыши на 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), но это был первый результат поиска, когда я изучал, как это сделать сам. Я решил обновить ответ!

Другие вопросы по тегам