gpt4 book ai didi

android - GL 表面和可见性 : Gone

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:21:56 28 4
gpt4 key购买 nike

所以我的应用程序中有一个 GLSurfaceView,由 GLSurfaceView.Renderer 渲染并使用 JPCt 作为库。

表面处于不可见的 RelativeLayout 中(可见性:消失)。当我将可见性更改为“可见”然后返回“消失”时,布局会按预期显示和隐藏,但 GLSurfaceView 不会,它只是显示并且不会隐藏,即使我可以点击现在的项目“背后”。

这似乎是一些图形缓冲区问题,但我没有找到解决这个问题的方法……有什么想法吗?谢谢!

最佳答案

SurfaceView(以及 GLSurfaceView 的扩展)是 Android 中有趣的东西。来自 Android javadoc 的引用:

The surface is Z ordered so that it is behind the window holding its SurfaceView; the SurfaceView punches a hole in its window to allow its surface to be displayed. The view hierarchy will take care of correctly compositing with the Surface any siblings of the SurfaceView that would normally appear on top of it

Android 有一个内置的窗口合成器(窗口在这里的含义有点不同)。你的状态栏是一个窗口,你的 Activity 有一个窗口。但是,如果您的 Activity 包含表面 View ,则会创建另一个窗口,仅用于保存表面,并且 android 合成器会在表面窗口上绘制带有您的 View 的窗口。所以 SurfaceView 实际上只是一个透明区域。当你隐藏它时,该区域不被绘制,不会对触摸使用react,但表面窗口仍然存在,android 不够聪明以隐藏窗口。

我会推荐两种解决方案

  • 使您的表面半透明。当您需要隐藏 View 时,您可以渲染空白表面(Android, Transparent sub-GLSurfaceView in layout?)
  • 从 View 层次结构中完全删除 View
  • 另一种有点 hacky 的方法是子类化 GLSurfaceView 并在可见性更改为 GONE 时调用 onDetachedFromWindow()。我没有对此进行测试,它可能无法正常工作。

关于android - GL 表面和可见性 : Gone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12133690/

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