Сегодня у меня возникла та же проблема, и я нашел очень плохой и хакерский обходной путь для этой неприятной проблемы: я понял, что можно установить цвет фона / рисование на VideoView
, который накладывается на поверхность видео и делает ее полностью скрытой.Это работает только тогда, когда базовое видео все еще воспроизводит , а не когда оно остановлено (ни когда оно закончилось нормально, ни когда был вызван stopPlayback()
), в противном случае вы снова увидите черное мерцание.Фон также не должен быть установлен в начале, иначе видео будет полностью скрыто с самого начала.
Так что единственным логичным шагом для меня было опубликовать отложенное событие непосредственно перед тем, как я запустил видео - иПоскольку я знаю длину видео, я позволил этому событию произойти всего за несколько миллисекунд, прежде чем оно закончится нормально.Я сделал скриншот последнего кадра в VLC, а затем смешал его так:
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();
}
Этого, однако, было недостаточно, потому что когда видео фактически закончилось, у меня все еще было короткое мерцание черного экрана, поэтому ятакже нужно было установить неподвижное изображение в качестве фона контейнера, который содержал видео (в моем случае это был макет упражнения):
<?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>
Это действие отображается в полноэкранном режиме, а видео - (в основном,) масштабируется до общего размера экрана (экран 1024x600, видео 960x640).Я говорю в основном , потому что по какой-то неизвестной причине фоновое изображение макета смешивается примерно на 10 пикселей сверху.Это был последний взлом, который мне пришлось применить, чтобы заставить его работать - переместите контейнер видео -10dip
в пустоту сверху.
Теперь это выглядит потрясающе на моей Galaxy Tab, я не смею проверять егона телефоне SGS2, хотя ...