我正在尝试使用google_maps_flutter创建一个示例应用程序,例如Uber:^ 0.5.10 ..在Uber应用程序中,选择拾取/放下位置,然后双击(放大)或放大/缩小缩放屏幕时,总是发生在屏幕中央。而当我在抖动中添加Google地图时,如果我双击双击,请在屏幕右下角说,Google地图会缩放并把视图带到被点击的区域。同样,缩放(收缩屏幕)也会发生这种情况。我缩放摄像机视图的区域将转到该特定位置。但我想双击或缩放以保持居中于所选位置(例如在Uber中)。
我确实使用cameraMove和cameraStop回调实现了它。在此过程中,我确定相机是否由于缩放而移动,我得到了最后一个缩放系数,并使用新的缩放系数将相机移回到我选择的位置。它可以工作,但如果我双击左上角的相机,它会恢复到原始位置,但效果并不理想。同样,我也进行了缩放缩放,以放大/缩小相机移动回到我选择的原始位置。
然后我在GoogleMaps上尝试了GestureDetector。在里面,我处理了onDoubleTap。看起来很整洁,因为我只需双击更改缩放比例并保持位置不变。但是我无法使用GestureDetector上的onScaleUpdate(etc)函数来实现缩放放大/缩小。
在Google Maps Flutter插件中,还有其他更好的方法吗?
答案 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)