0

嗨,我有一个具有背景的父视图组,包含一个 openglview 作为该视图组的一部分。

我真正想要的是,我需要一个具有透明背景的openglview,并且我希望能够看到父背景,并且我希望能够在openglview 之上编写文本, 我不想使用纹理

我试过这个选项,

  1. 将 openglview zorderontop 设置为 true。它使我的文本落后于 glview。如果我没有使 zorderontop 为真,则背景为黑色。

  2. 将半透明主题设置为使我的 glview 和父视图组变得透明的活动。

  3. 我试图膨胀包含 glview 的布局并使用ContexThemeWrapper类动态更改 glview 的主题。但是setTheme() 在运行时不起作用。仅在清单文件中应用主题才有效。

  4. 将布局背景应用于透明也不起作用,仍然是黑色背景。

4

1 回答 1

3

问题是您正在绘制两个单独的表面:一个由 ViewRoot 创建的表面,一个为 GLSurfaceView 创建的表面。这些表面由 SurfaceFlinger 合成,一个在另一个之上。(默认情况下,ViewRoot 表面将在顶部,而 GLSurfaceView 表面将在底部。)

由于您的所有视图都被绘制到 ViewRoot 的表面中,因此它们必须都位于 OpenGL 表面之上或 OpenGL 表面之下。

如果您不想使用纹理,则唯一的选择是创建第三个表面,这次使用 SurfaceView 而不是 GLSurfaceView,以在 GLSurfaceView 上方绘制文本。

于 2011-09-12T14:29:51.727 回答