Google地图区分用户移动和动画

时间:2013-05-27 21:18:58

标签: android google-maps google-play-services

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

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

我的问题是当用户移动地图时以及动画地图时都会调用onCameraChange。我该怎么做才能解决这个问题?

3 个答案:

答案 0 :(得分: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的最佳用户体验,我建议您遵循以下答案:Disable my-location when user moves the map and re-enable when he press the my-location button

答案 1 :(得分:4)

来自GoogleMap.OnCameraMoveStartedListener的一个很好的回调描述了here

点是:

@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();
    }
}

答案 2 :(得分:0)

当您为地图制作动画时,您传入的CancelableCallback可让您检测是否

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

如你所知

    动画开始时
  • 动画制作完成后
  • 当动画被用户中断时

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