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

Camera2 preview is black, if I add a GLSurfaceView in front

我想在 Camera2 API 预览 (TextureView) 前制作 OpenGL 动画 (GLSurfaceView),但动画不是透明的。我在 TextureView.

前面添加了 GLSurfaceView

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

SurfaceView(及其子class GLSurfaceView)有两部分,Surface 和View。 Surface 提供对单独层的访问,独立于 View UI 层。您可以将它放在视图层的前面或后面,但它不能容纳 "between" 个视图。

使用setZOrderOnTop(true) 是将表面层放置在视图前面的正确方法。如果这不是您想要的,您应该考虑使用 TextureView,因为它们在 View 层上呈现并且可以位于各个 View 的上方或下方。

您可以使用 OpenGL ES 渲染到 TextureView(或任何其他带有 Surface 的对象)。例如,参见 Grafika.

中的 "simple GL in TextureView" Activity

setZOrderOnTop() 有效,但这意味着您不能在透明 SurfaceView 之上拥有任何东西,这很不幸。

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

setZOrderMediaOverlay(boolean isMediaOverlay)

Control whether the surface view's surface is placed on top of another regular surface view in the window (but still behind the window itself).