如何在具有透明背景的glSurfaceView上方放置一个视图?

9

我的应用程序由背景图像、包含3D对象的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不再透明,我无法看到图像背景。我已经解析了所有其他主题,但没有一个能给我满意的答案。

1
我也在为这个问题寻找答案。据我所知,在某些设备上这似乎是完全不可能的。而在其他设备上,第二种情况确实会导致一个透明的SurfaceView。 - Paul Wagener
这里有任何帮助都会很棒。 - Gerard
尝试使用在4.0中引入且性能更好的TextureView - Shakti
我只是想知道为什么你不在SurfaceView中绘制背景?@Gerard - Sherif elKhatib
你的意思是在OpenGL中创建一个2D纹理对象吗?这正是我目前正在做的,但性能要差得多(加载纹理在性能方面是一个相当重的操作)。不过还是谢谢你的帮助。 - Gerard
显示剩余2条评论
2个回答

1

终于!谢谢!整个星期五都在尝试解决这个问题。 - TJ Biddle
很高兴为您解答,TJ Biddle。 - Fred Grott

0

setZOrderOnTop() 可以使用,但这意味着您无法将任何图形放置在此 SurfaceView 之上,这很不幸。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接