[英]Google Maps - cannot zoom and move at the same time with animateCamera, but can with moveCamera
我正在使用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
配置為同時移動和縮放?
找到了問題! 它是在群集Click偵聽器中:
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
對象,該對象必須具有取消縮放的某些功能。
一個糟糕的解決方法是在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);
不過,這並不是一個完全令人滿意的答案-運動會進行動畫處理,但縮放會立即進行。 看起來很生澀。 我正在尋找一個更正確的答案。
您應該使用CameraUpdateFactory.newLatLngZoom
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latitude, longitude), zoom));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.