Hoy tuve el mismo problema y encontré una solución muy mala y hacky para este desagradable problema: me di cuenta de que se puede establecer un color de fondo/dibujable en el VideoView
que se funde sobre la superficie de video y lo oculta por completo. Esto solo funciona aunque el video subyacente sigue siendo jugando a, no cuando se detiene (ni cuando terminó normalmente ni cuando se llamó a stopPlayback()
), de lo contrario volvería a ver un parpadeo negro. El fondo tampoco debe establecerse al principio, de lo contrario, el video estaría completamente oculto desde el principio.
Así que el único paso lógico para mí fue publicar un evento retrasado justo antes de iniciar el video, y como conozco la duración del video, dejo que este evento ocurra solo unos pocos milisegundos antes de que termine normalmente.Me tomó una captura de pantalla de la última trama de VLC y después se mezcla así:
private void startVideo()
{
introVideo.setBackgroundDrawable(null);
introVideo.postDelayed(new Runnable() {
public void run()
{
if (!introVideo.isPlaying())
return;
introVideo.setBackgroundResource(R.drawable.video_still_image);
// other stuff here, for example a custom transition to
// another activity
}
}, 7500); // the video is roughly 8000ms long
introVideo.start();
}
Sin embargo, esto no fue suficiente, ya que cuando el video en realidad terminó, yo todavía tengo un breve parpadeo de la pantalla negro, así que también tenía para establecer la imagen fija como fondo del recipiente que contenía el video (en mi caso fue el diseño de la actividad):
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/video_still_image">
<VideoView android:id="@+id/introVideo"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentRight="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_marginTop="-10dip" />
</RelativeLayout>
Esta actividad se representa en pantalla completa y el video es (en su mayoría) a escala en el tamaño total de la pantalla (pantalla 1024x600, video 960x640). Digo en su mayoría, porque por alguna razón desconocida, la imagen de fondo del diseño se mezcla para aproximadamente 10px en la parte superior. Este fue el último truco que tuve que aplicar para que funcione: mueva el contenedor de video -10dip
al vacío en la parte superior.
Esto ahora se ve impresionante en mi Galaxy Tab, que no se atreven a probarlo en el teléfono SGS2, aunque ...
favor pegar algunas capturas de pantalla. –
el flash negro ... realmente desagradable :( –
Solución simple se encuentra en: http://stackoverflow.com/questions/9765629/android-videoview-black-screen/16302973#16302973 – user517708