2010-01-31 11 views
9

Come si aggiunge un indicatore in una posizione particolare nella mappa?Aggiungi indicatore sulla posizione toccata utilizzando google map in Android

Ho visto questo codice che mostra le coordinate della posizione toccata. E voglio che un marcatore appaia o venga mostrato nella stessa posizione ogni volta che viene toccato. Come faccio a fare questo?

public boolean onTouchEvent(MotionEvent event, MapView mapView) { 
       if (event.getAction() == 1) {     
        GeoPoint p = mapView.getProjection().fromPixels(
         (int) event.getX(), 
         (int) event.getY()); 
         Toast.makeText(getBaseContext(), 
          p.getLatitudeE6()/1E6 + "," + 
          p.getLongitudeE6() /1E6 , 
          Toast.LENGTH_SHORT).show(); 

         mapView.invalidate(); 
       }        
       return false; 
      } 

risposta

4

Si desidera aggiungere un OverlayItem. Lo Google Mapview tutorial mostra come usarlo.

+0

oks! capito. Posso disegnare i segnalini ora. grazie :) – lulala

+0

Ottimo, puoi accettare la risposta in modo che gli altri che cercano di rispondere alle domande sappiano che questo ha già ricevuto una risposta? – RickNotFred

8

Se si desidera aggiungere un marcatore nella posizione toccata, allora si dovrebbe effettuare le seguenti operazioni:

public boolean onTouchEvent(MotionEvent event, MapView mapView) {    
     if (event.getAction() == 1) {     
       GeoPoint p = mapView.getProjection().fromPixels(
        (int) event.getX(), 
        (int) event.getY()); 
        Toast.makeText(getBaseContext(),        
         p.getLatitudeE6()/1E6 + "," + 
         p.getLongitudeE6() /1E6 ,        
         Toast.LENGTH_SHORT).show(); 
        mapView.getOverlays().add(new MarkerOverlay(p)); 
        mapView.invalidate(); 
      }        
      return false; 
     } 

Controllare che Im chiamare MarkerOverlay dopo la visualizzazione del messaggio. Al fine di rendere questo funziona, è necessario creare un altro Overlay, MapOverlay:

class MarkerOverlay extends Overlay{ 
    private GeoPoint p; 
    public MarkerOverlay(GeoPoint p){ 
     this.p = p; 
    } 

    @Override 
    public boolean draw(Canvas canvas, MapView mapView, 
      boolean shadow, long when){ 
     super.draw(canvas, mapView, shadow);     

     //---translate the GeoPoint to screen pixels--- 
     Point screenPts = new Point(); 
     mapView.getProjection().toPixels(p, screenPts); 

     //---add the marker--- 
     Bitmap bmp = BitmapFactory.decodeResource(getResources(), /*marker image*/);    
     canvas.drawBitmap(bmp, screenPts.x, screenPts.y-50, null);   
     return true; 
    } 
} 

Spero che hai trovato utile!

Problemi correlati