2012-09-01 4 views
0

터치와 키가 지원되는3D 큐브 (OPENGLES)가 있습니다. KEYCODE_VOLUME_UP/DOWN을 사용하여 확대/축소하고 있습니다. 그 책임을지는 메소드는 다음에 있습니다. MyGLSurfaceView는 GLSurfaceView을 확장합니다. 내 문제는 내가 축소/int를 누르면 잘 작동하지만 볼륨 업/다운 기능도 있습니다. 가능한 빠른 해결책인가?KEYCODE_VOLUME_UP/DOWN 변경 기능

번호 :

 @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; 
    } 

답변

2

시스템 볼륨 제어는 onKeyDown 이벤트에 의해 수행된다. 클래스에서 true를 반환하면 onKeyUp 이벤트가 시스템에서 처리되지 않지만 onKeyDown은 이미 실행되었습니다. 오버 라이드 onKeyDown 대신 작동해야합니다.

EDIT : 일부 연구 후에는 dispatchKeyEvent을 덮어 쓰는 것이 가장 좋습니다. 그러면 onKeyDown 및 onKeyUp 이벤트가 방지됩니다.

+0

OnKeyDown 메서드에 대한 @override는 문제를 해결했습니다. 5 초의 일. 고마워요! –