2016-07-11 54 views
0

我正在使用osmdroid并已实施MapEventsReceiver,MapEventsOverlay和LongPressHelper以便在用户按住地图时添加新标记。这是第一次,也是第一次。OSMDROID - longPressHelper仅在用于添加标记时第一次触发

如果我从我的longPressHelper中删除addMarker(p);,那么它会每隔一次触发一次。

有没有人知道为什么会这样发生?

代码:

mapviewInit - 叫的onCreate 私人无效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 - 由LongPressHelper 公共无效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(); 
} 

回答

0

我假设你在你没有提供的部分代码中添加一个MapEventsOverlay。 问题是你在addMarker中删除它! :

mapview.getOverlays().clear(); 

所以当然是不存在对长按反应在第二次...

不要在同一个方法调用mapview.invalidate()的两倍,它的无用和时间-consuming。

+0

Ahhhh ok。我真正要做的只是从屏幕上删除标记,以便它可以重新添加......无论如何,我可以删除标记而不删除整个覆盖?感谢您的帮助和回复 –

+0

mapview.getOverlays()。remove(selectedPosMarker);您也可以将现有标记移动到新位置,而无需移除/创建。 – MKer

相关问题