2012-10-10 15 views
6

私は今までに一番簡単なものと思っていたものを完全に切り詰めました。私は相対的なレイアウトでフレーム内のビデオを再生しようとしています。画面の一部でビデオを再生する

アプリケーションは、ランドスケープモードの非常に特定のデバイス(Archos 101インターネットタブ)上で動作するようになっており、ビデオは480x360の非常に特定のサイズでプリエンコードされていることに注意してください。サイズ。ここで

は、私はこのコード

player = (VideoPlayer) findViewById(R.id.video_videocontainer); 
player.setVideoURI(videoUri); 

を使用してビデオコードは動作しますが、videoViewは、フレームの内側に正しくありながら、映像自体がどこかで演じるロードレイアウト

<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> 

です画面上部に表示され、その一部だけがVideoViewに表示されます。

何が起こるかの例here(これはデバッグ用の一時的なビデオです)。 同じ瞬間のビデオのスクリーンショットhere

ご覧のとおり、VideoViewは動画の一部のみを表示し、残りは黒で塗りつぶします。

私は本当にシンプルなものが欠けているとは思っていますが、何が何であるかは分かりません。

ありがとうございます。

編集:私はVideoViewを拡張し、この

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
{ 
    setMeasuredDimension(480, 360); 
} 

public void changeVideoSize() 
{ 
    getHolder().setFixedSize(480, 360); 

    requestLayout(); 
    invalidate(); 
} 

ようonMeasure上書きされます。しかし、それは単一のビットを助けないVideoPlayerクラスを書いて試してみました。

EDIT 2:SurfaceViewとMediaPlayerを試してみました。同じ結果です。私はAndroidでビデオを再生するという原則を理解していないと感じています。ここでかなり邪魔になる。

EDIT 3:Samsung Galaxy HDで試したところ、ビデオはフレーム内に正しく表示されています。私はこれがタブレットの問題であるのか、それとも2.2であるのだろうか?

編集4:2.2未満で動作するAVDは、ビデオを適切にレンダリングしません。 4.1を実行しているAVDはそうです。私はそれを少し狭めると思う。

答えて

3

私は、その特定のデバイス(2.1)が扱える高すぎるプロファイルを持っていたビデオでも同様の問題があり、アンドロイド4.0では問題なく動作しました。

これ以外にもSurfaceViewを使用していますが、特にMediaPlayer(setOnVideoSizeChangedListener)のイベントにリスナーを追加し、mediaplayerイベントにリンクされたサーフェスへのコールバックを追加するというトリックがありました。

+0

qvideoと呼ばれるvideoviewを持っている場合、例えば 私はSurfaceViewですべてを書き換えてきたし、今は本当に奇妙な何かに直面しています。ビデオは、VideoViewの場合と同様に、SurfaceViewの外で再生されます。それだけが切り取られず、すべての上に表示されます。 'setDisplay(null)'を使用しても、ビデオはまだ表示されます! –

+0

サーフェスホルダーのコールバックを実装し、イベントをリンクしましたか? – petrumo

+0

私は、あなたのリードに続いてビデオを少し上手く動かすことができました。最適ではないし、ビュー内にビデオを配置するのが難しいとはまだ信じられないが、今のところうまくいく。ありがとう! –

0

VideoView属性setZOrderOnTopをtrueに設定し、それが機能するかどうかを確認します。私は

qvideo.setZOrderOnTop(true); 
+0

残念ながら、それは何も変わりません。 –

関連する問題