onLocationChanged вызывается, даже когда карта только перемещена - PullRequest
0 голосов
/ 07 февраля 2020
locationListener = new LocationListener() {
                @Override
                public void onLocationChanged(Location location) {
                    centerOnMapLocation(location,"Your location");
                }

Этот метод onLocationChanged следует вызывать, только когда я установил местоположение из extented controls в эмуляторе, т.е. когда изменилось местоположение пользователя.

 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 перемещает камеру в местоположение пользователя. Когда я нажимаю установить местоположение из extented controls в эмуляторе, камера и маркер перемещаются в новое местоположение. Хорошо. Но после этого, когда я пытаюсь переместить карту, как только я перестаю касаться экрана, камера снова возвращается к маркеру.

В основном, когда я скользлю по карте экран для перемещения по карте, как только мой слайд останавливается (значит, я перестаю касаться экрана), камера снова перемещается к маркеру. Я хочу, чтобы маркер оставался там, и я должен иметь возможность перемещаться по карте в обычном режиме

Почему это происходит, когда камера должна двигаться только при изменении местоположения, а не при смене экрана карты

1 Ответ

1 голос
/ 09 февраля 2020

Следующая строка предоставляет обновления местоположения для 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.

...