Android GL曲面和可见性:消失
因此,我的应用程序中有一个GLSurfaceView,由GLSurfaceView.Renderer渲染,并使用JPCt作为库 曲面处于不可见的相对位置(可见性:消失)。当我将可见性更改为“可见”,然后再更改为“消失”时,布局将按预期显示和隐藏,但GLSURFACHEVIEW不显示,它只是显示,不会隐藏,即使我可以单击现在位于其“后面”的项目 这似乎是一些图形缓冲区的问题,但我没有找到一种方法让它工作。。。有什么想法吗? 谢谢Android GL曲面和可见性:消失,android,glsurfaceview,Android,Glsurfaceview,因此,我的应用程序中有一个GLSurfaceView,由GLSurfaceView.Renderer渲染,并使用JPCt作为库 曲面处于不可见的相对位置(可见性:消失)。当我将可见性更改为“可见”,然后再更改为“消失”时,布局将按预期显示和隐藏,但GLSURFACHEVIEW不显示,它只是显示,不会隐藏,即使我可以单击现在位于其“后面”的项目 这似乎是一些图形缓冲区的问题,但我没有找到一种方法让它工作。。。有什么想法吗? 谢谢 SurfaceView(扩展为GLSurfaceView)是安卓系统
SurfaceView
(扩展为GLSurfaceView
)是安卓系统中有趣的野兽。来自Android javadoc的引文:
曲面是Z有序的,因此它位于保持其形状的窗口后面
表面观察;SurfaceView在其窗口上打了一个孔,以允许
要显示的曲面。视图层次结构将负责
与曲面正确合成SurfaceView的任何同级
这通常会出现在它上面
Android有一个内置的窗口合成器(窗口在这里有点不同的含义)。您的状态栏是一个窗口,您的活动只有一个窗口。但如果您的活动包含曲面视图,则会创建另一个窗口(仅用于保存曲面),android compositor会在曲面窗口上使用您的视图绘制窗口。因此,SurfaceView
实际上只是一个透明区域。当您隐藏它时,该区域不会被绘制,不会对触摸做出反应,但曲面窗口仍然存在,android不够聪明,无法隐藏窗口
我建议两种解决办法
- 使你的表面半透明。然后,当需要隐藏视图()时,可以渲染空曲面
- 从视图层次结构中完全删除视图
- 另一种有点老套的方法是将
子类化,并在可见性更改为GLSurfaceView
时调用GONE
。我没有测试过这个,它可能不起作用onDetachedFromWindow()