Google地图抖动放大/缩小

时间:2019-05-03 11:10:54

标签: flutter

我正在尝试使用google_maps_flutter创建一个示例应用程序,例如Uber:^ 0.5.10 ..在Uber应用程序中,选择拾取/放下位置,然后双击(放大)或放大/缩小缩放屏幕时,总是发生在屏幕中央。而当我在抖动中添加Google地图时,如果我双击双击,请在屏幕右下角说,Google地图会缩放并把视图带到被点击的区域。同样,缩放(收缩屏幕)也会发生这种情况。我缩放摄像机视图的区域将转到该特定位置。但我想双击或缩放以保持居中于所选位置(例如在Uber中)。

我确实使用cameraMove和cameraStop回调实现了它。在此过程中,我确定相机是否由于缩放而移动,我得到了最后一个缩放系数,并使用新的缩放系数将相机移回到我选择的位置。它可以工作,但如果我双击左上角的相机,它会恢复到原始位置,但效果并不理想。同样,我也进行了缩放缩放,以放大/缩小相机移动回到我选择的原始位置。

然后我在GoogleMaps上尝试了GestureDetector。在里面,我处理了onDoubleTap。看起来很整洁,因为我只需双击更改缩放比例并保持位置不变。但是我无法使用GestureDetector上的onScaleUpdate(etc)函数来实现缩放放大/缩小。

在Google Maps Flutter插件中,还有其他更好的方法吗?

3 个答案:

答案 0 :(得分:1)

使用zoomGesturesEnabled: true

那样:

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';

class ZoomInOutMaps extends StatefulWidget {
  @override
  _ZoomInOutMapsState createState() => _ZoomInOutMapsState();
}

class _ZoomInOutMapsState extends State<ZoomInOutMaps> {
  Completer<GoogleMapController> _controller = Completer();

  static const LatLng _center = const LatLng(45.521563, -122.677433);

  void _onMapCreated(GoogleMapController controller) {
    _controller.complete(controller);
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Zoom in and Out of Google Maps'),
          backgroundColor: Colors.red,
        ),
        body: GoogleMap(
          //enable zoom gestures
          zoomGesturesEnabled: true,
          onMapCreated: _onMapCreated,
          initialCameraPosition: CameraPosition(
            target: _center,
            zoom: 11.0,
          ),
        ),
      ),
    );
  }
}

答案 1 :(得分:1)

使用onCameraMove,这将监听cameraPosition的更改。 例如,如果您使用双击放大或使用手势放大/缩小,

GoogleMap(
  zoomGesturesEnabled: true,
  tiltGesturesEnabled: false,
  onCameraMove:(CameraPosition cameraPosition){
     print(cameraPosition.zoom);
  },

onCameraMove采用void函数并将CameraPosition参数传递给它,因此您可以使用 “ cameraPosition.zoom”返回当前的缩放级别; “ cameraPosition.tilt”返回当前的倾斜角度...

答案 2 :(得分:0)

用于处理最小和最大缩放:

 minMaxZoomPreference: MinMaxZoomPreference(13,17)