我正在开发音乐游戏:播放器必须使用虚拟键盘弹奏旋律。
现在,我正在开发一个针对视力障碍者的演示……所以我们将屏幕划分为多个区域:区域的数量等于播放器必须演奏的“键”的数量(就像钢琴键盘一样) )。
问题是该应用程序安装在执行期间启用了某种辅助功能的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;
}
但是现在此解决方案涉及两个问题:
我希望有人可以分享他们使用Android Accessibility Framework的经验,以解决这两个问题。