Pracuję z VideoView, aby wyświetlić strumień wideo. Ponieważ potrzebuję MediaController do dołączenia do samego widoku i chcę zapobiec migotaniu czarnego ekranu spowodowanemu przez podgląd wideo. Przetestowałem poniższy kod na moim Nexusie 7, zadziałało jak czar. Ale teraz testowałem go na SGS2 iz jakiegoś powodu OnVideoSizeChanged nigdy nie jest wywoływany.Funkcja OnVideoSizeChanged nigdy nie była wywoływana
@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");
}
});
}
odtwarzania wideo tak jak powinien, ja testowałem to przez usunięcie OnVideoSizeChangedListener i tylko wprowadzenie kodu w metodzie onPrepared, ale to jest przywrócenie problem migotania ekranu i pozostawia mediacontroller przyłączone. To zachowanie jest również pokazywane przez informacje Log w LogCat, tag ONPREP pokazuje, ale nigdy ONSIZECHANGE. Na moim N7 oba pokazują, oczywiście powodują zmianę koloru tła.
Jest to kod, który ustawia i zaczyna się film:
videoview.setOnPreparedListener(MainActivity.this);
mc = new MediaController(MainActivity.this);
mc.setMediaPlayer(videoview);
videoview.setVideoURI(videourI);
videoview.start();
Więc dlaczego to się nazywa na jednym urządzeniu, a nie inny?
Edytuj: Testowałem to w mojej notatce 2, w tym samym numerze co na SGS2.
Rzeczą, która nie działa tylko przy użyciu OnPreparedListener jest metoda setAnchorView. Nie jest dołączony do samego obrazu wideo. Po wywołaniu OnVideoSizeChanged można go dołączyć. –