7

私は Android 用のマルチメディア ビデオ処理アプリケーションに取り組んでいますが、少し問題が発生しました。FragmentPagerAdapterビデオ処理のさまざまなステップのために、内部に多数の異なるフラグメントを持つクラスを使用しています。

私の最初のものには、さまざまな再生コントロールとともに、それをフィードするaと aがFragment含まれています。私の問題は、フラグメント 1 (SurfaceView を使用) からフラグメント 2 (現時点では空) にスワイプすると発生します。まだ を呼び出していない場合、何も異常は発生せず、通常どおりフラグメント間をスワイプできます。ただし、呼び出すと、次の にスワイプすると、 をアイドル状態にしてフレームを にフィードしていなくても、画面全体が点滅し始めます。これを止める唯一の方法は、3 番目にスワイプしてビューを破棄するか、ホームまたは戻るボタンでアプリケーションを終了してビューを破棄することで、含まれているビューと一緒にサーフェスを破棄することです。SurfaceViewMediaPlayerstart()start()FragmentMediaPlayerSurfaceViewFragmentFragmentPagerAdapterFragment

SurfaceViewレンダリング スレッドが何らかの理由でメインの UI スレッドに干渉している可能性があることを除けば、これがなぜ起こっているのか、私の人生では理解できません。LogCat にも何も異常が表示されないので、少し行き詰まっています。テストハードウェアとしてAndroid 4.1を使用してGalaxy Nexusを実行しています。

どんな助けでも大歓迎です!

JT

更新:setPrimaryItem()のメソッドをオーバーライドして、ビデオ プレーヤーが表示されなくなったときにを階層からFragmentPagerAdapter削除するメソッドを呼び出すことで(コンテナーを使用して)、アクティブなときにを元に戻すことで、今のところ回避策を見つけることができました。また。残念ながら、これが発生するまでにはまだ少し時間がかかるため、追加の考えがある場合は、感謝します!SurfaceViewremoveView()LinearLayoutFragmentSurfaceView

4

1 に答える 1

4

Android デベロッパー ブログから

このウィジェット [SurfaceView] は、アプリケーションのウィンドウの背後に配置される新しいウィンドウを作成することによって機能します。次に、アプリケーションのウィンドウに穴を開けて、新しいウィンドウを表示します。

SurfaceView のコンテンツはアプリケーションのウィンドウに存在しないため、効率的に変換 (移動、スケーリング、回転) することはできません。これにより、ListView または ScrollView 内で SurfaceView を使用することが難しくなります。

解決策は、4.0 以降用にビルドしている場合は TextureView を使用することです。TextureView を使用してビデオを表示することに興味がある場合は、このスレッドが役立つ可能性があります

于 2013-02-14T04:52:04.807 に答える