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

时间:2015-10-02 14:00:12

标签: android google-maps

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

1 个答案:

答案 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
        }
    });
}