videoview
別のビデオ ビューの上で再生しようとしています。最初のビデオ ビューは一時停止され、2 番目のビデオ ビューは再生中です。動作しているように見えますが、画面に 2 番目のビデオが表示されません (ただし、音声が聞こえ、通常は一番上に表示されるコントロールが表示されます)。これはある種の順序の問題だと思います。何かご意見は。ちなみに、メインのビデオ ビューの上に他のビューを表示し、ビデオを背景に表示しても問題ありません。
5 に答える
それは機能しません-VideoViewは、通常のビューに穴を開けてディスプレイピクセル(または、Android用語では「表面」)に直接アクセスできるという意味で特別です-VideoViewはSurfaceViewのサブクラスです)。2 つの SurfaceView を互いに重ねることはできません。最初にピクセルを取得したもの (Surface) がそれを「所有」します。(SurfaceHolder.Callback.surfaceCreated() / surfaceDestroyed() を参照)
フレームワークが Surface の上に通常のビューの表示ビットを構成するため、SurfaceViewの上にある他のビューは機能します。構成するものが何もないため、別の VideoView (つまり、SurfaceView) でそれを行うことはできません。
<VideoView android:id="@+id/videoView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<VideoView android:id="@+id/videoView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
videoView2 の再生が開始されると、videoView1 の setvisibilty が非表示になります。その後、必要なときに表示することができます。
Thread
両方のビデオを制御するために使用します
このように、ビデオビュー b の上にビデオビュー a を追加できます。
parentview.removeview(a);
parentview.removviewe(b);
parentview.addview(a);
parentview.addview(b);
parentview.invalidate();
ティの仕事です。それが役立つことを願っています。
現時点でこれが役立つかどうかはわかりませんが、あなたが望むものに似たものを手に入れることができました...
SurfaceView の上に VideoView をネストする必要がありました。100% 重複しない限り、機能します。(つまり、私の surfaceview は画面全体で、videoview は画面のほんの一部です)
問題は、SurfaceView を構成できないため、最初にピクセルを取得したものが表示されるということです。直感的に、優先度の高いビューを XML 内の重要度の低いビューの後に Z オーダーすることができます。大きい方を重ねます。
これにより、小さい方 (私の場合はプレビュー ビュー) が前述の X * Y ピクセルを取得し、「背景」のサーフェスビュー (XML に従ってその上にあると想定されている) が残りを占めるという動作が発生します。より小さいサーフェスは無視されます。
これら 2 つのビューでストリームを再生するだけでよく、これら 2 つのコンポーネントによって生成されたクリック/イベントには反応しないため、これら 2 つのイベントの処理についてはよくわかりませんが、これに従えば、ルート - 大きなビューは、小さなビュー領域で行われたすべてのクリックをインターセプトします (XML によると上部にあるため)。そのため、作成時にプログラムで上部に移動する必要がある場合があります。
それが役に立てば幸い。
編集:ただし...一度だけ機能するようです。本当に進行中の作業です。アクティビティから戻ると、より大きなビューがすべてを主張するのを防ぐためにできることは何もありません:/