【问题标题】:Hide Mouse Pointer on Android在 Android 上隐藏鼠标指针
【发布时间】:2022-01-20 04:57:05
【问题描述】:

我正在为 OUYA 和 Android 编写游戏,并且正在使用 OUYA 控制器上的触控板。当你触摸它时,鼠标指针会出现,我找不到隐藏它的方法。我认为这对于 Android 上网本上的游戏也是一个问题。

有没有人找到一种与光标交互而不仅仅是监听事件的方法?

【问题讨论】:

  • 似乎在 Java 和 Unity 方面都是一个问题:forums.ouya.tv/discussion/comment/2968 你可能想参与讨论,或者开始一个新的讨论,因为我认为这些论坛更正式一些比SO更爱。
  • 是的,我阅读了那个线程,据我所知,没有 JNI 连接允许来自 Unity 的连接。我只是在使用 Java,所以我想我会在这里发帖,看看是否有通用的 Android 解决方案。

标签: java android mouse-cursor ouya


【解决方案1】:

这不会隐藏鼠标,但它至少有助于防止触摸事件干扰您的操纵杆处理代码——我知道这不是一个合适的解决方案,但仍然可以帮助登陆此页面的人:

public boolean onGenericMotionEvent(MotionEvent event) {
    if ( (event.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) != 0) {
        //handle the event
        return true;
    }
    else {
        return false;
    }
}

【讨论】:

  • 我试图为我的 NativeActivity 覆盖它。我可以覆盖 onKeyDown() 和 onKeyUp() 但是当试图覆盖运动功能时,我得到:“方法不会覆盖或实现超类型的方法”
【解决方案2】:

Android 目前不公开任何隐藏鼠标光标的功能。只要您有外部指点设备(即 USB/蓝牙鼠标、触控板等),只要您与该设备交互,屏幕上就会出现鼠标指针。

不幸的是(从 JB 4.2.2 开始)这意味着没有修改过的 ROM 是不可能的。

【讨论】:

    【解决方案3】:

    现在可以request pointer capture。您需要明确请求捕获:

    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()
    }
    

    我知道这个问题的上下文可能总体上不适用(即:欧亚开发),但这是我自己研究如何做到这一点时的第一个搜索结果。所以我想我会更新答案!

    【讨论】:

      猜你喜欢
      • 2011-08-24
      • 2017-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-30
      • 2013-12-25
      • 1970-01-01
      • 2011-02-11
      相关资源
      最近更新 更多