Android. Представления, наложенные на последний кадр полноэкранного видео, не перерисовываются правильно при включении и выключении экрана.
У меня есть видео, которое воспроизводится в портретном режиме. В конце видео мне нужно отобразить некоторые виды. Пока это работает.
Однако у меня есть проблема, когда виды, которые находятся над последним кадром видео, неправильно перерисовываются, когда возвращаются к активности после выключения экрана, затем снова включаются, а затем разблокируют экран.
То, что я наблюдаю, это то, что когда экран возвращается и я разблокирую. Мое видео и изображения сначала отображаются вне полноэкранного режима (при этом все еще отображаются строки состояния), тогда экран переходит в полноэкранный режим, сдвигая все виды вверх и вызывая артефакты.
Похоже, что взгляды смещаются из границ их взглядов путем перехода к полноэкранному режиму после их рендеринга.
Я действительно зациклен на том, как предотвратить это.
Вот проект sandbox на github, чтобы не допустить, чтобы это сообщение было заполнено кодом.
Базовая настройка для проекта такова:
Активность фрагмента имеет вид видео и вид кнопки на макете.
Затем он добавляет фрагмент в контейнер contentView. ContentView исчезает за 1 секунду до окончания воспроизведения видео.
Все работает плавно, и проблема заключается в возврате обратно в приложение после включения и выключения экрана.
Кроме того, иногда видео просто выпадает полностью, оставляя взгляды сидящими на черном фоне.
Заранее благодарим за любую помощь, которую вы можете предоставить.
![proper rendering of views over video]()
Здесь артефакт, который происходит, когда вы выключаете экран, снова включаете и разблокируете.
Заметьте, что мне пришлось сфотографировать его. В DDMS инструмент скриншота видит изображения правильно.
![artifacted image]()
Ответы
Ответ 1
а не для предотвращения выключения экрана, вы можете выбрать, чтобы получить событие, когда пользователь разблокирует блокировку клавиатуры после пробуждения телефона.
В этот момент было бы неплохо вызвать 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));
Ответ 2
Похоже, что макет наложения был сдвинут панелью управления.
Разве вы не думаете, что это повлияло на область управления (play/pause/ff/rew + progress)?
Ответ 3
может быть способ предотвратить выключение экрана в 1-м месте, так как это будет хорошим решением ваших проблем с повторением, надеюсь, что это поможет.