我有一个onClusterItemClickListener。我希望谷歌地图(v2)动画到该位置,所以我使用CameraUpdateFactory.newCameraPosition。
问题:谷歌地图将动画映射到目标LatLng,但不会缩放,倾斜等。 我使用GoogleMap.CancelableCallback()进行了问题排查,似乎在动画到位置onCancel()之后总是被调用。
这是我的代码
...<some code before>
@Override
public boolean onClusterItemClick(OffersMarker item) {
final LatLng markerLocation = item.getPosition();
final OffersMarker i = item;
final CameraPosition MARKER_POS = new CameraPosition.Builder()
.target(markerLocation)
.zoom(22)
.bearing(0)
.tilt(25)
.build();
gmap.animateCamera(CameraUpdateFactory.newCameraPosition(MARKER_POS));
}
此代码仅在没有缩放或倾斜的情况下以动画为目标。
以下是带有疑难解答的第二版
@Override
public boolean onClusterItemClick(OffersMarker item) {
final LatLng markerLocation = item.getPosition();
final OffersMarker i = item;
final CameraPosition MARKER_POS = new CameraPosition.Builder()
.target(markerLocation)
.zoom(22)
.bearing(0)
.tilt(25)
.build();
changeCamera(gmap, CameraUpdateFactory.newCameraPosition(MARKER_POS), new GoogleMap.CancelableCallback() {
@Override
public void onFinish() {
Log.d("CAM_MOVE", "Finished animate camera");
}
@Override
public void onCancel() {
Log.d("CAM_MOVE", "Canceled animate camera");
}
});
}
这是更改相机方法
private void changeCamera(GoogleMap map, CameraUpdate cameraUpdate, GoogleMap.CancelableCallback cancelableCallback) {
map.animateCamera(cameraUpdate, cancelableCallback);
}
onCancel()总是由未知来源调用。
我不确定它们是否已连接(onCancel()被调用且缩放不起作用)但它可能也是如此。 任何帮助非常感谢。
答案 0 :(得分:5)
因此解决方案隐藏在单击侦听器中,返回false,因此默认方法开始运行。
解决方案:在onClick代码后返回true。
实施例
private void addClusterItemClickListener(GoogleMap map, ClusterManager cM){
final GoogleMap gmapI = map;
cM.setOnClusterItemClickListener(new ClusterManager.OnClusterItemClickListener<OffersMarker>() {
@Override
public boolean onClusterItemClick(OffersMarker item) {
Log.d("CAM_MOVE", "Clicked on marker");
final LatLng markerLocation = item.getPosition();
final OffersMarker i = item;
if (markerLocation != null) {
//Log.d("GEO_CODE_CRASH", "Latitude: " + markerLocation.latitude + " | " + "Longitude: " + markerLocation.longitude);
//Log.d("CAM_MOVE", "Moving on with placeSelectHandler");
placeSelectedHandler(markerLocation.latitude, markerLocation.longitude);
buildingFragment.setNrOfOffersOnToolber(i.getNrOfOffers());
getServerResponseAndPopulateBuildingPage(adr,markerLocation);
CameraUpdate update = CameraUpdateFactory.newLatLngZoom(markerLocation, ZOOM_LEVEL_BUILDING);
gmap.animateCamera(update);
}
return true; //<------- THIS NEEDS TO BE TRUE
}
});
}