用户移动地图时禁用我的位置,并在按下我的位置按钮时重新启用

时间:2013-04-05 09:08:36

标签: android google-maps google-maps-android-api-2

我正在使用 Google Maps Android API v2 中的setMyLocationEnabled(true)进行自动位置跟踪,并像Google地图应用一样显示指标。我需要相机位置跟随我的位置指示器,因此除非用户平移地图,否则它将始终可见。

所以,我正在使用onMyLocationChange方法将相机移动到新位置,但是当用户平移地图或使用我的应用中的搜索字段时,onMyLocationChange会继续被调用并且相机总是回到我的位置坐标。

如何在启用my-location时自动移动相机,手动操作地图时禁用相机(平移,旋转或搜索),并在用户按下我的位置按钮时将其启用?

感谢。

4 个答案:

答案 0 :(得分:1)

修改

现在有GoogleMap.setOnMyLocationButtonClickListener,因此您可以跳过第1点并使用它。


您不能使用Maps API v2的二月版本。你能做的最好的事情是:

  1. 拥有自己的“转到我的位置”按钮,了解您何时开始跟踪
  2. 您自己的位置更改侦听器
  3. View位于SupportMapFragment之上onTouchListener(返回false!)以了解您何时需要停止跟踪
  4. 这个解决方案并不完美,因为它会在用户放大平底锅之前停止跟踪 - 它会在第一次触摸地图时停止,但我认为这是一个不会让用户感到困惑的解决方案:他们触摸了地图,所以可以期待跟踪停止,并可以按下按钮启动它。

答案 1 :(得分:0)

那你为什么不这样做呢?为什么不拨打setMyLocationEnabled(false)当用户与TextView互动?

您可以与地图核对的唯一互动是:

map.setOnMapClickListener(listener);
map.setOnMapLongClickListener(listener);
map.setOnMarkerClickListener(listener);
map.setOnMarkerDragListener(listener);

您可以对这些互动做同样的事情来禁用my-location layer

答案 2 :(得分:0)

从方法

中删除这两行(如果有)
@Override
public void onLocationChanged(Location location) {
      //Remove these two lines
      googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
      googleMap.animateCamera(CameraUpdateFactory.zoomTo(15));
}

答案 3 :(得分:0)

您可以使用 setOnCameraMoveStartedListener 中的 REASON_GESTURE 检测用户手势。

mMap.setOnCameraMoveStartedListener(new GoogleMap.OnCameraMoveStartedListener() {
    @Override
    public void onCameraMoveStarted(int reason) {
        if (reason == GoogleMap.OnCameraMoveStartedListener.REASON_GESTURE) {
            //Camera motion initiated in response to user gestures on the map.
        } else if (reason == GoogleMap.OnCameraMoveStartedListener.REASON_API_ANIMATION){
            //Non-gesture animation initiated in response to user actions.
        } else if (reason == GoogleMap.OnCameraMoveStartedListener.REASON_DEVELOPER_ANIMATION){
            //Developer initiated animation.
        }
    }
});

有关详细信息,请参阅文档:https://developers.google.com/android/reference/com/google/android/gms/maps/GoogleMap.OnCameraMoveStartedListener