SurfaceView隐藏屏幕上的其他组件

2024-02-23

我正在创建一个 FrameLayout 类型的布局,在其中添加两个视图。两个视图分别是GLSurfaceView和SurfaceView的对象。根据有关 SurfaceView 的 Android 开发人员文档,

“表面是 Z 排序的,因此它位于容纳 SurfaceView 的窗口后面;SurfaceView 在其窗口中打孔以允许显示其表面。”

它对我来说效果很好,SurfaceView 总是落后于我的 GLSurfaceView(用于 openGL 绘图)。但在外部事件后恢复,以下配置的行为很奇怪,

安卓版本:4.3 设备型号:Nexus 7 内核版本3.4.0.g1f57c39 6月13日 内部版本号:JWR66N

对于此配置,外部事件后恢复会将我的 GLSurfaceView 置于 SurfaceView 后面。换句话说,SurfaceView 位于 ZOrder 的顶部,并且我的 OpenGL 绘图不再可见。在 Android 4.3 以上的版本中,不会出现此行为。

我可以通过使用 true 作为参数调用 SurfaceView 的以下方法,在所有版本上复制此行为。

无效 setZOrderOnTop

这是已知问题吗?有人可以帮我解决这个问题吗?

问候, 苏梅德


SurfaceView 有两部分:Surface 和 View。 Surface 是一个完全独立的层。视图就在那里,因此 UI 布局代码可以使用。通常,视图只是透明的黑色,因此您可以看到其后面的任何内容。

GLSurfaceView 只是 SurfaceView,带有一些管理 EGL 上下文和线程的代码。下面只是一个 SurfaceView。因此,如果您同时拥有 SurfaceView 和 GLSurfaceView,并且它们具有相同的尺寸和 Z 顺序,那么其中一个将“获胜”,另一个将“失败”,因为它们试图占据相同的位置同时空间。没有明确的“获胜”价值,因此不一致的行为是意料之中的。

避免冲突的一种方法是将一组保留为默认 Z,然后调用setZOrderMediaOverlay() http://developer.android.com/reference/android/view/SurfaceView.html#setZOrderMediaOverlay(boolean)在另一。 “媒体覆盖层”仍然位于 UI 后面,但位于默认 Surface 位置之上。如果你使用setZOrderOnTop() http://developer.android.com/reference/android/view/SurfaceView.html#setZOrderOnTop(boolean),Surface 也将位于 UI 上方。

如果您想看到其后面的东西,则需要使用透明像素渲染上层 Surface(与视图需要透明才能看到 Surface 的方式相同)。

