0

Android 4.0 以降を搭載した電話のみで、他のサードパーティ製ライブラリはありません。

アプリケーションは、ActionBar のナビゲーション タブを使用します。タブの 1 つには、ソースからライブ ビデオをストリーミングする ICS のストック VideoView コントロールが含まれています。ユーザーがタブを切り替えて情報を表示するときに、VideoView を再生し続けたい (InformationView と呼びます)。

タブレットでは、画面サイズが大きく、VideoView を常に画面に表示しているため、この問題はありません。スマートフォンでは画面が小さいため、タブを使用する必要があります。

ビデオ フレームを描画するために、VideoView はおそらく可視サーフェスに依存していることを理解しています。ユーザーがタブを切り替えると、サーフェスは VideoView で使用できないため、自動的に停止します。

おそらく、InformationView と VideoView の両方を含む大きなスクロールビューを使用することで、これを回避できます。

それを強制的に再生し続ける方法はありますか (おそらく目に見えない表面に描画することによって)、または巨大なスクロールビューを使用して「タブ」の動作を模倣するサードパーティのライブラリがあるため、これ以上コードを記述する必要はありませんか?

これは、ここで説明した複数の VideoViews の問題とは異なることに注意してください: One videoview blocks by another videoview

4

3 に答える 3

0

解決策は、タブを切り替えるときに VideoView を含むフラグメントを非表示にすることです。したがって、常に「表面」のビデオビューを描画できます。

于 2012-11-08T17:58:17.397 に答える
0

VideoView と同じデフォルトをカスタマイズできますが、ホルダー サーフェス、oncreatSurface、onchangeSurface() を制御する必要があります。

于 2012-11-08T18:27:58.840 に答える
0

この概念のより良い実装は、ストックVideoViewウィジェットを使用しないことです。これは、実際には aSurfaceViewと a を組み合わせただけでありMediaPlayer、これら 2 つを切り離して個別に使用することです。アプリケーションが をMediaPlayer直接制御している場合、サーフェスが消えた後でもオーディオ トラックを再生し続けることができます。

自分ActivityまたはインスタンスFragmentの 1 つを にSurfaceHolder.CallbackアタッチするSurfaceViewと、サーフェスが描画に使用できるかどうかを知ることができます。MediaPlayerメソッドsetDisplay()とメソッドは、そのsetSurface()コールバックごとにビュー階層でビデオ サーフェスが使用可能になったときに、ビデオ サーフェスをアタッチおよびデタッチするためにアプリケーションで使用されます。

同様の目標を達成する独自の実装を考え出す際にVideoView役立つソース (リンク)を見つけることもできます。

于 2012-11-08T18:39:58.080 に答える