2

これがこれを達成するための適切な方法かどうかはわかりませんが、GLSurfaceView のポップアップが必要です。そこで、dialogFragment を作成し、その onCreateView メソッドで glSurfaceView を返します。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    mView = new mGLSurfaceView(this.getDialog().getContext());
    return mView;
}

DialogFragment が表示されると、背景だけでなく画面全体が暗くなります。TextView を内部に持つ LinearLayout を返すと、これは起こりません。

4

1 に答える 1

3

これは、GLSurfaceView の動作方法によるものです。GLSurfaceView のビュー部分は単なる透明なコンテナーであり、レイアウトの下 (および DialogFragment をトリガーしたアクティビティのレイアウトの下) にある Surface でレンダリングが行われます。DialogFragment が作成されると、DialogFragment と親アクティビティの間に「調光レイヤー」が挿入され、DialogFragment にフォーカスが移動します。この調光レイヤーは、最終的に GLSurfaceView の透明なビュー部分の間に位置しますが、レンダリング サーフェスの上に配置されます。これが、画面全体が暗く見える理由を説明しています。

これは、GLSurfaceView を作成するときに setZOrderOnTop(true) を呼び出すことで修正できます。これにより、レンダリング サーフェスが DialogFragment レイアウトの他のすべてのビューの上、つまり調光レイヤーの上に強制的に配置されます。

于 2016-06-17T00:48:28.747 に答える