Маркеры с разными именами на Google Android Map - PullRequest
9 голосов
/ 15 апреля 2010

Я хочу добавить много разных маркеров на карту Android. Мой код пока работает хорошо с одним и тем же наложением снова и снова:

mapOverlays = mapView.getOverlays();
drawable = this.getResources().getDrawable(R.drawable.marker);
itemizedOverlay = new MyItemizedOverlay(drawable);
OverlayItem overlayItem = new OverlayItem(geoPoint, "foo", "bar");
mapOverlays.add(itemizedOverlay);

Пока все работает отлично. Но каждый маркер одинаков. Теперь я хочу иметь на карте разные маркеры, подобные тем, которые вы видите в веб-приложении Google Maps (маркер с именем «A», следующий «B» и т. Д.). Как мне этого добиться? Должен ли я добавить дополнительный файл маркера png в мое приложение? (marker_a.png, marker_b.png, ...) или есть более простой способ добиться этого? Возможно также, что будет более 26 результатов, поэтому мне могут понадобиться разные цвета маркеров.

Ответы [ 5 ]

22 голосов
/ 27 мая 2010

Один из ответов дает решение с различными ItemizedOverlay для каждой группы маркеров. Вы можете добиться того же с одним ItemizedOverlay, позвонив overlayItem.setMarker(drawable)

Если вы собираетесь загружать свои маркеры из ресурсов, не забудьте позвонить:

drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());

, прежде чем позвонить setMarker. В противном случае маркеры не будут показаны.

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

4 голосов
/ 16 апреля 2010

Вот пример проекта , показывающий несколько разных PNG на одном ItemizedOverlay. Вам просто нужно переопределить некоторые методы рисования для обработки разных PNG.

1 голос
/ 30 июня 2011

Я также застрял в той же ситуации, и я хотел нумеровать штыри, вставленные в A, B, C ..

Хорошая новость в том, что я нашел решение. Я только создал TextView с фоном Pin, вставил в него число динамически и преобразовал его в Drawable.

Вы можете создать другой TextView с желаемым цветом фона.

Вот ссылка на мой вопрос, на который я ответил. :)

1 голос
/ 15 апреля 2010

Да, вам нужен другой png, поэтому он будет выглядеть так:

mapOverlays = mapView.getOverlays();

// All "A"s
drawable = this.getResources().getDrawable(R.drawable.marker_a);
itemizedOverlay = new MyItemizedOverlay(drawable);
OverlayItem overlayItem = new OverlayItem(geoPoint, "foo", "bar");
mapOverlays.add(itemizedOverlay);

// All "B"s
drawable = this.getResources().getDrawable(R.drawable.marker_b);
itemizedOverlay = new MyItemizedOverlay(drawable);
OverlayItem overlayItem = new OverlayItem(geoPoint, "foo", "bar");
mapOverlays.add(itemizedOverlay);
0 голосов
/ 05 декабря 2011

Я использовал этот код:

 OverlayItem crtItem = new OverlayItem( getPoint( Double.parseDouble(latCoordRow),Double.parseDouble(longCoordRow) ), nameRow , addressRow );

  Drawable crtMarker = markerIconsArray.get(categoryRow); //my current drawable (from a HashMap)
  crtItem.setMarker(crtMarker); // set new marker
  crtMarker.setBounds(0, 0, crtMarker.getIntrinsicWidth(),crtMarker.getIntrinsicHeight()); //setBounds
  boundCenterBottom(crtMarker); //correct shadow problem

Если вы не установите setBounds, ваш чертеж не будет отображаться.

...