带有CameraUpdateFactory.newCameraPosition的Android- animateCamera不会缩放

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()被调用且缩放不起作用)但它可能也是如此.任何帮助非常感谢.

Kas*_*rTr 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
        }
    });
}
Run Code Online (Sandbox Code Playgroud)