当前位置: 首页 > 面试题库 >

Android中FrameLayout中的分层SurfaceViews

白高逸
2023-03-14
问题内容

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


问题答案:

我认为很多人都尝试过。Google引擎清楚地(here)声明,您应该避免堆叠Surface
View。即使有人发现了一些技巧,它也可能不兼容并会导致问题。

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

  • 表面视图上方的视图

将“表面视图”用于“相机”预览,并在其顶部堆叠视图。这种方法的缺点是,在“普通”视图上绘制a)较慢,而b)在UI线程中进行。如果您自己实现线程,则可以解决b)。但是通常,如果叠加层包含UI元素或一些不需要频繁更新的Drawables之类的东西,那可能就是解决方法。

  • 在SurfaceView中html" target="_blank">执行所有操作

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

  • 在GLSurfaceView中做所有事情

这可能是获得真正性能的方法。像上面一样,但是在GLSurfaceView中将摄像机视图渲染为OpenGL纹理。



 类似资料:
  • FrameLayout 应该说是 Android 常用UI布局里面最简单的一种,顾名思义,它的布局方式就是将 View 一帧一帧的叠加到一起,有点类似 Photoshop 里面的图层的概念。在学习 FrameLayout 的过程中,你会发现基于它可以设计出很多有意思的 Android UI。那么接下来,我们来一起一探究竟。 1. FrameLayout 的特性 FrameLayout 是最简单且最

  • 问题内容: 我在Oracle11g中有一个具有(id,parent_id)结构的表。 我想对其进行查询,以获取与这些ID各自分层链接的所有行,因此结果应为: 我一直在和上苦苦挣扎,现在,我所能得到的只是查询所需结果的一小部分: 我不想使用任何循环来获取完整的结果。 任何的想法 ? 最好的问候,J茅r么我Lefr猫re PS:在第一个答案之后编辑,注意到我忘记了一些我想要的结果… 问题答案: 您发布

  • 问题内容: 我试图找到一个特定领域的所有深度的父母,祖父母等。例如,给定以下结构,如果我提供5,则返回的值应为1、2、3和4。 我该怎么做? 问题答案:

  • 问题内容: 我有一个与父子关系的表,我需要递归查询的帮助 表结构 我正在尝试进行递归查询,但是我无法做到这一点,建议我应该如何查询数据库 问题答案: 正如上面所指出的,这并不是真正的递归,但是如果您知道最大需要深入多少步,则可以沿以下方向使用某些方法(也许使用PHP生成查询): 我首先将父ID设置为NULL而不是0,但这是个人喜好。 ^^在这种情况下,您需要走多远。 [ 下一点没有严格意义 ] 然

  • 6.2.3.FrameLayout FrameLayout(帧布局)将其下的子元素相互覆盖起来,就像一副扑克牌,只留一个显示在外面。它可以用于标签的实现,也可以作为以后要用的控件的临时存放地。

  • 本文向大家介绍ThinkPHP中的MVC分层是什么?相关面试题,主要包含被问及ThinkPHP中的MVC分层是什么?时的应答技巧和注意事项,需要的朋友参考一下 MVC 是一种将应用程序的逻辑层和表现层进行分离的方法。ThinkPHP 也是基于MVC设计模式的。MVC只是一个抽象的概念,并没有特别明确的规定,ThinkPHP中的MVC分层大致体现在: 模型(M):模型的定义由Model类来完成。 控