Избегайте повреждения Android VideoView при повороте назад в портрет - PullRequest
10 голосов
/ 29 июня 2011

Мне удалось написать ограниченный видеоплеер, способный просматривать файл .3gp из Интернета. Видео будет отображаться по центру на весь экран, сохраняя соотношение сторон видео. Кроме того, ротация не прерывает видео, которое продолжает воспроизводиться без проблем.

Все выглядит нормально, но ... в моем HTC Legend при повороте назад в портретное видео видео повреждено, и вместо отображения в полноэкранном режиме оно отображается с исходным размером пикселя. Но вращение снова в пейзаж работает и показывается отлично. Есть идеи почему? К сожалению, у меня нет больше оборудования для тестирования, и у меня закончились идеи для тестирования.

Полный исходный код примера можно получить по адресу https://github.com/gradha/Android-video-stream-rotation. Вот снимки экрана, на которых я открываю приложение, поворачиваюсь в альбомную ориентацию, касаюсь экрана, чтобы отобразить элементы управления видео, а затем поворачиваюсь назад к портрету, чтобы увидеть повреждение , video started ok in portrait

on landscape the video works fine too

but now going back to portrait always shows corruption

Ответы [ 2 ]

4 голосов
/ 05 октября 2012

В исходном коде на https://github.com/gradha/Android-video-stream-rotation. вы добавили комментарий:

Поскольку мы указали в AndroidManifest.xml, что мы хотим обработать нашей собственной ориентациейизменения, мы изменяем размер экрана в зависимости от портрета или ландшафта.

Из исходного кода AndroidManifest.xml

android:configChanges="orientation|screenSize"

Итак, если вы добавите этот атрибут в элемент деятельностив манифесте, я бы истолковал это как действие будет обрабатывать все изменения ориентации?не вы?

От разработчиков Android

Чтобы объявить, что ваша активность обрабатывает изменение конфигурации, отредактируйте соответствующий элемент активности в файле манифеста, включив в него android: атрибут configChanges ... еще

Так что вам нужно не необходимо:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
}

Я создал тестовый проект дляпроверьте, имеет ли это место:

Пример вращающегося видеопотока: https://github.com/TouchBoarder/RotatingVideoStream

Мой вывод: мне не нужно было переопределять «onConfigurationChanged» в действии, чтобы видео отображалось правильно в обоихкнижная и альбомная ориентация, а видео продолжает воспроизводиться при смене поворотов.

Не стесняйтесь улучшать и использовать код:)

0 голосов
/ 13 января 2013

Оказывается, весь мой тест был неверен.Вплоть до коммита, где я виню в простом примере с видеовизуалом, что он ошибался все было согласно книге.Однако я забыл строку android:configChanges="orientation", и добавление этой строки поверх ранее упомянутого коммита делает все без повреждения видео.

Я буду отмечать ответ hsigmond как действительный для предоставления тестового примера, который я мог сравнитьи выяснить истинную проблему.Вся моя работа вокруг этого с пользовательскими обработчиками ориентации и подклассом VideoView была неправильной и некорректной на основании вопроса Изменение ориентации Android VideoView с буферизованным видео .Не то чтобы что не так, я просто применил его неправильно (плюс в других ответах также упоминалось пропущенное android:configChanges).

...