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
行,我发现:
我在 Android 监视器
中没有收到 任何 错误或警告日志
执行从不继续。它永远卡在那里
关于如何解决这个问题的任何技巧或提示?
您可以使用框架或相对布局解决此问题。
如果我理解正确的话,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();
}
除非您在使用上述方法时遇到任何问题。
我仍在学习如何在 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
行,我发现:
我在 Android 监视器
中没有收到 任何 错误或警告日志
执行从不继续。它永远卡在那里
关于如何解决这个问题的任何技巧或提示?
您可以使用框架或相对布局解决此问题。 如果我理解正确的话,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();
}
除非您在使用上述方法时遇到任何问题。