避免此问题的最有效方法是不出现此问题:使用一个 SurfaceView 处理所有事情,将所有非 UI 元素内容渲染到它。这需要更多的工作(可能还需要表面纹理 http://developer.android.com/reference/android/graphics/SurfaceTexture.html)如果您正在渲染视频或在其中一个表面上显示相机预览。

您可以在以下位置找到一些示例Grafika https://github.com/google/grafika. The "多表面锻炼器 https://github.com/google/grafika/blob/master/src/com/android/grafika/MultiSurfaceActivity.java”演示了在软件中渲染的三个重叠的 SurfaceView,与 UI 元素重叠。其他活动展示了使用 Surface、GLES、相机和视频的方法。

另请参阅 Android系统级图形架构 https://source.android.com/devices/graphics/architecture.htmldoc,它更详细地解释了这一切。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SurfaceView隐藏屏幕上的其他组件 的相关文章

  • BottomNavigationView - 如何获取选定的菜单项?

    我使用BottomNavigationView来切换片段 如何获取当前选定的菜单项 以防止重新打开片段 BottomNavigationView bottomNavigationView BottomNavigationView findV
  • 在应用程序简历中隐藏软键盘

    我有一个 Android 应用程序 使用 Xamarin 用 C 编写 我已将应用程序简化为包含 TextView 和用于横幅广告的 Google admod AdView 的 LinearLayout 我不希望软键盘出现在应用程序中 这不
  • Android SoundPool 堆限制

    我正在使用 SoundPool 加载多个声音剪辑并播放它们 据我所知 它的功能 100 正确 但在 load 调用期间 我的日志中充斥着以下内容 06 09 11 30 26 110 ERROR AudioCache 23363 Heap
  • 如何从 SQLite 获取记录总数

    我正在尝试从 Sqlite DB 获取行的总数 以下是我想要做的代码片段 我不知道我在这里做错了什么 public static int getTotalCount Context context Cursor c null try c g
  • 共同的偏好不断消失

    我正在使用共享首选项来存储我的应用程序的登录凭据 除了一个用户之外 一切正常 一段时间后 共享偏好似乎会以某种方式重置或清除 我已针对该用户调整了我的应用程序 使其不再清除他的共享偏好设置 这样我就可以确定这不是我的应用程序的错 但即使在这
  • 菜单未显示在应用程序中

    由于某种原因 我的操作菜单在我的 Android Studio 应用程序中消失了 我正在按照教程学习如何创建 Android 应用程序 但最终遇到了这个问题 我正在使用 atm 的教程 http www raywenderlich com
  • Android:“dp”到“px”转换?

    我正在读这篇文章 http developer android com guide practices screens support html http developer android com guide practices scre
  • 接近语法错误(代码1)插入Android SQLite

    我正在创建一个通讯录应用程序 用户可以在其中输入姓名 电子邮件地址和号码 我希望将此数据保存在数据库中 但我似乎无法使插入方法起作用 我收到的错误是 android database sqlite SQLiteException near
  • Android 原理图内容提供程序库配置?

    Jake Wharton 在最近的一次演讲中提到了这个库 它看起来是避免大量样板文件的好方法 所以我尝试了一下 但没有任何成功 https github com SimonVT schematic https github com Simo
  • 获取 AlarmManager 中活动的 PendingIntents 列表

    我有办法获取活动列表PendingIntent在设备中 我开始工作AlarmManager我想看看我的PendingIntents 已正确创建和删除 也很高兴看到其他什么PendingIntent在那里 只是为了看看某些应用程序是否正在做一
  • 请求位置更新参数

    这就是 requestLocationUpdates 的样子 我使用它的方式 requestLocationUpdates String provider long minTime float minDistance LocationLis
  • 带有自定义阵列适配器的微调器不允许选择项目

    我使用自定义阵列适配器作为微调器 但是 当在下拉列表中选择一个项目时 下拉列表保留在那里 并且微调器不会更新 这是错误行为 与使用带有字符串的通用数组适配器相比 这是自定义类 我错过了什么吗 谢谢 public class Calendar
  • 检查 Android 手机上的方向

    如何查看Android手机是横屏还是竖屏 当前配置用于确定要检索的资源 可从资源中获取Configuration object getResources getConfiguration orientation 您可以通过查看其值来检查方向
  • 如何将设备连接到Eclipse?

    我无法解决这个简单的问题 我正在尝试通过 USB 电缆将我的设备连接到 Eclipse 在我的 PC 上 我已经安装了 Eclipse 和 Android SDK 并且在模拟器上运行该程序运行良好 我已在我的电脑上下载并安装了 Samsun
  • 将 JSON 参数从 java 发布到 sinatra 服务

    我有一个 Android 应用程序发布到我的 sinatra 服务 早些时候 我无法读取 sinatra 服务上的参数 但是 在我将内容类型设置为 x www form urlencoded 之后 我能够看到参数 但不完全是我想要的 我在
  • Android - 将 ImageView 保存到具有全分辨率图像的文件

    我将图像放入 ImageView 中 并实现了多点触控来调整 ImageView 中的图像大小和移动图像 现在我需要将调整大小的图像保存到图像文件中 我已经尝试过 getDrawingCache 但该图像具有 ImageView 的大小 我
  • SharedFlow 和 StateFlow 的主要区别

    两者有什么区别共享流 and 状态流 以及如何使用这些MVI建筑学 使用简单更好吗Flow或者这些作为状态和事件 Flow 是冷的 意味着它仅在收集数据时才发出数据 另外Flow不能保存数据 可以把它看成是水在里面流动的管道 Flow中的数
  • 用于推送通知的设备令牌

    我正在实施推送通知服务 我需要创建一个数据库来存储 4 个移动平台的所有设备令牌 我想根据他们的平台 iOS Android BlackBerry WP7 来组织它们 但是有什么方法可以区分平台 这样如果我只想向 Android 用户发送消
  • android Accessibility-service 突然停止触发事件

    我有一个 AccessibilityService 工作正常 但由于开发过程中的某些原因它停止工作 我似乎找不到这个原因 请看一下我的代码并告诉我为什么它不起作用 public class MyServicee extends Access
  • 为什么Android的ImageReader类这么慢?

    我尝试了适用于 Android 3 4 1 的全新 OpenCVJavaCamera2View但它太慢了 仅显示相机视图约 15 fps 当我尝试较旧的JavaCameraView相反 它给了我很好的结果 30fps 这是我相机的极限 我想

随机推荐

  • Oracle 10g - 将查询结果写入文件

    我想运行 200 多个选择查询并将结果附加到文件中 所有查询都是相同的 唯一的区别在于日期时间变量 我没有创建例程的权限 这就是我必须创建所有查询的原因 我没有权限创建视图或另一个表来存储结果 我无权访问 PL SQL 现在我需要创建一个报
  • Nuxt,将 Vuex 存储拆分为单独的文件会出现错误:未知突变类型:登录

    我试图将我的 Nuxt Vuex 存储文件拆分为单独的文件 并且没有全部Vuex getters mutations and actions到一个巨大的文件中 这演示项目位于 Github 上 https github com dutchw
  • 欧芹表单验证 - 事件监听器

    好的 所以我已经到处寻找这个 但仍然无法让它工作 似乎没有人尝试过 但我确信它可以做到 我想在我的 Twitter 引导项目中使用 Parsley 验证插件 我已经阅读了文档 但仍在学习 JQuery 所以它超出了我的理解范围 我正在合理化
  • 猫鼬一对多

    你能解释一下如何组织猫鼬模型来创建一对多连接吗 需要单独收藏 假设我有商店和物品 store js var mongoose require mongoose module exports mongoose model Store name
  • Python查找列表中n个连续的数字

    我想知道如何查找列表中的一行中是否存在一定数量的连续数字 例如 例如 如果我正在寻找两个 1 那么 list 1 1 1 4 6 original list list true true 1 4 6 after my function ha
  • lxml cssselect 解析

    我有一个包含以下数据的文档 div class ds list b 1 b A domesticated carnivorous mammal i Canis familiaris i related to the foxes and wo
  • 得到 Y 处的多项式 X? (Python 3.10、NumPy)

    我正在尝试根据 Python 3 10 中以系数降序给出的多项式计算某个 Y 值处的所有可能的实 X 值 我希望将生成的 X 值以list 我尝试过使用roots 的功能numpy图书馆 如答案之一所示这个帖子 https stackove
  • PayPal 自适应付款 - 错误 520009 - 帐户受到限制

    如果这是一个愚蠢的问题 请提前道歉 我确实尝试四处挖掘 但找不到答案 我正在尝试设置链式支付 在沙箱环境中 但收到错误 520009 帐户受到限制 尝试了几个电子邮件地址 它们都给我这个错误 电子邮件地址未在 Paypal 中注册 但据我所
  • 等待ajax响应相同的功能

    我知道类似的问题已经发布过很多次了 但是我读过很多 但找不到我的问题的答案 我有一个等待 ajax 请求响应的函数 很多人会问为什么 好吧 我正在使用一个执行函数的 Wizard Jquery 插件onLeaveAStepFunction当
  • 如何在 GridView 文本框中放置必填字段验证器

    我有一个GridView和一些TemplateField含有的物品TextBox控制 我想在其上添加一个必填字段验证器 这是我的代码
  • 颤动导航栏

    我刚刚开始应用程序开发 正在为导航栏而苦苦挣扎 下面的那个很好 但是上面的那个不好 我想删除按钮上方的灰色空间 你能帮助我吗 Code override Widget build BuildContext context return ne
  • 在 django 中记录格式化程序

    来自Django 文档 https docs djangoproject com en 1 7 topics logging examples 这是日志记录的示例格式 formatters verbose format levelname
  • 公开自托管服务时以编程方式从配置文件中读取 WCF 行为元素

    我的 app config 中有这样的配置
  • Symfony2 计算与另一个实体相关的实体字段

    我有 2 个实体 作者和书籍 1 个作者可能有很多书 我想在表格中显示每个作者有多少本书 每个作者的数量不同 我已经看过了this https stackoverflow com questions 17665271 counting th
  • PHP usort 不会对类进行排序

    这是要排序的元素数组的示例 items array 0 gt object stdClass 8 public id gt string 110 length 3 public brand id gt string 18 length 2
  • Python print 与 Javascript console.log()

    在Python中 print 1 2 n 3 4 会打印 1 2 3 4 在 JavaScript 中 console log 1 2 n 3 4 prints 1 2 n 3 4 与上面的 Python 等效的 Javascript 语句
  • 无法打开相机连接到相机时发生错误:0

    我开始开发一个应用程序 我需要使用手机的相机 当我使用 Camera open 方法时 无论是否带有cameraId 它都会返回错误 连接到相机时发生错误 0 我的 AndroidManifest xml 是
  • 如何在html页面中以格式化的方式显示html代码[重复]

    这个问题在这里已经有答案了 我的网站是一个简单的教育网站 我想以格式化的方式在我的网页中显示 HTML 代码 就像在编辑器中一样 我的意思是 HTML 标签应该以与剩余文本等不同的颜色显示 这是来自另一个网站的代码片段 我想要我的网页的输出
  • 使用 google guava 的 CacheBuilder 的 scala 2.10 类型不匹配

    我正在 scala 2 10 1 中为我的一些实体编写通用缓存 目前 我正在使用 google Guava 的 CacheBuilder 因为 scala 生态系统中没有太多选择 Code trait CachedEntity E lt K
  • SurfaceView隐藏屏幕上的其他组件

    我正在创建一个 FrameLayout 类型的布局 在其中添加两个视图 两个视图分别是GLSurfaceView和SurfaceView的对象 根据有关 SurfaceView 的 Android 开发人员文档 表面是 Z 排序的 因此它位