Android: SurfaceView и Z-Level вопрос - PullRequest
2 голосов
/ 12 января 2011

У меня есть FrameLayout, содержащий сначала SurfaceView, а затем RelativeLayout, который, в свою очередь, содержит различные кнопки и TextView.

На холсте SurfaceView я рисую множество растровых изображений, а также через события касания и движенияя позволяю пользователю перетаскивать их.

Эти растровые изображения при перетаскивании по проходу под кнопками и т. д., которые находятся внутри RelativeLayout.

Теперь это мое (возможно,ошибочно) понимая, что «Z-уровень» SurfaceView или того, что у него есть, соответствует ему, совершенно не связан с фактическим Z-уровнем остальной части макета.Это тот случай?Если так, как я могу обойти это так, чтобы перетаскиваемые растровые изображения рисовались поверх других видов?Или каким-то другим способом я могу реализовать полноэкранный холст, но при этом мои кнопки и т. Д. Не действуют как элементы управления наложением.

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

Можно ли поменять местами порядок RelativeLayout и SurfaceView внутри FrameLayout, а затем сделатьфон холста прозрачный?Если так, то как?Будут ли события касания все еще «проваливаться» на кнопки внизу?

Спасибо, что терпите меня, я знаю, что я немного болтун.

Ответы [ 2 ]

1 голос
/ 18 апреля 2014

SurfaceView не работает таким образом.

SurfaceView состоит из двух частей: части «вид» и части «поверхность». Часть «вид» представляет собой прозрачное отверстие, которое размечено с другими элементами вида и наложено на слой вида. Часть «поверхность» - это совершенно отдельный слой, который будет располагаться и масштабироваться в соответствии с частью «вид» и компоноваться с помощью компоновщика системы, а не приложения.

Вы можете управлять Z-порядком слоя "Surface" при первом создании SurfaceView, но он будет выше или ниже всех элементов View. Он не может быть выше некоторых видов и ниже других, потому что они являются полностью независимыми слоями. «Поверхностный» слой не улавливает входные события, поэтому его размещение сверху (через SurfaceView#setZOrderOnTop()) не влияет на фокус ввода.

Для API 14+ вы можете использовать TextureView, который ведет себя в более удобном для просмотра виде.

Редактировать: для получения полной информации см. гораздо более длинное объяснение .

0 голосов
/ 12 января 2011

Можете ли вы уточнить немного больше?В вашем SurfaceView у вас есть назначенный фон?Если нет, то вы также можете использовать AbsoluteView, если хотите просто перетаскивать фигуры.Если фон отсутствует, вы должны иметь возможность поместить весь вид выше имеющегося у вас RelativeView и иметь только различные кнопки и тому подобное, нарисованные на виде сверху, который можно перетаскивать и оставаться над всем остальным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...