OpenGL ES表面大小、隐藏的Android软件导航栏和Google Play游戏
我最近意识到我应该隐藏导航栏,在我的Android应用程序中使用沉浸式模式。我遇到了一个棘手的问题,OpenGL曲面是在Google Play Games的自动登录过程中创建的。在此期间,导航栏仍然可见,OpenGL ES表面大小、隐藏的Android软件导航栏和Google Play游戏,android,android-layout,opengl-es,google-play-games,navigationbar,Android,Android Layout,Opengl Es,Google Play Games,Navigationbar,我最近意识到我应该隐藏导航栏,在我的Android应用程序中使用沉浸式模式。我遇到了一个棘手的问题,OpenGL曲面是在Google Play Games的自动登录过程中创建的。在此期间,导航栏仍然可见,GLSurfaceView自行调整大小以说明这一点,在导航栏消失后,在屏幕底部留下一个黑色条。我正在使用Google提供的包,这意味着我的baseActivity扩展了上述包中的BaseGameActivity类,因此在运行我的任何代码之前运行超类构造函数。因此,我发现自己无法确保在登录过程开始
GLSurfaceView
自行调整大小以说明这一点,在导航栏消失后,在屏幕底部留下一个黑色条。我正在使用Google提供的包,这意味着我的baseActivity
扩展了上述包中的BaseGameActivity
类,因此在运行我的任何代码之前运行超类构造函数。因此,我发现自己无法确保在登录过程开始之前创建OpenGL ES曲面。这意味着,即使我在自己的活动类的onCreate()
中设置窗口标志系统UI\u标志\u隐藏\u导航
和系统UI\u标志\u沉浸式\u粘性
时,导航栏仍会在登录过程中打开。我也尝试过在BaseGameActivity
中更改标志,但没有效果;我很确定问题出在各种弹出窗口中,这些弹出窗口似乎直接来自GoogleAppClient
,我无法修改它们
完全重新创建GLSurfaceView
,例如按下home(主页)按钮,然后返回应用程序,可以正确设置Surface
大小。但是,这样做需要完全重新加载所有纹理,而这在应用程序启动后是不可能发生的。我正在寻找解决方案,使我能够:
- 在Google Play Games登录过程开始之前,创建
GLSurfaceView
。我不确定这是否可能,但如果有人有相反的经验,它应该完全解决这个问题
- 触发
GLSURFACHEVIEW
的“重置”,以便在不重新加载纹理的情况下调整自身大小,或
- 停止
BaseGameUtils
程序包打开导航栏
当然,也欢迎使用其他解决方案。它可能无法解决您的所有问题,但您完全可以摆脱BaseGameActivity和BaseGameUtils。有一个关于此更改的信息视频:。建议的方法是让您的activity(或ActivityFragment)实现连接所需的两个接口:
该示例是一个很好的模型
这将允许您集成所有初始化代码和登录处理,而不会出现问题
只要您在登录过程之前创建GLSurfaceView,就可以了。初始化视图并准备好游戏后,可以调用GoogleAPIClient.connect()启动该过程
<> P>如果你对C++完全熟悉,你可以浏览使用OpenGL的C++基本游戏样本的代码,玩游戏服务:./p>如果你使用Survivew而不是GLASTURVIEW,你将完全控制EGL表面的寿命。有关多个示例,请参见Grafika()。