Самый простой способ, которым я могу думать о том, чтобы использовать FrameLayout
:
<FrameLayout android:layout_width="match_parent" android:layout_height="match_parent">
<FrameLayout
android:id="@+id/overlay"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<ImageView
android:id="@+id/yourImageView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
Здесь R.id.yourImageView
ваш взгляд изображение с картой. R.id.overlay
- это ViewGroup (FrameLayout кажется простейшим, но вы можете использовать любой тип, который вы хотите), в котором программно вы можете добавлять и размещать свои маркеры в виде объектов View. Маркеры также могут быть еще одним ImageViews с загруженными изображениями.
Сделка с FrameLayout заключается в том, что все ее дети лежат друг над другом, поэтому таким образом вы можете использовать R.id.overlay
в качестве дополнительного слоя над R.id.yourImageView
.
Если вы хотите иметь зум/панорамирование, вы должны присоединить TouchListener
и каким-то образом управлять обоими слоями одновременно, но это еще одна тема.
не имеют большого опыта работы с FrameLayout, но за то, что я пробовал, как я могу быть точным в позиции маркера, если у меня есть только позиции в макете: гравитация (верхняя, нижняя, левая, правая)? Заранее спасибо –
Когда вы добавляете детей в макет кадра, они фактически расположены друг над другом (очень похоже на слои). Это не то же самое, что в линейной компоновке или относительной компоновке, где дети располагаются бок о бок. –
Для размещения детей внутри макета рамки вы можете использовать их paddings (или поля), чтобы добавить левые и верхние смещения (справа и внизу я думаю, что в данном случае это не очень практично). Конечно, чтобы контролировать их размер, вы можете использовать layout_width и layout_height. –