我正在使用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被调用时,它可以被附加。 –