java - 如何关闭 OpenGL Activity

标签 java android android-activity

我的 Activity 在显示 CUBE 3D(简单的 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
   }
}

最佳答案

在 Activity 中,调用 finish() 将关闭当前 Activity。如果您还没有关闭主菜单 Activity ,它应该会自行“打开”。

如果您需要再次启动某个 Activity,例如您的菜单 Activity 已关闭,您可以执行以下操作。

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

关于java - 如何关闭 OpenGL Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12541901/

相关文章:

android - 在我的 android 应用程序中打开和关闭第 3 方应用程序

java - 如何在android中执行没有按钮的功能?

java - 类字段同时具有@Autowired 注释和右手赋值

java - 当我运行 mockito 测试时发生 WrongTypeOfReturnValue 异常

java - Android数据库文件结构是什么

android - Android Studio(Logcat Button)在Flutter中消失了

android - Google Play API 返回错误 401

java - 在 GUI 中而不是 CLI 中输出程序

android - 如何配置以使用 NDK 构建开源库?

android - 应用内结算切换 Activity