2010-01-31 5 views
9

Comment ajouter un marqueur sur un emplacement particulier de la carte?Ajouter un marqueur sur l'emplacement touché à l'aide de google map dans android

J'ai vu ce code qui montre les coordonnées de l'emplacement touché. Et je veux qu'un marqueur apparaisse ou soit affiché au même endroit chaque fois qu'il est touché. Comment puis-je faire cela?

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; 
      } 

Répondre

4

Vous souhaitez ajouter un OverlayItem. Le Google Mapview tutorial montre comment l'utiliser.

+0

oks! je l'ai. Je peux dessiner des marqueurs maintenant. merci :) – lulala

+0

Très bien, pouvez-vous accepter la réponse afin que les autres qui cherchent à répondre aux questions sauront que celui-ci a déjà été répondu? – RickNotFred

8

Si vous souhaitez ajouter un marqueur à l'emplacement touché, vous devez faire ce qui suit:

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; 
     } 

Vérifiez que Im appelant MarkerOverlay après le message apparaît. Pour que cela fonctionne, vous devez créer une autre superposition, 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; 
    } 
} 

J'espère que vous trouverez ce utile!

Questions connexes