我正在使用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);
我可以看到移动和缩放生效(无需动画)
是什么导致了animateCamera
和moveCamera
之间的行为不一致?如何将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);
不过,这不是一个完全令人满意的答案 - 运动会动画,但缩放将是即时的。看起来很生涩。我正在寻找更正确的答案。