谷歌地图区分用户移动和动画

5
我正在使用Google Maps API V2,并想知道如何区分用户与地图交互以移动或缩放相机,以及调用animateCamera方法的情况。我想要做的是让地图在用户中心跟随他们,直到他们缩放或拖动地图,此时我想给用户完全控制。我的问题是onCameraChange在用户移动地图和地图动画时都被调用。我该怎么解决这个问题?
3个回答

19

这里描述了一个来自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();
    }
}

你救了我的夜晚!谢谢!! - Serdar Samancıoğlu
这么简单,这是一个很棒的答案。 - Nathan O'Kane

4
为了区分animateCamera和其他移动操作,您可以使用以下代码(注释中的代码):http://code.google.com/p/gmaps-api-issues/issues/detail?id=4636#c21 如果您正在使用右上角的“我的位置”按钮,则此方法不适用,因为您无法区分是否按下该按钮(当您想要跟踪用户位置时)以及其他用户操作。请参见: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

0

当您正在对地图进行动画处理时,传递的CancelableCallback允许您检测以下情况:

  • 动画已成功完成(这意味着用户没有中断动画,同时您自己也没有调用stopAnimation)。
  • 动画已取消(animationCancelled),这意味着用户通过与地图交互来中断了它。

正如您所知:

  • 动画何时开始
  • 动画何时完成
  • 用户何时通过交互中断了动画

在执行动画时,您应该在活动/片段中具有足够的状态信息,以便决定用户是否与地图进行了交互。此时,您可以决定不再对地图进行动画处理(通过避免后续调用animateCamera)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接