2010-04-15 3 views
9

Я хочу добавить много разных маркеров на карту Android. Мой код работает до сих пор с одним и тем же наложением снова и снова:Различные маркеры на карте Google 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 Webapp (маркер с именем «A», следующий «B» и т. Д.). Как я могу это достичь? Должен ли я добавить дополнительный файл маркера png в мое приложение? (marker_a.png, marker_b.png, ...) или есть более простой способ достичь этого? Также может быть, что будет более 26 результатов, чтобы мне, возможно, понадобились разные цвета маркеров.

ответ

1

Да, вам нужен другой формат 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); 
4

Here is a sample project показывает несколько различных PNGs на одном ItemizedOverlay. Вам просто нужно переопределить некоторые из методов рисования для обработки различных PNG.

22

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

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

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

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

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

+1

Спасибо за подсказку, работает очень хорошо. Также проверьте http://stackoverflow.com/questions/3515638/mapview-marker-shadow, если ваш маркер не отображается правильно относительно его тени. – Dr1Ku

1

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

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

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

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

0

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

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 ваша вытяжка не покажете.

Смежные вопросы