簡體   English   中英

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調用了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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM