Android GLSurfaceView带有可绘制的背景。

5

我有一个带有drawable背景的GLSurfaceView,但是如果不使用surfaceView.setZOrderOnTop(true)渲染,只有背景可见。

我需要避免使用setZOrderOnTop(true),因为在GLSurfaceView上方还有静态TextView。

有什么建议可以让这个工作起来吗?

4个回答

9

GLSurfaceView无法真正拥有背景。SurfaceView的工作方式是通过在Activity窗口中挖一个洞并显示另一个表面来实现的。设置setZOrderOnTop(true)将表面移动到Activity窗口之上。


谢谢,那非常有帮助!您能否推荐一种实现我所需的方式:静态背景图像-> 3D内容->在顶部添加其他视图按钮,还是唯一的方法是将静态背景渲染为多边形上的纹理? - Jlam
1
我最后只是在其他所有东西的背后渲染了一个多边形的背景...谢谢你的建议! - Jlam

7

不是的!您可以做到。 这只是一个示例,展示它如何运作。

glRenderer  = new OpenGLRenderer(context);
view = new GLSurfaceView(context);
view.setEGLConfigChooser(8, 8, 8, 8, 16, 0);
view.setRenderer(glRenderer);
view.getHolder().setFormat(PixelFormat.RGBA_8888);
view.getHolder().setFormat(PixelFormat.TRANSLUCENT);
view.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);

然后使用FrameLayout在GLSurfaceView下方放置一个视图!

谢谢。这使得我的GLSurfaceView子类透明了。但实际上,REDERMODE_CONTINUOUSLY是默认值,对我来说添加最后一行会导致应用程序崩溃。 - Aleks N.
1
这是因为您必须在view.setRenderer之前设置setRenderMode。 - Justin Buser
在FrameLayout中放置什么以使其他视图保持在GLSurfaceView之上? - mayank_droid

2
尝试使用setZOrderMediaOverlay(true);这个命令,它可以将GL层置于背景之上但在窗口之下。

1

既然GLSurfaceView只是另一个视图,为什么不使用FrameLayout将GLSurfaceView放置在ImageView之上(或者您正在使用的其他显示可绘制对象的视图上)。


尝试过了,但由于以下条件而无法正常工作:1. gl层具有恒定的背景图像。2.在gl层上方还有其他元素,如按钮等。无法将静态图像设置为gl层的背景,因为除非我在gl层上设置setZOrderOnTop(true),否则实际的3D内容不会呈现。但是,如果我这样做,那么其他附加元素将最终位于gl层下方。 - Jlam

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