3

我正在使用 Google Maps API V2,我想知道是否有办法区分用户何时与地图交互以移动或缩放相机,以及何时调用 animateCamera 方法。

我想要做的是让用户跟随他们的地图中心,直到他们放大或拖走地图,此时我想让用户完全控制。

我的问题是 onCameraChange 在用户移动地图和地图动画时都会被调用。我能做些什么来解决这个问题?

4

3 回答 3

17

此处描述的 GoogleMap.OnCameraMoveStartedListener 有一个不错的回调

要点是:

@Override
public void onCameraMoveStarted(int reason) {

    if (reason == OnCameraMoveStartedListener.REASON_GESTURE) {
        Toast.makeText(this, "The user gestured on the map.",
                       Toast.LENGTH_SHORT).show();
    } else if (reason == OnCameraMoveStartedListener
                            .REASON_API_ANIMATION) {
        Toast.makeText(this, "The user tapped something on the map.",
                       Toast.LENGTH_SHORT).show();
    } else if (reason == OnCameraMoveStartedListener
                            .REASON_DEVELOPER_ANIMATION) {
        Toast.makeText(this, "The app moved the camera.",
                       Toast.LENGTH_SHORT).show();
    }
}
于 2017-11-14T12:29:56.743 回答
4

要将 animateCamera 与其他动作区分开来,您可以在此处使用注释中的代码:http ://code.google.com/p/gmaps-api-issues/issues/detail?id=4636#c21

如果您使用右上角的 myLocation 按钮,这将不起作用,因为您无法将按下它(当您想要开始跟踪用户位置时)与其他用户操作区分开来。请参阅:http ://code.google.com/p/gmaps-api-issues/issues/detail?id=4789

为了获得 3.1.36 的最佳用户体验,我建议遵循以下答案:当用户移动地图时禁用我的位置并在按下我的位置按钮时重新启用

于 2013-05-28T09:45:59.473 回答
0

当您为地图制作动画时,CancelableCallback您传入的参数允许您检测是否

  • 动画成功完成(意味着用户没有中断动画,前提是您没有调用stopAnimation自己。)
  • 动画被取消(animationCancelled)意味着用户通过与地图交互来中断它)。

如你所知

  • 动画开始的时候
  • 动画完成时
  • 当动画被用户打断时

您的活动/片段中应该有足够的状态信息来确定用户在执行动画时与地图进行了交互。此时,您可以决定不再为地图设置动画。(通过避免后续调用 animateCamera.

于 2013-05-28T07:03:06.877 回答