如何在具有透明背景的glSurfaceView顶部放置视图?

时间:2013-11-27 16:08:33

标签: android 3d overlay renderer glsurfaceview

我的应用程序由图像背景组成(从后到前),然后是包含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不再透明,我看不到图像背景。 我已经解析了所有其他主题,但没有一个给我任何令人满意的答案。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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