Android - представления, наложенные на последний кадр полноэкранного видео, перерисовываются неправильно при включении и выключении экрана - PullRequest
19 голосов
/ 08 февраля 2012

У меня есть видео, которое воспроизводится в портретном режиме. В конце видео мне нужно отобразить некоторые виды. Пока все отлично работает.

У меня, однако, есть проблема, когда представления, которые находятся за последним кадром видео, не перерисовываются должным образом при возврате к занятию после выключения экрана, затем снова включения и разблокировки экрана.

Что я наблюдаю, так это то, что когда экран снова включается, и я разблокирую. Мои видео и изображения сначала выводятся за пределы полноэкранного режима (при этом отображается строка состояния), затем экран переходит в полноэкранный режим, сдвигая все виды вверх и вызывая искажения.

Похоже, что при переходе в полноэкранный режим после рендеринга представления выходят за пределы своих окон просмотра.

Я действительно озадачен тем, как предотвратить это.

Вот проект песочницы на github , чтобы не делать этот пост полным кода.

Базовая настройка проекта:

Действие фрагмента имеет вид видео и вид кнопки на его макете. Затем он добавляет фрагмент в контейнер contentView. ContentView исчезает за 1 секунду до окончания воспроизведения видео.

Все работает гладко, и проблема в том, чтобы вернуться в приложение после включения и выключения экрана.

Кроме того, иногда видео просто полностью выпадает, и на черном фоне остаются виды.

Заранее благодарим за любую помощь, которую вы можете оказать.

proper rendering of views over video

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

artifacted image

Ответы [ 3 ]

3 голосов
/ 05 апреля 2012

вместо того, чтобы запретить отключение экрана, вы можете выбрать получение события, когда пользователь разблокирует клавиатуру после пробуждения телефона.

В этот момент может быть хорошей идеей позвонить View.invalidate в обоих ваших представлениях, это должно вызвать перерисовку.Цепочка отрисовки очень ненадежна, когда экран блокировки открыт, потому что ваше приложение технически видно, прямо под экраном блокировки.

    registerReceiver(new BroadcastReceiver() {
        @Override
        public void onReceive(Context ctx, Intent intent) {
            if(intent.getAction().equals(Intent.ACTION_USER_PRESENT))

        }
    }, new IntentFilter(Intent.ACTION_USER_PRESENT));
0 голосов
/ 14 марта 2012

может быть способ предотвратить отключение экрана на 1-м месте, так как это будет хорошо для решения ваших проблем с перерисовкой, надеюсь, это поможет.

0 голосов
/ 13 февраля 2012

Похоже, что наложение было смещено на панель контроллера.
Не думаете ли вы, что на него повлияла область контроллера (play / pause / ff / rew + progress)?

...