Używam komponentu VideoView do odtwarzania wideo. Nie mogę wyczyścić ekranu VideoView po ręcznym wywołaniu funkcji stopPlayback(). Chciałbym zresetować VideoView, aby oryginalne tło było widoczne.Wyraźny wyświetlacz Android VideoView po stopPlayback()
- Odtwórz wideo w komponencie VideoView.
- Wybierz nowy film do odtworzenia.
- VideoView zatrzymuje się na ostatniej klatce pierwszego filmu, dopóki nie rozpocznie się następne wideo. Jeśli wystąpi błąd w następnym filmie, statyczny obraz z pierwszego filmu pozostaje w tym miejscu.
- Jeśli pozwolę, aby odtwarzanie wideo zakończyło się, ekran zostanie wyczyszczony.
Kod używam:
private VideoView videoViewer = null;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
if (videoViewer != null) {
videoViewer.setOnPreparedListener(new OnPreparedListener());
}
...
}
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (videoViewer != null) {
videoViewer.stopPlayback();
videoViewer.setVideoURI(Uri.parse("http://my_vido_url/playlist.m3u8"));
}
}
private class OnPreparedListener implements MediaPlayer.OnPreparedListener {
@Override
public void onPrepared(MediaPlayer mp) {
videoViewer.start();
}
}
Należy zauważyć, że na podstawie źródła VideoView.java, stopPlayback() wykonuje następujące działania na podstawowej MediaPlayer:
public void stopPlayback() {
if (mMediaPlayer != null) {
mMediaPlayer.stop();
mMediaPlayer.release();
mMediaPlayer = null;
}
}
Kiedy Robię to, kolejne odtwarzanie nadal pokazuje ostatnią klatkę poprzedniej. Jakieś pomysły, dlaczego tak się dzieje? – slhck
Rzeczywista klatka wideo jest rysowana na powierzchni "pod" VideoView. Ustawienie tła w VideoView spowoduje ukrycie ramki, ale jej nie skasuje.Po wyczyszczeniu tła stara ramka nadal tam jest. – William