Google Maps Android可在位置感知地图中检测用户互动

Mat*_*teu 5 android google-maps

我有一个显示地图的Android应用程序.默认情况下,地图以其移动后的用户位置为中心(中心根据位置更新进行更新).

但是我希望用户能够使用手势来导航地图.当用户开始导航时,我希望"跟随"停止,并显示一个按钮,以便它可以重新开始.

如何知道用户何时移动地图中心?在GoogleMap.OnCameraChangeListener上,我不知道更改是由于位置更改还是用户交互.我有一个使用OnCameraChangeListener的工作解决方案,但它有点"脏",我觉得它不是很好:

map.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
        @Override
        public void onCameraChange(CameraPosition position) {
                            // gpsPosition contains the last position obtained
            if(isFollowing && gpsPosition!=null && (Math.abs(position.target.latitude - gpsPosition.latitude)>0.000001 || Math.abs(position.target.longitude - gpsPosition.longitude)>0.000001) ){
                isFollowing = false;
                map.getUiSettings().setMyLocationButtonEnabled(true);
            }

        }
    }); 
Run Code Online (Sandbox Code Playgroud)

这个问题有一个很好的解决方案吗?

Mac*_*ski 4

如果您想检测用户与地图的交互,那么OnCameraChangeListener这样做肯定为时已晚。它可能会在用户开始与地图交互后几秒钟被调用。

您需要做的是添加另外 2 个侦听器:

  • OnMyLocationButtonClickListener- 了解何时开始跟踪(设置isFollowingtrue
  • OnMyLocationChangeListener- 当你isFollowing在的时候true,打电话GoogleMap.animateCamera到新的职位

所以剩下的唯一的事情就是当你设置isFollowingfalse

在您的布局中创建一个不可见的覆盖层(就像这里一样,但使用正常View而不是自定义)并分配此覆盖层()ViewOnTouchListener好吧,这是第三个,我撒谎说您只需要2个)。

在这个监听器总是返回false,但也设置isFollowingfalse。当用户开始与地图交互时,您应该停止自动相机移动。

我还看到您正在显示和隐藏我的位置按钮,因此请在更改 的值时执行此操作isFollowing。顺便说一句:这样做是个好主意。我也来试试。