2010-04-15 6 views
9

Je veux ajouter de nombreux marqueurs différents sur une carte android. Mon code fonctionne bien jusqu'à présent avec la même superposition encore et encore:Différents marqueurs nommés sur Google Android Map

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

Cela fonctionne très bien jusqu'à présent. Mais chaque marqueur est le même. Ce que je veux faire maintenant est d'avoir différents marqueurs sur la carte comme ceux que vous voyez sur Google Maps Webapp (un marqueur nommé "A", le suivant "B", et ainsi de suite). Comment puis-je y parvenir? Dois-je ajouter un fichier marqueur png supplémentaire à mon application? (marker_a.png, marker_b.png, ...) ou existe-t-il un moyen plus simple d'y parvenir? Il se pourrait aussi qu'il y ait plus de 26 résultats, de sorte que j'ai peut-être besoin de couleurs différentes pour les marqueurs.

Répondre

1

Oui, vous avez besoin d'un autre .png, il ressemblerait à ceci:

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 montrant plusieurs PNGs différents sur un seul ItemizedOverlay. Vous avez juste à remplacer certaines des méthodes de dessin pour gérer les différents fichiers PNG.

22

L'une des réponses fournit la solution avec différents ItemizedOverlay pour chaque groupe de marqueurs. Vous pouvez obtenir le même avec un seul ItemizedOverlay en appelant overlayItem.setMarker(drawable)

Si vous allez charger vos marqueurs de ressources, ne pas oublier d'appeler:

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

avant d'appeler setMarker. Sinon, les marqueurs ne seront pas affichés.

Comme les marqueurs sont de type Drawable, vous pouvez les obtenir comme n'importe quel autre Drawable, y compris en les créant en cours d'exécution.

+1

Merci pour le conseil, fonctionne très bien. Consultez également http://stackoverflow.com/questions/3515638/mapview-marker-shadow si votre marqueur n'est pas affiché correctement par rapport à son ombre. – Dr1Ku

1

je aussi coincé dans la même situation et je voulais numéroter les broches insted de A, B, C ..

La bonne Nouvelles est que j'ai trouvé la solution. J'ai seulement créé un TextView avec un fond d'épingle et ai inséré un nombre dedans dynamiquement et l'ai converti en Drawable.

Vous pouvez créer différents TextView avec l'arrière-plan de couleur de broche que vous voulez.

Voici la link à ma question à laquelle j'ai répondu. :)

0

J'ai utilisé ce 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 

Si vous ne setBounds votre drawable ne montrera pas.

Questions connexes