2015-09-28 4 views
1

Я уже искал по этому вопросу, и ответы были не очень ясными, что является лучшим способом достичь этого без использования растрового изображения.Каков наилучший способ добавить маркер/вывод на изображение?

Я хочу добавить различные маркеры/контакты по изображению, например, ImageView без использования растрового изображения.

Цель состоит в том, чтобы иметь большое изображение (например, внутреннюю карту), которое я могу масштабировать/панорамировать, и мне нужно жестко кодировать все эти маркеры над ним, как места.

Заранее спасибо.

ответ

0

Самый простой способ, которым я могу думать о том, чтобы использовать 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 и каким-то образом управлять обоими слоями одновременно, но это еще одна тема.

+0

не имеют большого опыта работы с FrameLayout, но за то, что я пробовал, как я могу быть точным в позиции маркера, если у меня есть только позиции в макете: гравитация (верхняя, нижняя, левая, правая)? Заранее спасибо –

+0

Когда вы добавляете детей в макет кадра, они фактически расположены друг над другом (очень похоже на слои). Это не то же самое, что в линейной компоновке или относительной компоновке, где дети располагаются бок о бок. –

+0

Для размещения детей внутри макета рамки вы можете использовать их paddings (или поля), чтобы добавить левые и верхние смещения (справа и внизу я думаю, что в данном случае это не очень практично). Конечно, чтобы контролировать их размер, вы можете использовать layout_width и layout_height. –