【问题标题】:Android GLSurfaceView with drawable background具有可绘制背景的 Android GLSurfaceView
【发布时间】:2011-04-20 02:54:18
【问题描述】:

我有一个带有可绘制作为背景的 GLSurfaceView,但是在没有 surfaceView.setZOrderOnTop(true) 的情况下渲染时只有背景可见

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

有什么建议可以让它工作吗?

【问题讨论】:

    标签: android opengl-es background drawable glsurfaceview


    【解决方案1】:

    GLSurfaceView 不能真正有背景。表面视图的工作方式是在 Activity 的窗口中切出一个孔并在后面显示另一个表面。设置 setZOrderOnTop(true) 会移动 Activity 窗口上方的表面。

    【讨论】:

    • 感谢您的帮助!有没有一种方法可以推荐来实现我所需要的:静态背景图像 -> 3d 内容 -> 顶部的附加视图按钮,或者是将静态背景渲染为多边形上的纹理的唯一方法?
    • 我最后只是在多边形后面渲染了背景。谢谢你的提示!
    【解决方案2】:

    假的!你能行的。 只是一个例子来说明它是如何工作的。

    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下放一个view!

    【讨论】:

    • 谢谢。它使我的 GLSurfaceView 后代透明。但实际上 REDERMODE_CONTINUOUSLY 是默认值,对我来说添加最后一行会使应用程序崩溃。
    • 那是因为你得在view.setRenderer之前setRenderMode
    • 在 FrameLayout 中放置什么以使其他视图保持在 GLsurfaceView 之上?
    【解决方案3】:

    试试 setZOrderMediaOverlay(true);这应该将 gl 层放在背景之上但在窗口之下。

    【讨论】:

      【解决方案4】:

      好吧,既然 GLSurfaceView 只是另一个视图,为什么不使用 FrameLayout 将 GLSurfaceView 放置在 ImageView 的顶部(或者您用来显示可绘制对象的任何东西。)

      【讨论】:

      • 累了,但由于以下情况无法正常工作: 1. gl 图层具有恒定的背景图像。 2. gl 层顶部还有其他元素,例如按钮等。无法将静态图像设置为 gl 层上的背景,因为除非我 setZOrderOnTop(true) 在gl层。但如果我这样做了,那么额外的元素最终会在 gl 层下。