我想在Camera2 API预览(GLSurfaceView
)前面做一个OpenGL动画(TextureView
),但动画并不透明。我已将GLSurfaceView
添加到TextureView
。
setZOrderOnTop(true);
中设置GLSurfaceView
,但是所有按钮和抽屉都在视图后面时才有效... 有没有办法让GLSurfaceView
(动画)透明?
答案 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)
控制表面视图的表面是否位于另一个表面之上 窗口中的常规表面视图(但仍然在窗口后面 本身)。