2014-07-17 89 views
2

我有mapView和我以編程方式處理觸摸事件。覆蓋osmdroid MapView的默認平移/移動

問題是:如果mapview是ZoomOut達到其最大值,則平移非常小且很慢,並且符合mapView是ZoomIn,平移越來越快。換句話說:放大zoomIN更大的平移運動。

如何使平移移動不會因此而縮放,所以每次移動地圖時,無論縮放級別如何,它都會移動相同的距離? 還是有另一種方法來覆蓋mapview中的平移?

這是我的Android客戶端

private double savedTouchedX = -1; 
private double savedTouchedY = -1; 
.... 

mapView.setOnTouchListener(new MapView.OnTouchListener() { 

     @Override 
     public boolean onTouch(View arg0, MotionEvent event) { 
      int action = event.getAction(); 
      final Projection pj = mapView.getProjection(); 
      GeoPoint eventPosition = (GeoPoint) pj.fromPixels((int)event.getX(), (int)event.getY()); 

      switch(action) 
      { 
       case MotionEvent.ACTION_DOWN: 
        savedTouchedX = eventPosition.getLongitude(); 
        savedTouchedY = eventPosition.getLatitude(); 
        break; 
       case MotionEvent.ACTION_MOVE: 
        doPanning(eventPosition, mapView); 
        break; 
       case MotionEvent.ACTION_UP: 
        doPanning(eventPosition, mapView); 
        savedTouchedX = -1; 
        savedTouchedY = -1; 
        break; 
       default: 
        break; 
      } 
      return true; 
     } 
    }); 

//move mapView 
private boolean doPanning(GeoPoint e, MapView mapView) 
{ 
     GeoPoint mapCenter = (GeoPoint) mapView.getMapCenter(); 
     GeoPoint panToCenter = new GeoPoint((int)(mapCenter.getLatitudeE6() + (e.getLatitude() - savedTouchedY) * 1E5), 
     (int)(mapCenter.getLongitudeE6() - (e.getLongitude() - savedTouchedX) * 1E5)); 
     mapView.getController().setCenter(panToCenter); 
    savedTouchedX = e.getLongitude(); 
    savedTouchedY = e.getLatitude(); 
    return true; 
} 
+0

你或許可以使用MapView的'setOnDragListener'或許有幫助。否則,您可以使用GeoLocations逐步平移。只是一個想法。 – zIronManBox

+0

感謝@zIronManBox。我更新了上面實現GeoLocations的代碼,但映射平板與鼠標方向相反。如果我把它往上移動,它就會下降,如果我將它向右移動,它就會向左移動。我的實現有什麼問題嗎? – Dany19

回答

1

你必須改變在地圖位置的MotionEvent位置(這是在屏幕coords)使用。 這不是一個完全一樣的座標系統!

final Projection pj = mapView.getProjection(); 
GeoPoint eventPosition = (GeoPoint) pj.fromPixels((int)event.getX(), (int)event.getY()); 
+0

感謝@Mker。我更新了上面的代碼,實現了這個功能,但** map平移與鼠標方向相反**。如果我把它往上移動,它就會下降,如果我將它向右移動,它就會向左移動。我的實現有什麼問題嗎? – Dany19

+0

其實他們有平移有奇怪的行爲 – Dany19

+0

您目前正在混合getLatitudeE6和e.getLatitude()* 1E5。 「GeoPoint panToCenter = new GeoPoint(mapCenter.getLatitude()+ e.getLatitude() - savedTouchedY,mapCenter.getLongitude()+ e.getLongitude() - savedTouchedX);」應該會更好。 – MKer