我还在学习如何在Android中编程,我创建了一个带有起始视图的活动:
@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
恢复功能
public void restoreRenderer() {
// Restoring the previous view (my_view) with the non-GL renderer
setContentView(mMainView); <<<<<< FREEZES HERE (blackscreen)
}
,不幸的是,这种情况永远不会起作用:屏幕在前一个GL渲染器中保持黑色,并通过调试我发现的setContentView
行:
我在Android监视器中没有任何错误或警告日志
执行从不继续。它永远陷入困境
有关如何解决此问题的任何提示或提示?
答案 0 :(得分:0)
您可以使用Frame或Relative布局解决此问题。 如果我理解正确,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();
}
除非您使用上述方法遇到任何缺点。