gpt4 book ai didi

java - Android FrameLayout 中的分层 SurfaceView

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:38:39 27 4
gpt4 key购买 nike

我正在尝试为 Android 构建一个增强现实应用程序,但遇到了分层表面 View 的问题。我需要一个表面 View 来显示我将在其上叠加图形的相机预览,并且我需要一个表面 View 来绘制我的图形。第二个表面也需要绘制在相机预览上方,但具有透明背景。在我当前的实现中,我有两个表面 View 都按预期工作和显示,但背景不是透明的,因此没有第二个表面 View 的外观,绘制的图形叠加在相机预览表面 View 上。这是如何实现的?在搜索大量堆栈溢出问题以及其他论坛后,我遇到了许多与此事有关的相互矛盾的意见。有人说在 Android 中分层表面 View 是不可能的,而其他人则说这是使用不同布局的问题(FrameLayout 与 LinearLayout?)具体来说,我的实现包括两个 View :一个类 CustomCameraView,它扩展了 SurfaceView,一个类,CustomDrawView,它还扩展了包含在 FrameLayout 中的 SurfaceView,CustomDrawView 出现在 CustomCameraView 之后。如何将它们分层,以便 CustomDrawView 看起来叠加在 CustomCameraView 上?

最佳答案

我想很多人都试过这个。一位 Google 工程师 ( here ) 明确指出,您应该避免堆叠表面 View 。即使有人找到了一些技巧来做到这一点,它也可能不兼容并会导致问题。

我认为这提供了三个选项,具体取决于您的要求:

  • 表面 View 之上的 View

使用 Surface View 进行 Camera 预览并在其上堆叠 Views。这种方法的缺点是在“普通” View 上绘制 a) 速度较慢并且 b) 发生在 UI 线程中。如果您自己实现线程,则可以绕过 b)。但一般来说,如果您的叠加层包含诸如 UI 元素或一些不需要经常更新的 Drawable 之类的内容,那么这可能是可行的方法。

  • 在 SurfaceView 中做所有事情

这将在运行时为您提供更好的性能和更少的开销。你只有一个 SurfaceView。在 SurfaceView 上合成叠加层并在那里绘制所有内容。当然,您可以将这两种方法结合起来。

  • 在 GLSurfaceView 中做所有事情

这可能是实现真正性能的方法。像上面一样,但是在 GLSurfaceView 中使用相机 View 渲染到 OpenGL 纹理.

关于java - Android FrameLayout 中的分层 SurfaceView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4965724/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com