2012-04-07 15 views
0

Ich habe derzeit eine App, die Google Maps mit MapView dem Benutzer anzeigt.Hinzufügen einer benutzerdefinierten Markierung zu Karte - Android

Ich habe versucht, eine Markierung auf der Karte, um diesen Code verwenden,

public boolean onTouchEvent(MotionEvent event, MapView mapView) { 
     if (event.getAction() == 1) { 
      GeoPoint p = mapView.getProjection().fromPixels((int) event.getX(), 
        (int) event.getY()); 
      DemoOverlay demoOverlay = new DemoOverlay(); 
      mapView.getOverlays().add(demoOverlay); 

      mapView.invalidate(); 
     } 
     return false; 
    } 

Ich habe eine Demo-Overlay eingerichtet, die auf der Karte eine Markierung setzt, aber wenn ich den Bildschirm berühren die Markierung nie erscheint.

Jede Hilfe würde geschätzt werden !!!

Antwort

2
GeoPoint p = mapView.getProjection().fromPixels((int) event.getX(),(int) event.getY()); 
Drawable srcdrawable = getApplicationContext().getResources().getDrawable(R.drawable.pin_blue); 
CustomItemizedOverlay srcitemizedOverlay = new CustomItemizedOverlay(srcdrawable, getApplicationContext()); 
OverlayItem srcoverlayitem = new OverlayItem(p, "Hello!", "This is your Location."); 
srcitemizedOverlay.addOverlay(srcoverlayitem); 
mapView.getOverlays().clear(); 
mapView.getOverlays().add(srcitemizedOverlay); 
mapController.animateTo(srcpoint); 
mapController.setZoom(16); 

den obigen Code in OnTouch Methode können auch die folgenden CustomItemizedOverlay.java Klasse verwenden

public class CustomItemizedOverlay extends ItemizedOverlay<OverlayItem> { 

    private final ArrayList<OverlayItem> mapOverlays = new ArrayList<OverlayItem>(); 

    private Context context; 

    public CustomItemizedOverlay(Drawable defaultMarker) { 
     super(boundCenterBottom(defaultMarker)); 
    } 

    public CustomItemizedOverlay(Drawable defaultMarker, Context context) { 
     this(defaultMarker); 
     this.context = context; 
    } 

    @Override 
    protected OverlayItem createItem(int i) { 
     return mapOverlays.get(i); 
    } 

    @Override 
    public int size() { 
     return mapOverlays.size(); 
    } 

    public void addOverlay(OverlayItem overlay) { 
     mapOverlays.add(overlay); 
     this.populate(); 
    } 

} 
2

here vollständiges Beispiel ist mehrere Markierung in der Karte zu setzen und

auch, wie Pfad zwischen zwei Pins ziehen ...

, die für Sie nützlich sein kann ...

2

Code wie folgt ändern ---

public boolean onTouchEvent(MotionEvent event, MapView mapView) 
    { 

    if (event.getAction() == 1) { 

      p = mapView.getProjection().fromPixels(
       (int) event.getX(), 
       (int) event.getY()); 
      Toast.makeText(getBaseContext(),p.getLatitudeE6()/1E6 + "," +p.getLongitudeE6() /1E6 ,Toast.LENGTH_SHORT).show(); 

       List<Overlay> mapOverlays = mapView.getOverlays(); 
       Drawable drawable = this.getResources().getDrawable(R.drawable.map_point); 
       AddItemizedOverlay itemizedOverlay = 
       new AddItemizedOverlay(drawable, this); 

       OverlayItem overlayitem = new OverlayItem(p, "", ""); 
       itemizedOverlay.addOverlay(overlayitem); 
       mapOverlays.add(itemizedOverlay); 

      return true; 
    } 
    return false; 
}   

ein Overlay-Make class--

AddItemizedOverlay .class--

public class AddItemizedOverlay extends ItemizedOverlay<OverlayItem> { 

     private ArrayList<OverlayItem> mapOverlays = new ArrayList<OverlayItem>(); 

     private Context context; 

     public AddItemizedOverlay(Drawable defaultMarker) { 
      super(boundCenterBottom(defaultMarker)); 
     } 

     public AddItemizedOverlay(Drawable defaultMarker, Context context) { 
      this(defaultMarker); 
      this.context = context; 
     } 

     @Override 
     protected OverlayItem createItem(int i) { 
      return mapOverlays.get(i); 
     } 

     @Override 
     public int size() { 
      return mapOverlays.size(); 
     } 

     @Override 
     protected boolean onTap(int index) { 
      Log.e("Tap", "Tap Performed"); 
      return true; 
     } 

     public void addOverlay(OverlayItem overlay) { 
      mapOverlays.add(overlay); 
      this.populate(); 
     } 

    } 

zeigt es den Punkt an, wenn Sie den Bildschirm berühren.

Verwandte Themen