Android 在 gl 视图之间切换会导致应用冻结

Android switching between gl views causes app freeze

我仍在学习如何在 Android 中编程,我创建了一个 Activity 和开始视图:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.my_activity);

        mMainView = (RajawaliSurfaceView) findViewById(R.id.my_view);
        mMainView.setSurfaceRenderer(new Renderer());
        mMainView.setZOrderOnTop(false);

        // Also set up a surface view I'd like to switch on back and forth
        mGLView = new GLSurfaceView(this);
        mGLView.setEGLContextClientVersion(2);
        mGLView.setDebugFlags(GLSurfaceView.DEBUG_CHECK_GL_ERROR);
        mGLView.setRenderer(cameraRenderer_ = new GLRenderer(this));
        mGLView.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
    }

这有效,我什至可以无缝切换到 GL 视图:

public void switchToGLView(View view) {
  setContentView(mGLView);
}

但是在我完成 GL 的事情之后,我 GLRenderer 在我的主 activity

中调用了一个恢复函数
public void restoreRenderer() {
  // Restoring the previous view (my_view) with the non-GL renderer
  setContentView(mMainView); <<<<<< FREEZES HERE (blackscreen)
}

不幸的是,这永远行不通:从以前的 GL 渲染器开始,屏幕仍然是黑色的,通过调试 setContentView 行,我发现:

关于如何解决这个问题的任何技巧或提示?

您可以使用框架或相对布局解决此问题。 如果我理解正确的话,mMainView 和 mGLView 都是全屏的。 有几个选项:

您可以更改视图的可见性:

public void switchViews() {
  if(mMainView.getVisibility() == View.VISIBLE){
     mMainView.setVisibility(View.GONE);
     mGLView.setVisibility(View.VISIBLE);
  } else{
     mMainView.setVisibility(View.VISIBLE);
     mGLView.setVisibility(View.GONE);
  }
}

另一种选择是更改视图的 Z 顺序:

public void switchViews(View view){
  view.bringToFront();
  view.invalidate();
}

除非您在使用上述方法时遇到任何问题。