我有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;
}
你或許可以使用MapView的'setOnDragListener'或許有幫助。否則,您可以使用GeoLocations逐步平移。只是一個想法。 – zIronManBox
感謝@zIronManBox。我更新了上面實現GeoLocations的代碼,但映射平板與鼠標方向相反。如果我把它往上移動,它就會下降,如果我將它向右移動,它就會向左移動。我的實現有什麼問題嗎? – Dany19