Kas*_*rTr 1 android google-maps
我有一个onClusterItemClickListener.我希望谷歌地图(v2)动画到该位置,所以我使用CameraUpdateFactory.newCameraPosition.
问题: google将动画映射到目标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));
}
Run Code Online (Sandbox Code Playgroud)
此代码仅动画到目标,没有缩放或倾斜.
这是版本2的故障排除
@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");
}
});
}
Run Code Online (Sandbox Code Playgroud)
这是改变相机的方法
private void changeCamera(GoogleMap map, CameraUpdate cameraUpdate, GoogleMap.CancelableCallback cancelableCallback) {
map.animateCamera(cameraUpdate, cancelableCallback);
}
Run Code Online (Sandbox Code Playgroud)
onCancel()总是被未知来源调用.
我不确定它们是否已连接(onCancel()被调用且缩放不起作用)但它可能也是如此.任何帮助非常感谢.
所以解决方案隐藏在点击监听器中,返回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
}
});
}
Run Code Online (Sandbox Code Playgroud)