我正在使用VideoView顯示視頻流。因爲我需要將MediaController附加到視圖本身,並且我想防止由videoview引起的黑屏閃爍。我在我的Nexus 7上測試了下面的代碼,像魅力一樣工作。但是現在我在我的SGS2上測試了它,由於某種原因,OnVideoSizeChanged從未被調用過。OnVideoSizeChanged從未呼叫
@Override
public void onPrepared(MediaPlayer mp) {
// TODO Auto-generated method stub
Log.i("ONPREP", "called");
mp.setOnVideoSizeChangedListener(new OnVideoSizeChangedListener() {
@Override
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
videoview.setMediaController(mc);
mc.setAnchorView(videoview);
videoview.setBackgroundColor(Color.TRANSPARENT);
Log.i("ONSIZECHANGE", "called");
}
});
}
視頻播放像它應該,我通過移除OnVideoSizeChangedListener,只是將代碼中的onPrepared方法測試這一點,但是這是帶回屏幕閃爍的問題,離開的MediaController獨立的。 LogCat中的日誌信息也會顯示此行爲,ONPREP標記顯示但不會顯示ONSIZECHANGE。在我的N7上都顯示,顯然導致背景顏色改變。
這是設置並啓動視頻代碼:
videoview.setOnPreparedListener(MainActivity.this);
mc = new MediaController(MainActivity.this);
mc.setMediaPlayer(videoview);
videoview.setVideoURI(videourI);
videoview.start();
那麼,爲什麼要叫一個設備上,而不是其他?
編輯: 測試了我的注意事項2,同樣的問題在SGS2。
不會只用OnPreparedListener工作的東西是setAnchorView方法。它不附加到視頻視圖本身。當OnVideoSizeChanged被調用時,它可以被附加。 –