2016-05-29 37 views
0

我嘗試添加標記時MapView的感動在此基礎上question添加標記,這是我的代碼安卓:Osmdroid觸摸不準確

GeoPoint geoPoint = new GeoPoint(mLatitude, mLongitude); 
    IMapController mapController = mMapView.getController(); 
    mapController.setZoom(5); 
    mapController.setCenter(geoPoint); 

    Overlay overlay = new Overlay(getActivity()) { 

     ItemizedIconOverlay<OverlayItem> items = null; 

     @Override 
     protected void draw(Canvas c, MapView osmv, boolean shadow) { 

     } 

     @Override 
     public boolean onSingleTapConfirmed(MotionEvent e, MapView mapView) { 
      Projection proj = mapView.getProjection(); 
      GeoPoint loc = (GeoPoint) proj.fromPixels((int)e.getX(), (int)e.getY()); 
      double longitude = loc.getLongitudeE6()/1000000; 
      double latitude = loc.getLatitudeE6()/1000000; 

      mLatitude = latitude; 
      mLongitude = longitude; 

      ArrayList<OverlayItem> markers = new ArrayList<>(); 
      OverlayItem item = new OverlayItem("", "", new GeoPoint(latitude, longitude)); 
      item.setMarker(ContextCompat.getDrawable(getActivity(), R.drawable.ic_maps_marker_large)); 
      markers.add(item); 

      if (items == null) { 
       items = new ItemizedIconOverlay<>(getActivity(), markers, null); 
       mMapView.getOverlays().add(items); 
       mMapView.invalidate(); 
      } else { 
       mMapView.getOverlays().remove(items); 
       mMapView.invalidate(); 
       items = new ItemizedIconOverlay<>(getActivity(), markers, null); 
       mMapView.getOverlays().add(items); 
      } 
      return true; 
     } 

    }; 

    mMapView.getOverlays().add(overlay); 

問題在標誌放大時被添加在隨機位置,不準確。但是,如果mapview縮小,可能大約5倍縮放級別以下,它​​工作正常。

回答

0

(發佈代表OP)。

最後我能夠通過使用此代碼來解決這個問題:

GeoPoint geoPoint = new GeoPoint(mLatitude, mLongitude); 
    IMapController mapController = mMapView.getController(); 
    mapController.setZoom(5); 
    mapController.setCenter(geoPoint); 

    Overlay overlay = new Overlay(getActivity()) { 

     ItemizedIconOverlay<OverlayItem> items = null; 

     @Override 
     protected void draw(Canvas c, MapView osmv, boolean shadow) { 

     } 

     @Override 
     public boolean onSingleTapConfirmed(MotionEvent e, MapView mapView) { 
      Projection proj = mapView.getProjection(); 
      GeoPoint loc = (GeoPoint) proj.fromPixels((int)e.getX(), (int)e.getY()); 
      double longitude = loc.getLongitude(); 
      double latitude = loc.getLatitude(); 
      mLatitude = latitude; 
      mLongitude = longitude; 

      ArrayList<OverlayItem> markers = new ArrayList<>(); 
      OverlayItem item = new OverlayItem("", "", new GeoPoint(latitude, longitude)); 
      item.setMarker(ContextCompat.getDrawable(getActivity(), R.drawable.ic_maps_marker_large)); 
      markers.add(item); 

      if (items == null) { 
       items = new ItemizedIconOverlay<>(getActivity(), markers, null); 
       mMapView.getOverlays().add(items); 
       mMapView.invalidate(); 
      } else { 
       mMapView.getOverlays().remove(items); 
       mMapView.invalidate(); 
       items = new ItemizedIconOverlay<>(getActivity(), markers, null); 
       mMapView.getOverlays().add(items); 
      } 
      return true; 
     } 

    }; 

    mMapView.getOverlays().add(overlay);