2010-04-15 10 views
9

Voglio aggiungere molti indicatori diversi su una mappa di Android. Il mio codice funziona bene finora con la stessa sovrapposizione più e più volte:Marcatori con nome diverso su Google Android Mappa

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

Questo funziona bene finora. Ma ogni marcatore è lo stesso. Quello che voglio fare ora è avere marcatori diversi sulla mappa come quelli che vedi su Google Maps Webapp (un pennarello chiamato "A", il prossimo "B", e così via). Come posso ottenere questo? Devo aggiungere un ulteriore file marcatore png alla mia app? (marker_a.png, marker_b.png, ...) o esiste un modo più semplice per raggiungere questo obiettivo? Potrebbe anche essere che ci saranno più di 26 risultati in modo che io possa aver bisogno di colori diversi dei marcatori.

risposta

1

Sì, avete bisogno di un altro png, quindi sarebbe simile a questa:

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 che mostra diverse PNG differenti su un singolo ItemizedOverlay. Devi solo sovrascrivere alcuni dei metodi di disegno per gestire i diversi PNG.

22

Una delle risposte fornisce la soluzione con diversi ItemizedOverlay per ogni gruppo marcatore. È possibile ottenere lo stesso con la singola ItemizedOverlay chiamando overlayItem.setMarker(drawable)

Se avete intenzione di caricare i vostri indicatori di risorse, non dimenticare di chiamare:

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

prima di chiamare setMarker. Altrimenti i marcatori non verranno mostrati.

Poiché i marcatori sono del tipo Drawable, è possibile ottenerli come qualsiasi altro Drawable, inclusa la loro creazione in fase di esecuzione.

+1

Grazie per il suggerimento, funziona molto bene. Controlla anche http://stackoverflow.com/questions/3515638/mapview-marker-shadow se il tuo indicatore non viene visualizzato correttamente in relazione alla sua ombra. – Dr1Ku

1

Sono stato anche bloccato nella stessa situazione e ho voluto numerare i perni invece di A, B, C ..

La buona notizia è che ho trovato la soluzione. Ho creato solo un TextView con uno sfondo Pin e inserito un numero in esso dinamicamente e convertito in Drawable.

È possibile creare diversi TextView con sfondo a colori pin che si desidera.

Ecco il link alla mia domanda, che ho risposto. :)

0

Ho usato questo codice:

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 

Se voi non setBounds tua drawable non verrà visualizzato.

Problemi correlati