2016-07-11 17 views
0

Ich benutze Osmdroid und habe einen MapEventsReceiver, MapEventsOverlay und einen LongPressHelper implementiert, um einen neuen Marker hinzuzufügen, wenn der Benutzer auf der Karte hält. Dies funktioniert das erste Mal und das erste Mal nur.OSMDROID - longPressHelper feuert nur das erste Mal, wenn es verwendet wird, um eine Markierung hinzuzufügen

Wenn ich die addMarker(p); von meinem longPressHelper entferne, wird es jedes Mal ausgelöst.

Hat jemand eine Idee, warum das so passiert?

Code:

mapviewInit - genannt in onCreate private void mapviewInit() {

mapview = (MapView) findViewById(R.id.mapview); 
    mapview.setTileSource(TileSourceFactory.MAPNIK); 
    mapview.setBuiltInZoomControls(true); 
    mapview.setMultiTouchControls(true); 

    IMapController mapController = mapview.getController(); 
    mapController.setZoom(16); 
    GeoPoint startPoint = new GeoPoint(48.8583, 2.2944); 
    mapController.setCenter(startPoint); 

    MapEventsReceiver meReceiver = new MapEventsReceiver() { 

     @Override 
     public boolean singleTapConfirmedHelper(GeoPoint p) { 
      return false; 
     } 

     @Override 
     public boolean longPressHelper(GeoPoint p) { 

      Toast toast = Toast.makeText(getApplicationContext(), "DEBUGDEBUGDEBUG", Toast.LENGTH_LONG); 
      toast.show(); 

      addMarker(p); 



      return true; 
     } 
    }; 

addMarker - genannt von LongPressHelper public void addMarker (GeoPoint GeoPoint) {

Drawable dr = getResources().getDrawable(R.drawable.icn_crosshair_red); 
    Bitmap bitmap = ((BitmapDrawable) dr).getBitmap(); 
    Drawable d = new BitmapDrawable(getResources(), Bitmap.createScaledBitmap(bitmap, 100, 100, true)); 

    mapview.getOverlays().clear(); 
    mapview.invalidate(); 

    selectedPosMarker = new Marker(mapview); 
    selectedPosMarker.setPosition(geoPoint); 

    selectedPosMarker.setInfoWindow(null); 

    selectedPosMarker.setIcon(d); 
    selectedPosMarker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM); 


    mapview.getOverlays().add(selectedPosMarker); 
    mapview.invalidate(); 
} 

Antwort

0

Ich nehme an, Sie fügen irgendwo in einem Teil Ihres Codes, den Sie nicht angegeben haben, ein MapEventsOverlay hinzu. Das Problem ist, dass Sie es in addMarker entfernen! :

mapview.getOverlays().clear(); 

So ist es natürlich nicht anwesend langen Druck auf die zweite Zeit zu reagieren ...

mapview.invalidate nicht rufen Sie() zweimal in der gleichen Methode, es ist nutzlos und Zeit -konsumierend.

+0

Ahhhh ok. Eigentlich wollte ich nur den Marker vom Bildschirm entfernen, damit er wieder hinzugefügt werden kann. Kann ich den Marker entfernen, ohne das gesamte Overlay zu entfernen? Vielen Dank für Ihre Hilfe und antworten Sie auf –

+0

mapview.getOverlays(). Remove (selectedPosMarker); Sie können Ihren vorhandenen Marker auch einfach an die neue Position verschieben, ohne ihn zu entfernen/erstellen. – MKer