如果我在前面添加一个GLSurfaceView,Camera2预览是黑色的

时间:2016-02-03 08:15:01

标签: android glsurfaceview z-order textureview camera2

我想在Camera2 API预览(GLSurfaceView)前面做一个OpenGL动画(TextureView),但动画并不透明。我已将GLSurfaceView添加到TextureView

前面
  • 只有在setZOrderOnTop(true);中设置GLSurfaceView,但是所有按钮和抽屉都在视图后面时才有效...

有没有办法让GLSurfaceView(动画)透明?

2 个答案:

答案 0 :(得分:2)

SurfaceView(及其子类GLSurfaceView)有两个部分,Surface和View。 Surface提供对独立于View UI图层的单独图层的访问。您可以将它放在View图层的前面或后面,但它不能适合“视图之间”。

使用setZOrderOnTop(true)是将Surface图层放置在视图前面的正确方法。如果那不是你想要的,你应该考虑使用TextureView,因为它们在View层上渲染,可以定位在各个视图的上方或下方。

您可以使用OpenGL ES渲染到TextureView(或使用Surface的任何其他内容)。例如,参见Grafika中的“TextureView中的简单GL”活动。

答案 1 :(得分:0)

setZOrderOnTop()有效,但这意味着您不能拥有透明SurfaceView以上的任何内容,这是不幸的。

唯一的方法是,使用TextureView替换Camera2预览的SurfaceView。然后我可以使用setZOrderMediaOverlay(true);中的GLSurfaceView

  

setZOrderMediaOverlay(boolean isMediaOverlay)

     

控制表面视图的表面是否位于另一个表面之上   窗口中的常规表面视图(但仍然在窗口后面   本身)。