Android可访问性框架:如何启用瞬时单击事件

时间:2018-12-26 15:32:31

标签: java android accessibility cocos2d-x

我正在开发音乐游戏:播放器必须使用虚拟键盘弹奏旋律。

现在,我正在开发一个针对视力障碍者的演示……所以我们将屏幕划分为多个区域:区域的数量等于播放器必须演奏的“键”的数量(就像钢琴键盘一样) )。

问题是该应用程序安装在执行期间启用了某种辅助功能的iOS设备和Android设备上。 例如,当用户在启用了VoiceOver的情况下使用iOS打开游戏时,我们在检测单击事件时遇到了问题(玩家必须双击屏幕才能播放按键)…我们使用几行代码解决了此问题:

//allows direct touch interaction when user is using iOS VoiceOver.
    UIAccessibilityTraits traits = UIAccessibilityTraitAllowsDirectInteraction;
    eaglView.accessibilityTraits = traits;

现在,我正在寻找某种类似于iOS UIAccessibilityTraitAllowsDirectInteraction的设置标志,但适用于Android可访问性框架。我搜索了几个小时,但找不到类似的内容。现在,我已经将onHoverEvent添加到Cocos2dxGLSurfaceView.java中,以便在设备中的辅助功能处于活动状态时检测单击事件…然后将事件重定向至onTouchEvent,如下所示:

@Override
public boolean onHoverEvent(MotionEvent event) {
    if(mAccessibilityManager == null)
        return false;

    if (mAccessibilityManager.isTouchExplorationEnabled() && event.getPointerCount() == 1) {
        final int action = event.getAction();
        switch (action) {
            case MotionEvent.ACTION_HOVER_ENTER: {
                event.setAction(MotionEvent.ACTION_DOWN);
            } break;
            case MotionEvent.ACTION_HOVER_MOVE: {
                event.setAction(MotionEvent.ACTION_MOVE);
            } break;
            case MotionEvent.ACTION_HOVER_EXIT: {
                event.setAction(MotionEvent.ACTION_UP);
            } break;
        }
        return onTouchEvent(event);
    }

    return true;
}

但是现在此解决方案涉及两个问题:

  1. 有一个声音效果涉及“触摸探索”功能, 在Android上启用了辅助功能:每次轻按都会发出 我认为属于Android OS的声音。
  2. onTouchEvent是 会延迟执行,因此无法玩游戏。

我希望有人可以分享他们使用Android Accessibility Framework的经验,以解决这两个问题。

0 个答案:

没有答案