谷歌地图 - 不能同时使用animateCamera进行缩放和移动,但可以使用moveCamera



我正在使用Android版Google Maps。我需要将相机移动到某个位置并同时放大。

我像这样构建我的CameraUpdate

    CameraPosition cameraPosition = new CameraPosition.Builder()
        .target(latLng)
        .zoom(zoom)
        .build();
    CameraUpdate update = CameraUpdateFactory.newCameraPosition(cameraPosition);

然后对其进行动画处理:

map.animateCamera(update);

这将产生将相机移动到目标位置的预期结果。但是,它根本不会放大相机。如果我将moveCamera与相同的update对象一起使用:

map.moveCamera(update);

我可以看到移动和缩放生效(无需动画)

是什么导致了animateCameramoveCamera之间的行为不一致?如何将animateCamera配置为同时移动和缩放?

发现问题!它在群集单击侦听器中:

mClusterManager.setOnClusterClickListener(
     new OnClusterClickListener<MyClusterItem>() {
            @Override
            public boolean onClusterClick(Cluster<MyClusterItem> cluster) {
                CameraPosition cameraPosition = new CameraPosition.Builder()
                     .target(latLng)
                     .zoom()
                     .build();
                CameraUpdate update = CameraUpdateFactory.newCameraPosition(cameraPosition);
                mMap.animateCamera(update);
                return false;
            }
        });

问题从OnClusterClickListener返回 false。虽然这是没有记录的,但大概它像Android的其余部分一样工作,并指示点击事件是否被消费。通过将其设置为 false,单击事件可能会传播到 GoogleMap 对象,该对象必须具有自己的一些取消缩放的功能。

你应该使用CameraUpdateFactory.newLatLngZoom

 mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latitude, longitude), zoom));

一个糟糕的解决方法是在animateCamera之前对moveCamera的单独调用中执行缩放:

CameraPosition zoomCameraPosition = new CameraPosition.Builder()
        .zoom(zoom)
        .build();
CameraUpdate zoomUpdate = CameraUpdateFactory.newCameraPosition(zoomCameraPosition);
mMap.moveCamera(zoomUpdate);
CameraPosition moveCameraPosition = new CameraPosition.Builder()
        .target(latLng)
        .build();
CameraUpdate moveUpdate = CameraUpdateFactory.newCameraPosition(moveCameraPosition);
mMap.animateCamera(moveUpdate);

不过,这不是一个完全令人满意的答案 - 运动会动画,但缩放将是即时的。看起来很生涩。我正在寻找更正确的答案。

最新更新