簡體   English   中英

沒有setZOrderOnTop(true)是否可以使SurfaceView透明?

[英]Is it possible to make a SurfaceView transparent without setZOrderOnTop(true)?

我需要使我的libGDX GlSufraceView透明,並有機會在上面添加一些android視圖。 之前我使用下面的代碼:

if (graphics.getView() instanceof SurfaceView) {
    GLSurfaceView glView = (GLSurfaceView) graphics.getView();
    glView.setZOrderOnTop(true);
    glView.getHolder().setFormat(PixelFormat.RGBA_8888);
}

但是,這段代碼並沒有給我添加以上android視圖的可能性。 經過簡短的研究,我發現了替換: glView.setZOrderMediaOverlay(true); 使用該行代碼,我可以在表面上顯示任何視圖,但是透明變為黑色。

我以為這個問題是由於我的代碼是在setRenderer(...)之后啟動的。 在gdx-backend-android中找到包含setRenderer(...)的方法后。 片刻之后,我下載了libGDX源,並在setRenderer(...)之前添加了行,但不幸的是它沒有幫助,情況仍然一樣。

我正在嘗試的代碼:

1)

GLSurfaceView20 view = new GLSurfaceView20(application.getContext(), resolutionStrategy, config.useGL30 ? 3 : 2);
view.setZOrderOnTop(true);

if (configChooser != null)
    view.setEGLConfigChooser(configChooser);
else
    view.setEGLConfigChooser(config.r, config.g, config.b, config.a, config.depth, config.stencil);

view.getHolder().setFormat(PixelFormat.RGBA_8888);

view.setRenderer(this);
view.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);

return view;

2)

GLSurfaceView20 view = new GLSurfaceView20(application.getContext(), resolutionStrategy, config.useGL30 ? 3 : 2);
if (configChooser != null)
    view.setEGLConfigChooser(configChooser);
else
    view.setEGLConfigChooser(config.r, config.g, config.b, config.a, config.depth, config.stencil);

view.setZOrderOnTop(true);
view.getHolder().setFormat(PixelFormat.RGBA_8888);

view.setRenderer(this);
return view;

3)

GLSurfaceView20 view = new GLSurfaceView20(application.getContext(), resolutionStrategy, config.useGL30 ? 3 : 2);

if (configChooser != null)
    view.setEGLConfigChooser(configChooser);
else
    view.setEGLConfigChooser(config.r, config.g, config.b, config.a, config.depth, config.stencil);

view.getHolder().setFormat(PixelFormat.RGBA_8888);
view.setZOrderMediaOverlay(true);
view.setEGLContextClientVersion(2);

view.setRenderer(this);
return view;

我也沒有找到有關該主題的主題,但是沒有正確的答案。 有可能這樣做嗎?

看起來這是不可能的,但幸運的是,我找到了解決方案。 我只是用紋理視圖替換了libgdx android后端源中的表面視圖。 我還在代碼中添加了一行,以使我的紋理視圖透明:

view.setOpaque(false);

我的解決方案的優勢:

  • 每秒幀數提高(由130改為55)
  • 靈活性

現在,我可以將libGDX片段視圖用作任何普通視圖。 我可以將其放置在android視圖之間,等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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