Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenGL ES表面大小、隐藏的Android软件导航栏和Google Play游戏_Android_Android Layout_Opengl Es_Google Play Games_Navigationbar - Fatal编程技术网

OpenGL ES表面大小、隐藏的Android软件导航栏和Google Play游戏

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类,因此在运行我的任何代码之前运行超类构造函数。因此,我发现自己无法确保在登录过程开始

我最近意识到我应该隐藏导航栏,在我的Android应用程序中使用沉浸式模式。我遇到了一个棘手的问题,OpenGL曲面是在Google Play Games的自动登录过程中创建的。在此期间,导航栏仍然可见,
GLSurfaceView
自行调整大小以说明这一点,在导航栏消失后,在屏幕底部留下一个黑色条。我正在使用Google提供的包,这意味着我的base
Activity
扩展了上述包中的
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()。