【问题标题】:Android- animateCamera with CameraUpdateFactory.newCameraPosition does NOT zoomAndroid- animateCamera 与 CameraUpdateFactory.newCameraPosition 不缩放
【发布时间】:2015-10-02 14:00:12
【问题描述】:

我有一个 onClusterItemClickListener。我希望谷歌地图(v2)动画到那个位置,所以我使用 CameraUpdateFactory.newCameraPosition。

问题: google maps 动画到目标 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() 被调用并且缩放不起作用)但它也可能是。 非常感谢任何帮助。

【问题讨论】:

  • 我认为你应该使用类似这样的“CameraUpdateFactory.newLatLngZoom” CameraUpdate update = CameraUpdateFactory.newLatLngZoom(LATLONG, CAMERA_ZOOM); googleMap.animateCamera(更新);
  • 谢谢,我试过了,结果还是一样,没有缩放。
  • 我觉得奇怪的是它应该可以工作,但看看这个链接。 developers.google.com/maps/documentation/android-api/utility/…
  • 是的,GMap.movecamera 确实会启动缩放。问题是移动没有动画。我需要流畅的动画。
  • 我不理解您的观点,您能否显示更多代码?请完成课程。

标签: android google-maps


【解决方案1】:

所以解决方案隐藏在click listener returning 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
        }
    });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多