Я работаю с VideoView для показа видеопотока. Потому что мне нужно, чтобы MediaController был привязан к самому представлению, и я хочу предотвратить появление мерцания на черном экране, вызванное видеоизображением. Я тестировал приведенный ниже код на своем 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, он может быть присоединен. –