2017-02-21 6 views
1

У меня есть деятельность с именем 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.

Сообщите мне, если добавление исходного кода поможет вам решить мою проблему.

Большое спасибо за помощь.

+0

Вы лучше меняете свой подход, SurfaceViews отличаются от обычных видов, на самом деле они похожи на «дыру», заполненную базовым кодом. Вероятно, вы найдете всевозможные артефакты, даже разные устройства, если вы используете несколько обзоров поверхности, перекрывающихся поверхностных изображений и т. Д. Кроме того, ваше приложение будет потреблять много ресурсов. – rupps

+0

@rupps, что вы предлагаете? – Eido95

+0

Я не знаю, что предложить, так как вы, вероятно, сталкиваетесь с ограничениями низкоуровневого телефонного видеодрайвера. Я предлагаю вам попробовать другие устройства. Если вы видите другое поведение (я уверен, вы это сделаете), я бы просто отказался от этой идеи и попытался использовать только одно видное изображение (активное воспроизведение видео) и изменить остальное на изображение. Кроме того, вы можете попытаться физически перемещать предположительно скрытые изображения поверхности из экрана (поскольку Visibility.GONE связан с «нормальной» частью представления, которая выходит из синхронизации с реальной поверхностью) – rupps

ответ

0

Я понял это, заменив SurfaceView на TextureView, который ведет себя точно так, как я ожидал, что он будет себя вести.

Смежные вопросы