11

问题:

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

3 回答 3

40

问题是您zoom在开始动画到新位置后立即调用。这就是为什么它只是用新的替换最后一个相机更新操作。

您可以通过创建更准确的相机更新操作(包括 latlng 更改和缩放级别更改)来简单地解决该问题:

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所指出的,您可以只使用newLatLngZoom包含两者的界面LatLng并进行zoom更改:

map.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(13.0810,80.2740), 15.5f), 4000, null);
于 2013-05-28T16:31:48.923 回答
2

使用CancelableCallbackwith firstanimateCamera并调用 second animateCamerain onFinish

示例:AnimateCameraChainingExampleActivity.java

于 2013-05-28T16:39:22.993 回答
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>
  );
};
于 2021-07-03T18:42:44.763 回答