【问题标题】:OpenGL ES surface size, hidden Android software navigation bar, and Google Play GamesOpenGL ES 表面尺寸、隐藏的 Android 软件导航栏和 Google Play 游戏
【发布时间】:2016-04-05 01:43:51
【问题描述】:

我最近意识到我应该在我的 Android 应用中隐藏导航栏并使用沉浸式模式。我遇到了一个棘手的问题,即在 Google Play 游戏的自动登录过程中创建了 OpenGL 表面。在此期间导航栏仍然可见,GLSurfaceView 会自行调整大小以解决此问题,在导航栏消失后在屏幕底部留下一个黑条。我正在使用谷歌提供的BaseGameUtils 包,这意味着我的基础Activity 扩展了所述包中的BaseGameActivity 类,因此在运行我的任何代码之前运行超类构造函数。因此,我发现自己无法确保在登录过程开始之前创建了 OpenGL ES 表面。这意味着即使我在自己的onCreate() 类的onCreate() 中设置了Window 标志SYSTEM_UI_FLAG_HIDE_NAVIGATIONSYSTEM_UI_FLAG_IMMERSIVE_STICKY,在登录过程中仍然会弹出导航栏。我也尝试更改BaseGameActivity 中的标志,但无济于事;我相当确定问题在于出现的各种弹出窗口,这些弹出窗口似乎直接来自GoogleApiClient,我无法修改它们。

GLSurfaceView 的完整再现,例如按下主页按钮,然后返回应用程序,正确设置 Surface 大小。但是,这样做需要完全重新加载所有纹理,这在应用程序启动后是不可能发生的。我正在寻找可以让我:

  • 在 Google Play 游戏登录过程开始之前创建 GLSurfaceView。我不确定这是否可能,但如果有人有相反的经验,它应该完全解决问题。
  • 触发GLSurfaceView 的“重置”,因此它无需重新加载纹理即可自行调整大小,或者
  • 完全阻止BaseGameUtils 包调出导航栏。

当然,也欢迎其他解决方案。

【问题讨论】:

  • 如果您使用 SurfaceView 而不是 GLSurfaceView,您将完全控制 EGLSurface 的生命周期。有关多个示例,请参阅 Grafika (github.com/google/grafika)。

标签: android android-layout opengl-es google-play-games navigationbar


【解决方案1】:

它可能无法解决你所有的问题,但你绝对可以摆脱 BaseGameActivity 和 BaseGameUtils。有一个有关此更改的信息视频:Game On! - The death of BaseGameActivity。推荐的方法是让您的活动(或 ActivityFragment)实现连接所需的 2 个接口:GoogleApiClient.ConnectionCallbacksGoogleApiClient.OnConnectionFailedListener

TypeANumber 示例是一个很好的模型。

这应该允许您毫无问题地集成所有初始化代码和登录处理。

就在登录过程之前创建 GLSurfaceView 而言,这应该没问题。一旦你的视图被初始化并且你的游戏准备好了,你可以调用 GoogleAPIClient.connect() 来启动这个过程。

如果您完全熟悉 C++,可以浏览使用 OpenGL 和 Play Game Services 的 C++ 基础游戏示例代码:https://github.com/playgameservices/cpp-android-basic-samples

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    相关资源
    最近更新 更多