Google地图 - 无法使用animateCamera同时缩放和移动,但可以使用moveCamera

时间:2017-02-02 05:39:41

标签: android google-maps maps

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

我像这样构建我的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同时移动和缩放?

3 个答案:

答案 0 :(得分:3)

发现问题!它位于群集点击监听器中:

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的其他部分一样,并指示是否消耗了click事件。通过将其设置为false,click事件可能会传播到GoogleMap对象,该对象必须具有一些取消缩放的功能。

答案 1 :(得分:1)

糟糕的解决方法是在moveCamera之前单独调用animateCamera进行缩放:

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

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

答案 2 :(得分:1)

你应该使用CameraUpdateFactory.newLatLngZoom

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