2014-01-30 4 views
2

Просто общий вопрос: у меня есть фрагмент, который имеет SurfaceView. Когда я скрою фрагмент с помощью FragmentManager, SurfaceView все еще отображается.Почему SurfaceView в фрагменте все еще отображается, когда фрагмент скрыт?

Я нашел обходное решение, просто установив View на INVISIBLE/GONE/VISIBLE, когда фрагмент скрыт/виден - но мне интересно: почему SurfaceView все еще отображается? Это потому, что SurfaceView в основном представляет собой «пробитую дыру», а это значит, что это не в макете-иерархии фрагмента и, следовательно, нельзя скрыть, когда макет скрыт?

Что скрывает процедура, выполняемая с фрагментом? Разве это просто заставляет созданное представление исчезнуть?

ответ

3

A SurfaceView создает совершенно отдельный графический слой, составленный системой. «Отверстие» включено в иерархию представлений, поэтому макет выходит правильно. Есть много вещей, которые не совсем работают, когда задействован SurfaceView.

A TextureView, напротив, на самом деле является частью самого Представления и будет действовать соответствующим образом. Недостатком является то, что есть дополнительный шаг, на котором пиксели копируются из буфера вне экрана в представление. Это делается на GPU, так что это очень быстро, но если вы пытаетесь анимировать большую часть экрана со скоростью 60 кадров в секунду или свести к минимуму утечку батареи во время воспроизведения полнометражного фильма, то SurfaceView может быть лучшим выбором.

Если вы используете TextureView, это может сделать вашу жизнь немного проще.

+0

Благодарим вас за ответ! Я бы использовал TextureView, но у afaik нет никакого «GLTextureView» для Android Api> 8 (ну, может быть, есть какой-то открытый источник, но я скорее придерживаюсь «проверенного» кода) – Frame91

+0

Ah. «TextureView» вообще нет, до API 14, поэтому, если вам нужно запустить на 2.x, это не вариант. Согласно http://developer.android.com/about/dashboards/index.html, вы потенциально достигнете еще 23% или около того, ориентируясь на более старый уровень API. – fadden

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