即使刚刚移动地图也会调用 onLocationChanged

onLocationChanged being called even when map is just moved

locationListener = new LocationListener() {
                @Override
                public void onLocationChanged(Location location) {
                    centerOnMapLocation(location,"Your location");
                }

仅当我在模拟器中 set location from extented controls 时才应调用此方法 onLocationChanged,即当用户的位置发生更改时。

 public void centerOnMapLocation(Location location, String title){
        if(location!=null) {
            LatLng userLocation = new LatLng(location.getLatitude(), location.getLongitude());
            mMap.clear();
            mMap.addMarker(new MarkerOptions().position(userLocation).title(title));
            mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(userLocation, 12));
        }
    }

centerOnMapLocation 将相机移动到用户的位置。当我在模拟器中单击 set location from extented controls 时,相机和标记被移动到新位置。没关系。但是在那之后,当我尝试在地图内移动时,只要我停止触摸屏幕,相机就会再次移回标记。

基本上,当我在地图屏幕内滑动以在地图内移动时,一旦我的滑动停止(意味着我停止触摸屏幕),相机就会再次移动到标记处。我希望标记保留在那里,我应该能够正常在地图内移动

为什么当相机应该只在位置变化而不是地图屏幕变化时移动时会发生这种情况

下一行提供 locationLister 的位置更新。

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener);

请求位置更新时的第三个参数是 minimum distance 移动直到位置更新。在上面的例子中,当0被传递时,它不断更新位置,locationLister将其作为新位置并更新cameraZoom

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,1,locationListener);

要解决此问题,只需将 minimum distance 的值更改为某个任意值,此处为 1。现在直到位置改变,它不会调用 centerOnMapLocation