2012-10-10 40 views
6

我完全沉迷於某些我認爲會是最簡單的事情。我試圖在一個相對佈局的框架內播放視頻。在屏幕的一部分上播放視頻

請注意,該應用程序旨在以橫向模式在非常特定的設備(愛可視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中。

舉例發生什麼here(這只是一個用於調試的臨時視頻)。 同一時刻視頻的屏幕截圖here

正如您所看到的,VideoView只顯示部分視頻,其餘部分用黑色填充。

我很確定我錯過了一件非常簡單的事情,但我無法弄清楚什麼。

在此先感謝。

編輯:我曾嘗試寫擴展VideoView和覆蓋onMeasure這樣

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

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

    requestLayout(); 
    invalidate(); 
} 

一個VideoPlayer類,但它並不能幫助一個位。

編輯2:嘗試使用SurfaceView和MediaPlayer,結果相同。我有一種感覺,我不明白在Android上播放視頻的原理。在這裏很困難。

編輯3:我試過三星Galaxy HD,視頻在框架內正確顯示。我想知道這是平板電腦的問題,還是2.2?

編輯4:在2.2下運行的AVD不能正確渲染視頻。 AVD正在運行4.1。我想這會讓它縮小一點。

回答

3

我有一個類似的問題,有一個特定的設備(2.1)太高配置文件要處理,它工作正常的android 4.0。

除此之外,我使用的是SurfaceView,訣竅是將監聽器添加到MediaPlayer的事件(特別是setOnVideoSizeChangedListener)和鏈接到mediaplayer事件的表面的回調。

+0

我已經重寫一切videoview,現在我面對一些真正怪異。視頻在SurfaceView之外播放,就像使用VideoView一樣。只有它不會被裁剪,並顯示在一切之上。即使當我使用'setDisplay(null)',視頻仍然顯示! –

+0

是否已經實現了曲面支架回調並鏈接了它的事件? – petrumo

+0

在跟隨您的領先後,我設法讓視頻更好地定位。這並不是最佳的,我仍然不敢相信在視圖中放置視頻是如此困難,但現在它仍然有效。謝謝! –

0

將VideoView屬性setZOrderOnTop設置爲true,看看它是否有效。 舉例來說,如果我有一個名爲qvideo具有SurfaceView

qvideo.setZOrderOnTop(true); 
+0

不幸的是,這並沒有改變任何東西。 –