【问题标题】:How can I put a view on top of a glSurfaceView with a transparent background?如何将视图放在具有透明背景的 glSurfaceView 之上?
【发布时间】:2013-11-27 16:08:32
【问题描述】:

我的应用由图像背景(从后到前)组成,然后是包含 3D 对象和顶部 2 个按钮的 glSurfaceView。我希望 GLSurfaceView 的背景是透明的,并且可以看到后面的图像。

我尝试了两种解决方案,但没有一个是令人满意的:

mGLSurfaceView = new GLSurfaceView(mContext);
mGLSurfaceView.setEGLContextClientVersion(2);           
mGLSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0);
mGLSurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT);
mGLSurfaceView.setZOrderOnTop(true);
mGLSurfaceView.setRenderer(mRenderer);

在这种情况下,我可以看到背景,但 3D 对象浮动在所有其他布局的顶部,有时会隐藏按钮。

mGLSurfaceView = new GLSurfaceView(mContext);
mGLSurfaceView.setEGLContextClientVersion(2);           
mGLSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0);
mGLSurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT);
mGLSurfaceView.setZOrderMediaOverlay(true);
mGLSurfaceView.setRenderer(mRenderer);

在这种情况下,我可以看到按钮,但 GLSurfaceView 不再透明,我看不到图像背景。 我已经解析了所有其他主题,但没有一个给我任何令人满意的答案。

【问题讨论】:

  • 我也在努力寻找这个问题的答案。据我所知,这在某些设备上是不可能的。在其他设备上,第二种情况确实会产生透明的 SurfaceView。
  • 奇怪的是我在 Android 2.3 上没有这个问题。仅在 4.*
  • 这里的任何帮助都会很高兴
  • 尝试使用TextureView,它是4.0引入的,性能更好。
  • 不是性能问题

标签: android 3d overlay renderer glsurfaceview


【解决方案1】:
final GLSurfaceView glView = (GLSurfaceView) findViewById(R.id.glView);

glView.setZOrderOnTop(true);
glView.setEGLConfigChooser(8, 8, 8, 8, 16, 0);
glView.getHolder().setFormat(PixelFormat.RGBA_8888);
glView.setRenderer(new MyRenderer());
glView.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);

由 SO 帖子给出: Android GLSurfaceView transparent background without setZOrderonTop 和原始博客文章: How to set a transparent GLSurfaceView

【讨论】:

  • 终于!谢谢!周五花了一整天试图弄清楚这一点。
  • 很高兴为您解答,TJ Biddle
【解决方案2】:

setZOrderOnTop() 有效,但是这意味着你不能在这个SurfaceView 上面放置任何图形,这是不幸的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    相关资源
    最近更新 更多