我正在使用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);
我可以看到移动和缩放生效(没有所需的动画)
可能导致animateCamera
和moveCamera
之间行为不一致的原因是什么?如何配置animateCamera
同时移动和缩放?
答案 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));