0

タッチとキーをサポートする 3D Cube (OPENGLES) というアプリがあります。KEYCODE_VOLUME_UP/DOWN を使用してズームイン/ズームアウトしています。それを担当するメソッドは次の場所に配置されています: MyGLSurfaceView extends GLSurfaceView . 私の問題は、ズームアウト/イントを押すと正常に動作することですが、音量アップ/ダウン機能もあります。そのための迅速な解決策はありますか?

コード:

       @Override
   public boolean onKeyUp(int keyCode, KeyEvent evt) {
      switch(keyCode) {
         case KeyEvent.KEYCODE_DPAD_LEFT:   // Decrease Y-rotational speed
            renderer.speedY -= 0.3f;
            break;
         case KeyEvent.KEYCODE_DPAD_RIGHT:  // Increase Y-rotational speed
            renderer.speedY += 0.3f;
            break;
         case KeyEvent.KEYCODE_DPAD_UP:     // Decrease X-rotational speed
            renderer.speedX -= 0.3f;
            break;
         case KeyEvent.KEYCODE_DPAD_DOWN:   // Increase X-rotational speed 
            renderer.speedX += 0.3f;
            break;
         case KeyEvent.KEYCODE_VOLUME_DOWN:// Zoom out (decrease z)
            renderer.z -= 0.4f;
            break;
         case KeyEvent.KEYCODE_VOLUME_UP: // Zoom in (increase z)
            renderer.z += 0.4f;
            break;
         case KeyEvent.KEYCODE_DPAD_CENTER:
             renderer.speedY = 0;
             renderer.speedX = 0;
             renderer.z      = -6.0f;
             break;
      }
      return true;
   }
4

1 に答える 1

2

システムの音量制御は、onKeyDownイベントによって実行されます。クラスで true を返すと、システムによるonKeyUpイベントの処理がキャンセルされますが、onKeyDown は既に実行されています。代わりに onKeyDown をオーバーライドすると、機能するはずです。

編集:いくつかの調査の結果、onKeyDown イベントと onKeyUp イベントの両方を防ぐべきdispatchKeyEventをオーバーライドする最善の方法のようです。

于 2012-09-01T14:57:19.803 に答える