Объединение SurfaceView с другими представлениями, такими как TextView и кнопки - PullRequest
5 голосов
/ 26 октября 2010

Я совершенно новичок в программировании для Android (только что сделал несколько уроков / прочитал руководства для разработчиков и т. Д.) И, как и каждый новичок, я хочу сделать бесполезную игру: -).

В настоящее время я борюсь с разметкой разных видов. Подобно примеру, я создал класс, который расширяет SurfaceView и помещает его в FrameLayout. Вокруг этого SurfaceView я хочу, чтобы другие виды были похожи на Buttons & TextViews. Примерно так:

-----------------------------------------------
| TextView | SurfaceView           | TextView |
|          |                       |          |
------------                       ------------
|          |                       | TextView |
|          |                       |          |
|          |                       ------------
|          |                       | TextView |
|          |                       |          |
|          |                       ------------
|          |                       |          |
|          |                       |          |
-----------------------------------------------
| Button                             Button   |
-----------------------------------------------

Мне удалось сделать что-то подобное с FrameLayout и RelativeLayouts (наклеив TextViews по краям экрана), но я бы хотел лучше контролировать размер SurfaceView, так как это должен быть кратный по ширине и высоте объект (ы), я буду рисовать в нем. Я попытался установить layout_width и layout_height для некоторых значений dp, но когда я начинаю рисовать с 0,0, он все еще находится в самом верхнем левом углу (где TextView это ..).

Итак, какова лучшая практика для достижения макета, как указано выше? Используя какой макет? Или мне лучше нарисовать текст внутри функции draw() моего SurfaceView вместо этого?

1 Ответ

6 голосов
/ 18 октября 2012

Макеты - это правильный способ комбинировать содержимое OpengGL с кнопками, метками и другими типами объектов просмотра. Вы можете комбинировать макеты внутри других макетов ... так что вы можете создавать свой экран шаг за шагом, комбинируя линейные макеты или что угодно.

Например, вы можете использовать Относительное расположение для настройки кнопок (b1, b2) и остальной части экрана:

+-----------+
|  Zone 1   |
+-----+-----+
| b1  | b2  |
+-----+-----+

Тогда внутри Зоны 1 вы можете использовать горизонтальную линейную компоновку для 3 основных столбцов

+----+----+----+
| c1 | c2 | c3 |
+----+----+----+

Внутри c2 вы можете разместить SurfaceView, а в c1 текстовую метку

Внутри c3 будет новый вертикальный линейный макет для отображения текстовых меток.

+----+
| t1 |
+----+
| t2 |
+----+
| t3 |
+----+
...