2010-04-15 5 views
9

Ich möchte viele verschiedene Marker auf einer Android-Karte hinzufügen. Mein Code funktioniert bisher immer mit der gleichen Überlagerung:Verschiedene benannte Marker auf Google Android Karte

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

Das funktioniert soweit gut. Aber jeder Marker ist derselbe. Was ich jetzt machen möchte, sind verschiedene Markierungen auf der Karte wie die, die Sie in Google Maps Webapp sehen (ein Marker namens "A", der nächste "B", usw.). Wie kann ich das erreichen? Muss ich meiner App eine zusätzliche PNG-Markierungsdatei hinzufügen? (marker_a.png, marker_b.png, ...) oder gibt es einen einfacheren Weg dies zu erreichen? Es kann auch sein, dass es mehr als 26 Ergebnisse gibt, so dass ich möglicherweise unterschiedliche Farben der Marker benötige.

Antwort

1

Ja, müssen Sie einen anderen png, so würde es so aussehen:

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 verschiedene PNGs auf einem einzigen ItemizedOverlay zeigt. Sie müssen nur einige der Zeichnungsmethoden überschreiben, um die verschiedenen PNGs zu behandeln.

22

Eine der Antworten bietet die Lösung mit unterschiedlichen ItemizedOverlay für jede Markergruppe. Sie können das gleiche mit einzelnen ItemizedOverlay erreichen, indem overlayItem.setMarker(drawable)

Aufruf Wenn Sie Ihre Marker von Ressourcen laden wollen, vergessen Sie nicht zu nennen:

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

bevor Sie setMarker nennen. Andernfalls werden keine Markierungen angezeigt.

Da Marker vom Typ Drawable sind, können Sie sie wie alle anderen Drawable erhalten, einschließlich der Erstellung dieser Runtime.

+1

Danke für den Tipp, funktioniert sehr gut. Überprüfen Sie auch http://stackoverflow.com/questions/3515638/mapview-marker-shadow, wenn Ihr Marker relativ zu seinem Schatten nicht korrekt angezeigt wird. – Dr1Ku

1

ich auch in der gleichen Situation stecken geblieben war und ich wollte die Stifte insted von A, B, C an die Nummer ..

Die gute Nachricht ist, dass ich die Lösung gefunden. Ich habe nur ein TextView mit einem Pin-Hintergrund erstellt und dynamisch eine Zahl eingefügt und diese in Drawable konvertiert.

Sie können verschiedene TextView mit PIN-Hintergrund erstellen, die Sie möchten.

Hier ist die link zu meiner Frage, die ich beantwortet habe. :)

0

habe ich diesen Code:

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 

Wenn Sie nicht setBounds Ihre ziehbar wird nicht angezeigt.