2016-07-11 85 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

相關問題