現在、VideoView を使用して rtsp ライブ ストリーミング ソースを再生しています。これはうまくいきます。
VideoView は、最初は「通常の」状態の他の要素を含むフラグメント内にあり、フルスクリーンのトグル ボタンを実装しようとしています。
フルスクリーン モードにするには、VideoView をその親 (LinearLayout) から削除してから、別の LinearLayout に追加し、getActivity().addContentView() を使用して他のすべての上に追加します。コードは次のとおりです。
LayoutInflater lf = getActivity().getLayoutInflater();
vFullScreen = lf.inflate(R.layout.full_screen, myViewGroup, false);
LinearLayout fullscreenCont = (LinearLayout) vFullScreen.findViewById(R.id.fullscreen_container);
((ViewGroup) vsPlayer.getParent()).removeView(vsPlayer);
fullscreenCont.addView(vsPlayer);
LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
getActivity().addContentView(vFullScreen, params);
問題は、元の親ビューから削除されるとビデオが黒くなることです。
私が達成しようとしているのは、再接続/再度バッファリングする必要がないようにビデオ インスタンスを保持することですが、この親の切り替え中にビデオの再生を保持する方法がわかりません。アイデアはありますか?
編集:
次のように、videoView を一時停止してから再開すると、次のようになります。
LayoutInflater lf = getActivity().getLayoutInflater();
vFullScreen = lf.inflate(R.layout.full_screen, myViewGroup, false);
LinearLayout fullscreenCont = (LinearLayout) vFullScreen.findViewById(R.id.fullscreen_container);
vsPlayer.getVideoView().suspend();
((ViewGroup) vsPlayer.getParent()).removeView(vsPlayer);
fullscreenCont.addView(vsPlayer);
LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
getActivity().addContentView(vFullScreen, params);
vsPlayer.getVideoView().resume();
ビデオの再生が中断されます (数秒間真っ暗になります) が、その後再開されます。
もう 1 つのあまり良くない点は、クラス VideoView のメソッド suspend() および resume() が API レベル 8 以降で使用可能であり、API レベル 7 と互換性を持たせる必要があることです。