今までで一番簡単だと思っていたものに完全に困惑しています。相対レイアウトのフレーム内でビデオを再生しようとしています。
アプリケーションは非常に特定のデバイス (Archos 101 インターネット タブ) でランドスケープ モードで実行することを意図しており、ビデオは非常に特定のサイズの 480x360 で事前にエンコードされていることに注意してください。
レイアウトはこちら
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!-- Background -->
<ImageView
android:layout_width="980dp"
android:layout_height="568dp"
android:src="@drawable/bg_video" />
<TextView
android:id="@+id/video_headtext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="73dp"
android:layout_marginLeft="255dp"
android:textColor="#FFFFFF"
android:textSize="16dp" />
<TextView
android:id="@+id/video_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:layout_centerHorizontal="true"
android:layout_marginTop="112dp" />
<VideoView
android:id="@+id/video_videocontainer"
android:layout_width="480dp"
android:layout_height="360dp"
android:layout_below="@id/video_title"
android:layout_marginTop="10dp"
android:layout_centerHorizontal="true" />
</RelativeLayout>
このコードを使用してビデオをロードします
player = (VideoPlayer) findViewById(R.id.video_videocontainer);
player.setVideoURI(videoUri);
コードは機能しますが、videoView が正しくフレーム内にある場合、ビデオ自体は画面上部のどこかで再生され、その一部のみが VideoView に表示されます。
ここで何が起こるかの例(これはデバッグ用の一時的なビデオです)。ここで同じ瞬間のビデオのスクリーンショット。
ご覧のとおり、VideoView にはビデオの一部のみが表示され、残りは黒で塗りつぶされています。
本当に単純なものが欠けていると確信していますが、何がまったくわからないのです。
前もって感謝します。
編集: VideoView を拡張し、このように onMeasure をオーバーライドする VideoPlayer クラスを作成しようとしました
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
setMeasuredDimension(480, 360);
}
public void changeVideoSize()
{
getHolder().setFixedSize(480, 360);
requestLayout();
invalidate();
}
しかし、それは少しも役に立ちません。
EDIT 2 : SurfaceView と MediaPlayer で試してみましたが、同じ結果です。Android で動画を再生する原理を理解していない気がします。ここでかなり行き詰まります。
EDIT 3:Samsung Galaxy HDで試してみましたが、ビデオはフレーム内に正しく表示されます。これはタブレットの問題なのか、それとも 2.2 の問題なのか?
編集 4: 2.2 で実行されている AVD は、ビデオを適切にレンダリングしません。4.1 を実行している AVD はそうします。これでだいぶ絞れると思います。