У меня есть деятельность с именем ScreensActivity
, эта деятельность содержит GridLayout
.GridLayout SurfaceView дети накладываются друг на друга при изменении видимости их
Каждый из детей GridLayout
является обычным View
по имени ScreenView
.
ScreenView
состоит из SurfaceView
, который предназначен для воспроизведения видео с файла .MP4.
Это мнение иерархия вышеуказанных компонентов:
ScreensActivity
GridLayout
ScreenView
ScreenView
ScreenView
ScreenView
...
Ожидаемое поведение
То, что я пытаюсь сделать, это добавить поддержку для изменения «состояние» в ScreenView
в GridLayout
до "full-screen", исчезает (с использованием setVisibility(GONE)
) остальная часть ScreenView
, так что он заполнит все GridLayout
.
только один ScreenView
может одновременно находиться в «состоянии полноэкранного»
Текущее поведение
В настоящее время это работает только при попытке изменить «состояние» 1 ScreenView
в GridLayout
(что является ожидаемым поведением).
При попытке изменить «состояние» из 2-го ScreenView
и так далее, я сталкиваюсь следующее странное поведение (см visual GIF из приведенных ниже примеров):
При изменении ScreenView
«состояние» до " полноэкранный», он быть наложены другими ScreenView
-х, например:
- При изменении 2-го
ScreenView
„состояние“на„полный экран“, то первыйScreenView
наложения его. - При замене 3-го
ScreenView
«состояние» в «полный экран», как 1-й и 2-й «экраны наложения его, и так далее. - И так далее, пока изменение 9-
ScreenView
„состояние“ на "полный экран", все предыдущиеScreenView
«s обложи его.
Важное примечание
Когда я заменить SurfaceView
(внутри ScreenView
) с TextView
, например, изменение состояния «ScreenView
» на «полноэкранный режим» выполняется так, как ожидалось, поэтому представляется, что проблемный компонент, создающий это странное поведение, состоит из SurfaceView
, из которого состоит ScreenView
.
Сообщите мне, если добавление исходного кода поможет вам решить мою проблему.
Большое спасибо за помощь.
Вы лучше меняете свой подход, SurfaceViews отличаются от обычных видов, на самом деле они похожи на «дыру», заполненную базовым кодом. Вероятно, вы найдете всевозможные артефакты, даже разные устройства, если вы используете несколько обзоров поверхности, перекрывающихся поверхностных изображений и т. Д. Кроме того, ваше приложение будет потреблять много ресурсов. – rupps
@rupps, что вы предлагаете? – Eido95
Я не знаю, что предложить, так как вы, вероятно, сталкиваетесь с ограничениями низкоуровневого телефонного видеодрайвера. Я предлагаю вам попробовать другие устройства. Если вы видите другое поведение (я уверен, вы это сделаете), я бы просто отказался от этой идеи и попытался использовать только одно видное изображение (активное воспроизведение видео) и изменить остальное на изображение. Кроме того, вы можете попытаться физически перемещать предположительно скрытые изображения поверхности из экрана (поскольку Visibility.GONE связан с «нормальной» частью представления, которая выходит из синхронизации с реальной поверхностью) – rupps