使用缩放控件缩放到不是地图中心的点 - GoogleMaps V2

时间:2015-01-11 21:53:37

标签: android google-maps

这是一个奇怪的。缩放控件(+和 - )仅用于放大和缩小地图的当前中心。有没有办法设置这些缩放控件来放大和缩小屏幕上不是地图中心的另一个点?我能想到的唯一一件事就是实现一个OnCameraChangeListener并让CameraUpdate在每次缩放级别改变时重新定位地图。我不认为我需要任何代码来解释这一点,但如果有帮助我就知道了。

1 个答案:

答案 0 :(得分:0)

使用Canvas类通过SurfaceView扩展它有一个方法。这是一个小代码片段:

    public void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    canvas.save();

    canvas.scale(mScaleVector.z, mScaleVector.z); // This is the scale factor as seen below
    canvas.translate(mScaleVector.x, mScaleVector.y); // These are offset values from 0,0, both working fine

    // Start draw code

    // ...

    // End draw code

    canvas.restore();
    }
private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
    @Override
    public boolean onScale(ScaleGestureDetector detector) {
        float factor = detector.getScaleFactor();
        if (Math.abs(factor - 1.0f) >= 0.0075f) {
            mScaleVector.z *= factor;
            mScaleVector.z = Math.max(MIN_ZOOM, Math.min(mScaleVector.z, MAX_ZOOM));
        }

        // ...

        invalidate();

        return true;
    }
    }
public boolean onTouchEvent(MotionEvent event) {
    int action = event.getAction() & MotionEvent.ACTION_MASK;
    int pointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
    if (event.getPointerCount() == 2) {
        if (action == MotionEvent.ACTION_POINTER_DOWN && pointerIndex == 1) {
            // The various pivot coordinate codes would belong here
        }
    }

    detector.onTouchEvent(event); // Calls the Scale Gesture Detector
    return true;
}

现在这将放大到坐标(0,0),它是屏幕的原点或左上角,也称为轴点。要更改轴心点,请将此行更改为代码中所需的缩放点。

canvas.scale(x, y, px, py);

希望这会有所帮助!!