2010-01-31 14 views
9

¿Cómo agrego un marcador en una ubicación particular en el mapa?Agregar marcador en la ubicación tocada con el mapa de google en android

Vi este código que muestra las coordenadas de la ubicación tocada. Y quiero que aparezca un marcador o se muestre en la misma ubicación cada vez que se toca. ¿Cómo hago esto?

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

Respuesta

8

Si desea agregar un marcador en la ubicación tocado, entonces usted debe hacer lo siguiente:

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

Comprobar que estoy llamando MarkerOverlay después de que aparezca el mensaje. Para que esto funcione, usted tiene que crear otra plantilla, 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; 
    } 
} 

espero que encuentre útil!

Cuestiones relacionadas