8

そのため、アプリにGLSurfaceViewがあり、GLSurfaceView.Rendererによってレンダリングされ、JPCtをライブラリとして使用しています。

サーフェスは非表示のRelativeLayoutにあります(可視性:なくなっています)。可視性を「表示」に変更してから「終了」に戻すと、レイアウトは期待どおりに表示および非表示になりますが、GLSurfaceViewは表示されず、現在のアイテムをクリックしても非表示になりません。その「背後」。

グラフィカルなバッファの問題のようですが、これを機能させる方法が見つかりませんでした...何かアイデアはありますか?ありがとう!

4

1 に答える 1

12

SurfaceView(GLSurfaceViewひいては) Android の興味深い野獣です。Android javadoc からの引用:

サーフェスは、SurfaceView を保持するウィンドウの背後にあるように Z オーダーされます。SurfaceView はウィンドウに穴を開けて、その表面を表示できるようにします。ビュー階層は、通常はその上に表示される SurfaceView の兄弟を Surface と正しく合成する処理を行います。

Android には組み込みのウ​​ィンドウ コンポジターがあります (ここではウィンドウの意味が少し異なります)。ステータス バーはウィンドウであり、アクティビティには 1 つのウィンドウがあります。ただし、アクティビティにサーフェス ビューが含まれている場合は、サーフェスを保持するためだけに別のウィンドウが作成され、Android コンポジターはサーフェス ウィンドウ上のビューでウィンドウを描画します。したがって、SurfaceView実際には透明な領域にすぎません。非表示にすると、領域は描画されず、タッチに反応しませんが、表面ウィンドウはまだ存在します。android はウィンドウを非表示にするほど賢くありません。

2つのソリューションをお勧めします

  • 表面を半透明にします。ビューを非表示にする必要がある場合は、空のサーフェスをレンダリングできます( Android、レイアウトの透明なサブGLSurfaceView? )
  • ビュー階層からビューを完全に削除します
  • もう 1 つのちょっとハックな方法は、可視性が に変化したときにサブクラス化GLSurfaceViewして呼び出すことです。私はこれをテストしていないので、うまくいかないかもしれません。onDetachedFromWindow()GONE
于 2012-08-26T21:03:53.353 に答える