[英]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
調用了restore函數
public void restoreRenderer() {
// Restoring the previous view (my_view) with the non-GL renderer
setContentView(mMainView); <<<<<< FREEZES HERE (blackscreen)
}
不幸的是,它永遠無法正常工作:屏幕在以前的GL渲染器中保持黑色,並且通過調試setContentView
行,我發現:
我在Android Monitor中沒有收到任何錯誤或警告日志
執行永遠不會繼續。 它永遠被困在那里
有關如何解決此問題的任何提示或提示?
您可以使用框架或相對布局解決此問題。 如果我理解正確,則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();
}
除非您使用上述方法遇到任何弊端。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.