【问题标题】:Google Maps - cannot zoom and move at the same time with animateCamera, but can with moveCamera谷歌地图 - 不能同时使用 animateCamera 进行缩放和移动,但可以使用 moveCamera
【发布时间】:2017-02-02 05:39:41
【问题描述】:

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

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

【问题讨论】:

  • 值得注意的是,地图错误跟踪器中不存在这方面的错误。

标签: android google-maps maps


【解决方案1】:

找到问题了!它在集群点击监听器中:

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 对象,该对象必须具有自己的某些取消缩放的功能。

【讨论】:

  • 同样的事情也发生在我身上。 'return true' 修复了它。听起来像一个错误......
【解决方案2】:

你应该使用CameraUpdateFactory.newLatLngZoom

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

【讨论】:

  • 感谢您的回答。不幸的是,问题是一样的。
  • 请发布您的代码,因为它对我有用,没有问题
  • 从哪里调用 animateCamera
  • 代码和你贴的一样。 animateCamera 正在从单击侦听器中调用。此侦听器按预期触发。
  • 首先,重建项目,然后试试这段代码 mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(40.709475, -73.818740), 14));
【解决方案3】:

一个糟糕的解决方法是在 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);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2015-12-19
    相关资源
    最近更新 更多