我正在使用 Google Maps Android API v2 中的setMyLocationEnabled(true)
进行自动位置跟踪,并像Google地图应用一样显示指标。我需要相机位置跟随我的位置指示器,因此除非用户平移地图,否则它将始终可见。
所以,我正在使用onMyLocationChange
方法将相机移动到新位置,但是当用户平移地图或使用我的应用中的搜索字段时,onMyLocationChange
会继续被调用并且相机总是回到我的位置坐标。
如何在启用my-location时自动移动相机,手动操作地图时禁用相机(平移,旋转或搜索),并在用户按下我的位置按钮时将其启用?
感谢。
答案 0 :(得分:1)
修改强>
现在有GoogleMap.setOnMyLocationButtonClickListener
,因此您可以跳过第1点并使用它。
您不能使用Maps API v2的二月版本。你能做的最好的事情是:
View
位于SupportMapFragment
之上onTouchListener
(返回false
!)以了解您何时需要停止跟踪这个解决方案并不完美,因为它会在用户放大平底锅之前停止跟踪 - 它会在第一次触摸地图时停止,但我认为这是一个不会让用户感到困惑的解决方案:他们触摸了地图,所以可以期待跟踪停止,并可以按下按钮启动它。
答案 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