我有一个父视图组,它有一个背景,包含一个openglview作为该视图组的一部分。
我想要的是,我需要一个透明背景的openglview,我希望能够看到父背景,我希望能够在openglview上面写文字,我不想使用纹理即可。
我尝试了这个选项,
将openglview zorderontop设为true 。它让我的文字落后于glview。如果我不使zorderontop为真,背景为黑色。
将转换主题设置为使我的glview以及父视图组变为透明的活动。
我尝试通过膨胀包含glview的布局,并使用 ContexThemeWrapper 类动态更改glview的主题。但 setTheme()在运行时无效。只在清单文件中应用主题才有效。
将布局背景应用于透明也没有用,仍然是黑色背景。
答案 0 :(得分:3)
问题在于您要绘制两个单独的曲面:一个是由ViewRoot创建的曲面,另一个是为GLSurfaceView创建的曲面。这些表面由SurfaceFlinger合成,一个在另一个之上。 (默认情况下,ViewRoot曲面将位于顶部,GLSurfaceView曲面将位于底部。)
由于所有视图都被绘制到ViewRoot的表面,因此它们必须全部位于OpenGL表面之上或OpenGL表面之下。
如果您不想使用纹理,周期,您唯一的选择是创建第三个表面,这次使用SurfaceView而不是GLSurfaceView,在GLSurfaceView上方绘制文本。