2012-08-04 59 views
2

100%。通常,Android VideoView不顯示視頻,音頻正在播放。我怎樣才能獲得的視頻顯示的我使用單聲道的Android時間

我已經通過所有的職位我可以找到關於使用VideoView並不能找到答案倒。我已經轉向使用帶有MediaPlayer的SurfaceView,並且沒有運氣。

我想要一個視頻在用戶未觸摸屏幕一段時間後開始播放,所以我有一個FrameLayout可以保存VideoView,並且當我希望視頻顯示時可以看到它。

當我開始播放視頻,它通常不顯示(時間約80%),但音頻開始播放。如果你觸摸屏幕,視頻就會出現。我嘗試了不同的視頻(.mp4和.3gp),但由於視頻實際上是在您觸摸屏幕後顯示的,因此我懷疑這是其他情況。

我有同樣的結果嘗試此一對夫婦的設備,儘管他們是從同一製造商。他們都是Coby設備(一個7英寸和另一個9.7英寸),並且正在運行Android 4.0。我的目標是Android 2.3 API。

這裏是我的xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 

    ... A bunch of controls ... 

<FrameLayout 
     android:id="@+id/videoViewBack" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:background="#FF000000" 
     android:visibility="gone"> 
    <VideoView android:id="@+id/videoView" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_gravity="center" 
       android:visibility="visible"/> 
</FrameLayout> 
</LinearLayout> 

和我的函數來啓動視頻看起來是這樣的:

 private void StartVideo() 
    { 

     RequestedOrientation = ScreenOrientation.SensorLandscape; // Force into landscape so the video looks good 

     FrameLayout vidBack = FindViewById<FrameLayout>(Resource.Id.videoViewBack); 
     vidBack.Visibility = ViewStates.Visible; 

     VideoView vid = FindViewById<VideoView>(Resource.Id.videoView); 
     vid.SetOnTouchListener(this); 
     vid.SetOnCompletionListener(this); 
     vid.SetVideoPath(_attractFile); 
     vid.SetMediaController(new MediaController(this)); 
     vid.RequestFocus(); 
     vid.Start(); 
    } 

我也試圖將開始()調用在OnPreparedListener但沒有幫助。

我拉出我的頭髮,並希望有人知道什麼愚蠢的事情,我忘了做。

編輯:

的理論,這個問題是有關在佈局傳遞不是大小的視頻正確,我做這似乎已經修正了該問題下面。但我不是100%肯定,爲什麼,或者如果它只是戳果凍

在我加入OnPrepared處理程序:

View mainScreen = FindViewById<View>(Resource.Id.MainScreen); 
mainScreen.requestLayout(); 
mainScreen.postInvalidateDelayed(1000); 
mainScreen.postInvalidate(); 

其中mainScreen是我的XML主要的FrameLayout。 PostInvalidate在大部分時間修復了它,添加PostInvalidateDelayed修復了它100%的時間(我認爲:))。

思考,爲什麼這個工程?

回答

0
@Override 
public void surfaceCreated(final SurfaceHolder holder) { 
    mPlayer.setDisplay(holder); // 指定SurfaceHolder 

    gameActivity.handler.post(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       mPlayer.prepare(); 
      } catch (IllegalStateException e1) { 
      } catch (IOException e1) { 
      } 
     } 
    }); 
} 
0

試試這個:

videoView.setZOrderOnTop(true); 
相關問題