2016-07-11 7 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을 (호출하지 마십시오, 그것은 쓸모 시간 -태워 버리는.

+0

아. 내가 실제로 의도 한 것은 화면에서 마커를 제거하여 다시 다시 추가 할 수 있다는 것입니다. 어쨌든 전체 오버레이를 제거하지 않고 마커를 제거 할 수 있습니까? 도움과 답장을 보내 주셔서 감사합니다. –

+0

mapview.getOverlays(). remove (selectedPosMarker); 제거/생성하지 않고 기존 마커를 새 위치로 이동할 수도 있습니다. – MKer