2010-01-31 8 views
9

Wie füge ich einen Marker an einer bestimmten Stelle in der Karte?Markierung an berührten Ort hinzufügen mit Google Map in Android

Ich sah diesen Code, der die Koordinaten der berührten Stelle zeigt. Und ich möchte, dass ein Marker bei jedem Berühren an der gleichen Stelle erscheint oder angezeigt wird. Wie mache ich das?

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

Antwort

4

Sie möchten einen OverlayItem hinzuzufügen. Die Google Mapview tutorial zeigt, wie man es benutzt.

+0

oks! Ich hab es geschafft. Ich kann jetzt Markierungen zeichnen. danke :) – lulala

+0

Großartig, können Sie die Antwort akzeptieren, so dass andere, die Fragen beantworten wollen, wissen, dass dieser bereits beantwortet wurde? – RickNotFred

8

Wenn Sie eine Markierung in die berührte Stelle hinzufügen möchten, dann sollten Sie folgendes tun:

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

Überprüfen Sie, dass Im MarkerOverlay Aufruf nachdem die Meldung angezeigt. Um zu machen dies funktioniert, können Sie einen anderen Overlay erstellen müssen, 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; 
    } 
} 

Ich hoffe, dass Sie dies nützlich finden!

Verwandte Themen