2

mapView があり、プログラムでタッチ イベントを処理します。

問題は、mapview が最大に ZoomOut されている場合、パンが非常に小さくて遅く、mapView が ZoomIn に適合している場合、パンが大きくて速いことです。言い換えれば、zoomIN を大きくすると、パンの動きが大きくなります。

zoom に応じてパンを移動しないようにするにはどうすればよいですか?マップを移動するたびに、ズームレベルに関係なく同じ距離を移動しますか? またはマップビューでパンをオーバーライドする別の方法はありますか?

ここに私の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;
 }
4

1 に答える 1

2

MotionEvent の位置 (画面座標内) をマップの位置に変換する必要があります。これはまったく同じ座標系ではありません!

final Projection pj = mapView.getProjection();
GeoPoint eventPosition = (GeoPoint) pj.fromPixels((int)event.getX(), (int)event.getY());
于 2014-07-18T11:40:23.307 に答える