2012-09-22 130 views
1

我的活動有問題,顯示CUBE 3D(簡單的OpenGL示例)。當我按下手機或模擬器上的按鍵時,應該返回到主菜單,但不會返回任何內容。任何線索?如何關閉OpenGL活動

下面的代碼:

public class Graphic3D extends Activity { 
    private GLSurfaceView glView; // Use subclass of GLSurfaceView (NEW) 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // Allocate a custom subclass of GLSurfaceView (NEW) 
     glView = new MyGLSurfaceView(this); 
     setContentView(glView); // Set View (NEW) 
    } 


@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    // ???????? 
} 


@Override 
    protected void onPause() { 
     super.onPause(); 
     glView.onPause(); 

    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     glView.onResume(); 
    } 
} 

MySurfaceView類:

public class MyGLSurfaceView extends GLSurfaceView { 
    Graphics3DRenderer renderer; // Custom GL Renderer 

    // For touch event 
    private final float TOUCH_SCALE_FACTOR = 180.0f/320.0f; 
    private float previousX; 
    private float previousY; 

    // Constructor - Allocate and set the renderer 
    public MyGLSurfaceView(Context context) { 
     super(context); 
     renderer = new Graphics3DRenderer(context); 
     this.setRenderer(renderer); 
     // Request focus, otherwise key/button won't react 
     this.requestFocus(); 
     this.setFocusableInTouchMode(true); 
    } 

    // Handler for key event 
    @Override 
    public boolean onKeyDown(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; // Event handled 
    } 

    // Handler for touch event 
    @Override 
    public boolean onTouchEvent(final MotionEvent evt) { 
     float currentX = evt.getX(); 
     float currentY = evt.getY(); 
     float deltaX, deltaY; 
     switch (evt.getAction()) { 
     case MotionEvent.ACTION_MOVE: 
      // Modify rotational angles according to movement 
      deltaX = currentX - previousX; 
      deltaY = currentY - previousY; 
      renderer.angleX += deltaY * TOUCH_SCALE_FACTOR; 
      renderer.angleY += deltaX * TOUCH_SCALE_FACTOR; 
     } 
     // Save current x, y 
     previousX = currentX; 
     previousY = currentY; 
     return true; // Event handled 
    } 
} 

回答

0

一個活動,叫finish()將關閉當前的活動。如果你還沒有關閉主菜單Activity,它應該自己「打開」。

如果您需要再次啓動活動,例如,如果您的菜單活動已關閉,則可以執行以下操作。

Intent i = new Intent(getApplicationContext(), Menu.class); 
startActivity(i); 
finish(); 
+0

我應該把這個onBackPressed()方法? –

+0

是的,如果這是你想要採取行動的地方(按後退鍵)。 – MikkoP

+0

在別的地方有一個問題,我沒有規定。在類MySurfaceView(代碼添加到主帖)中有一個覆蓋方法onKeyDown(用於3d操作)。當我按下回車鍵時,調試器顯示我調用了這個方法。問題是我無法粘貼onBackPressed()的代碼,因爲MySurfaceView沒有實現Activity類... –