Подтвердить что ты не робот

Показать всплывающее окно над маркером карты в MapView

Я не могу поверить, что нет простого способа сделать такую ​​базовую вещь, как это... Я хочу показать всплывающее окно /baloon (LinearLayout) после того, как пользователь нажмет на маркер карты (что-то похожее на то, что находится в Google Приложение Карты). Он должен перемещаться с помощью карты, когда пользователь прокручивает карту. Каков наилучший способ сделать это?

Одна идея состоит в том, чтобы LinearLayout в макете корневого каталога и показывал ее, когда это необходимо. Но как заставить его перемещаться с картой?

Другим способом сделать это может быть создание Overlay, который рисует LinearLayout в onDraw и передает события касания макета. Возможно ли это?

4b9b3361

Ответ 1

Как я это сделал:

Поместите маркеры в нужные геоданные путем подкласса ItemizedOverlay, как описано в http://developer.android.com/guide/tutorials/views/hello-mapview.html

Создайте всплывающее окно, раздувая макет:

View popUp = getLayoutInflater().inflate(R.layout.map_popup, map, false);

Используйте MapView.LayoutParams для размещения всплывающего окна относительно GeoPoint в ItemizedOverlay <OverlayItem> :: onTap. Всплывающее окно будет автоматически прокручиваться (без какого-либо дополнительного кода), когда пользователь прокручивает карту. В основном всплывающее окно привязывается к GeoPoint, если пользователь увеличивает масштаб, позиция всплывающего окна автоматически настраивается.

MapView map = (MapView) findViewById(R.id.mapview);   
MapView.LayoutParams mapParams = new MapView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 
                        ViewGroup.LayoutParams.WRAP_CONTENT,
                        <geopoint>,
                        <x offset if required>,
                        <y offset like pinHeight>,
                        MapView.LayoutParams.BOTTOM_CENTER);
map.addView(popUp, mapParams);