我正在使用 VideoView 来显示视频流。因为我需要将 MediaController 附加到视图本身,并且我想防止由 videoview 引起的黑屏闪烁。我已经在我的 Nexus 7 上测试了以下代码,效果很好。但现在我在我的 SGS2 上对其进行了测试,出于某种原因,从未调用过 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 方法中进行了测试,但这会导致屏幕闪烁问题并且未连接媒体控制器。此行为也由 LogCat 中的日志信息显示,ONPREP 标记显示,但从不显示 ONSIZECHANE。在我的N7上都显示,很明显是背景颜色变了。
这是设置和启动视频的代码:
videoview.setOnPreparedListener(MainActivity.this);
mc = new MediaController(MainActivity.this);
mc.setMediaPlayer(videoview);
videoview.setVideoURI(videourI);
videoview.start();
那么为什么在一台设备上调用它而不在另一台设备上调用呢?
编辑:在我的 Note 2 上对其进行了测试,与 SGS2 上的问题相同。