【问题标题】:Google Maps Distinguish between User Move and Animation谷歌地图区分用户移动和动画
【发布时间】:2013-05-27 21:18:58
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    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】:

    为了区分 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

    【讨论】:

      【解决方案3】:

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

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

      如你所知

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-23
        • 2011-10-12
        • 1970-01-01
        • 1970-01-01
        • 2016-02-03
        • 2017-09-21
        相关资源
        最近更新 更多