【问题标题】:Use zoom controls to zoom to point that is not center of map - GoogleMaps V2使用缩放控件缩放到不是地图中心的点 - GoogleMaps V2
【发布时间】:2015-01-11 21:53:37
【问题描述】:

这是一个奇怪的问题。缩放控件(+ 和 -)仅用于放大和缩小地图的当前中心。有没有办法将这些缩放控件设置为放大和缩小屏幕上不是地图中心的另一个点?我能想到的唯一方法是实现一个 OnCameraChangeListener 并有一个 CameraUpdate 以在每次缩放级别更改时重新定位地图。我认为我不需要任何代码来解释这一点,但请告诉我这是否有帮助..

【问题讨论】:

    标签: android google-maps


    【解决方案1】:

    有一个使用 Canvas 类的方法,通过 SurfaceView 扩展它。这是一个小代码sn-p:

        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);
    

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-04
      • 1970-01-01
      • 2021-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多