みんな。VideoView内に縦向きでビデオを表示する必要があるプロジェクトがありますが、ここ数週間、奇妙な問題が発生しています。また、この問題は、VideoViewにデータが初めてロードされたときにのみ発生することに注意してください。
これは、レイアウトの非常に簡略化されたバージョンです。
<RelativeLayout>
<RelativeLayout>
<VideoView /> <-- W:fill_parent, H:wrap_content
</RelativeLayout>
</RelativeLayout>
実際の問題についてですが、VideoViewに最初にデータが読み込まれると、その高さ/幅の両方が1秒未満(ローカルかストリーミングかに応じて最大3秒)で画面全体(パディングスペースを除く)に表示されます。次に、意図したサイズに魔法のように調整します。
ローカルに保存されていないビデオの方が時間がかかるので、問題はVideoViewがビデオをロードするのに時間がかかり、すぐに境界を正しく調整しないことに関係しているように感じます。そのため、画面全体に拡大してから突然ドロップします。適切なサイズに下げます。
さて、毎回そうしない理由は、ロードされるたびにVideoViewの同じインスタンスを使用しているためだと思います(SetContentViewではなくViewFlipperを使用しているため、新しいインスタンスを作成していません)。
ただし、同じ方法でデータをVideoViewにロードしているので、問題が解決しない理由がわかりません。そのため、なぜそれが間違っているのかという私の仮定が間違っていると思います。
今私が試したことのために:
私は、RelativeLayoutとVideoViewの両方について、fill_parentの幅とwrap_contentの高さから始めました。これは、この問題に最初に気付いた場所です。また、Eclipseのグラフィックレイアウトは、私が解決しようとしているこれらの設定と同じ問題を示しています。VideoViewは、画面全体に展開され、パディングはありません)。
XMLレイアウトの特定のピクセル寸法にレイアウトを強制して(ひどい、私は知っています)、ビデオが適切にロードされた後にビューの新しいLayoutParamsを定義して設定しようとしました。
新しいVideoViewを動的に作成し、ロード後にレイアウトに追加してみました。まだ運がない。
そして今、私はアイデアがありません...他の誰かがいくつか持っていますか?
そして、よろしくお願いします〜
編集:
当面の回避策として、VideoViewのonPreparedListener()を作成し、onPreparedListenerが起動されるまでビューを非表示のままにします。これで問題は解決したようですが、VideoViewが実行していることを実行している理由については、必ずしも修正方法だけでなく、もっと興味があります。
よろしくお願いします〜