2016-09-28 65 views
0

我還在學習如何在Android的計劃,我創建了一個開始查看活動:GL視圖之間切換的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

您可以使用框架或相對佈局來解決此問題。 如果我理解正確,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(); 
} 

除非有使用上述方法遇到的任何缺點。