0

最近、Androidのアプリでナビゲーションバーを非表示にして没入型モードを使用する必要があることに気付きました。私は、Google Playゲームの自動ログインプロセス中にOpenGLサーフェスが作成されるという難しい問題に遭遇しました。ナビゲーションバーはこの間に引き続き表示され、GLSurfaceView自体がこれを考慮してサイズ変更され、ナビゲーションバーが消えた後に画面の下部に黒いバーが残ります。 Googleが提供するBaseGameUtilsパッケージを使用しています。つまり、ベースActivityBaseGameActivityクラスを前記パッケージから拡張しているため、コードを実行する前にスーパークラスのコンストラクタを実行しています。したがって、ログインプロセスが始まる前にOpenGL ESサーフェスが作成されていることを確認できません。これは、私が自分のActivityクラスのonCreate()WindowのフラグSYSTEM_UI_FLAG_HIDE_NAVIGATIONSYSTEM_UI_FLAG_IMMERSIVE_STICKYを設定しても、ログイン処理中にナビゲーションバーが表示されることを意味します。私もBaseGameActivityのフラグを変更しようとしましたが、無駄です。私はかなり問題があるのは、私がそれらを修正することができないGoogleApiClientから直接来るように思われる様々なポップアップにあると確信しています。OpenGL ESのサーフェスサイズ、非表示のAndroidソフトウェアナビゲーションバー、Google Playゲーム

GLSurfaceViewを完全に再作成すると、ホームボタンを押してからアプリに戻るなど、Surfaceのサイズが正しく設定されます。しかし、これを行うには、すべてのテクスチャを完全にリロードする必要があります。これは、アプリが既に開始されてからはできません。

  • Google Playゲームのログインプロセスが開始される前にGLSurfaceViewを作成してください。私はこれがまったく可能であるとは確信していませんが、誰かが逆の経験を持っていれば、問題を完全に解決するはずです。
  • トリガー全くナビゲーションバーの立ち上げからBaseGameUtilsパッケージを停止し、それはテクスチャをリロードすることなく、自分自身のサイズを変更するので、GLSurfaceViewの「リセット」、または

他の解決策ももちろん歓迎されています。

+0

GLSurfaceViewではなくSurfaceViewを使用すると、EGLSurfaceの寿命を完全に制御できます。複数の例については、Grafika(https://github.com/google/grafika)を参照してください。 – fadden

答えて

0

あなたの問題をすべて解決するわけではありませんが、BaseGameActivityとBaseGameUtilsを削除することは間違いありません。この変更に関する情報ビデオ:Game On! - The death of BaseGameActivityがあります。お勧めの方法は、アクティビティ(またはActivityFragment)に接続に必要な2つのインターフェイス(GoogleApiClient.ConnectionCallbacksGoogleApiClient.OnConnectionFailedListener)を実装することです。

TypeANumberサンプルは、従うべき良いモデルです。

これにより、初期化コードとサインイン処理をすべて問題なく統合できるようになります。

ログインプロセスの前にGLSurfaceViewを作成する限り、これは問題ありません。ビューを初期化してゲームを開始する準備ができたら、GoogleAPIClient.connect()を呼び出してプロセスを開始できます。

C++に精通している場合は、OpenGLとPlayゲームサービスを使用するC++ベーシックゲームサンプルのコードを参照できます。https://github.com/playgameservices/cpp-android-basic-samples

関連する問題