问题:
1)地图获取动画以达到所需位置(代码中的第4行),但它已缩放到默认位置(代码中的第5行)
[将地图保留在指定缩放级别的默认位置]
2)我理解为什么会出现这个问题,但我不知道如何解决它。
3)如果我将第4行更改为moveCamera而不是可以使用的animateCamera,但我确实需要animateCamera()方法。
以下是代码:
map=((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();
MarkerOptions options=new MarkerOptions().position(new LatLng(13.0810,80.2740));
map.addMarker(options);
map.animateCamera(CameraUpdateFactory.newLatLng(new LatLng(13.0810,80.2740)),4000,null);
map.animateCamera(CameraUpdateFactory.zoomTo(15.5f),2000,null);
答案 0 :(得分:36)
问题是您在开始动画到新位置后立即致电zoom
。这就是为什么它只是将新的相机更新动作替换为新的动作。
您可以通过创建更准确的相机更新操作(包括拉链更改和缩放级别更改)来解决此问题:
CameraPosition newCamPos = new CameraPosition(new LatLng(13.0810,80.2740),
15.5f,
map.getCameraPosition().tilt, //use old tilt
map.getCameraPosition().bearing); //use old bearing
map.animateCamera(CameraUpdateFactory.newCameraPosition(newCamPos), 4000, null);
MaciejGórski指出 ALTERNATIVELY ,您可以使用包含newLatLngZoom
和LatLng
更改的zoom
界面:
map.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(13.0810,80.2740), 15.5f), 4000, null);
答案 1 :(得分:1)
在animateCamera
前使用CancelableCallback
,在animateCamera
中拨打第二个onFinish
。
答案 2 :(得分:0)
useEffect(() => {
const fetchLocation = async () => {
const hasLocationPermission =
Platform.OS === 'ios'
? await Geolocation.requestAuthorization('whenInUse')
: await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
);
if (hasLocationPermission === 'granted') {
await Geolocation.getCurrentPosition(
position => {
const {
coords: {latitude, longitude},
} = position;
setLocation({
latitude,
longitude,
latitudeDelta: 1,
longitudeDelta: 1,
});
},
error => {
// See error code charts below.
console.log(error.code, error.message);
},
{enableHighAccuracy: true, timeout: 15000, maximumAge: 10000},
);
}
};
fetchLocation();
}, []);
useEffect(() => {
if (location && _map.current) {
_map.current.animateCamera(
{
center: {
latitude: location.latitude,
longitude: location.longitude,
},
zoom: 15,
},
{duration: 5000},
);
}
}, [location]);
return (
<View style={styles.container}>
<MapView style={styles.map} provider={PROVIDER_GOOGLE} ref={_map}>
{location && <Marker coordinate={location} />}
</MapView>
</View>
);
};