Неправильно ли getCameraPosition на google-map, если на устройстве есть мягкая (виртуальная) кнопка навигации? - PullRequest
0 голосов
/ 22 декабря 2019

Я получаю ошибку getCameraPosition, если на устройстве есть программные / виртуальные навигационные кнопки, на которых запущена программа. Я использую для тестирования приведенный ниже код. (Когда карта готова, она добавляет маркер к lng=0 lat=0, перемещает камеру туда, затем записывает положение камеры в LogCat. Затем, если пользователь коснется маркера, программа переместит камеру в положение маркера, затем получит и запишетфактическое положение камеры.)

Странное поведение:

  1. Если я запускаю тест на эмуляторе, все в порядке, камера перемещается на lng=0, lat=0 и если я коснусь маркера, я вернусь в положение 0; 0, как и должно быть.

  2. если я запусту тест на Galaxy TAB Active 2, в котором есть физические кнопки навигации, все в порядке, так же, как на эмуляторе.

  3. НО, если я запустил тест на Samsung Galaxy A50, у которого нет физических кнопок навигации, а только программных / виртуальных, результат будет неправильным. Когда я нажимаю на маркер, я получаю неверное значение широты, которое равно 0,03348201322727862, а не нулю, как должно быть. Также это неправильное значение изменяется с уровнем масштабирования .... (похоже, Google-карта не рассчитывает пространство, необходимое для программных кнопок ...?)

Если я установилДисплей устройства - Панель навигации к «Полноэкранным жестам» напротив «Кнопок навигации», после чего описанное выше поведение исчезает и getCameraPosition приводит к ожидаемому значению (0; 0).

Вопросы : 1. кто-нибудь испытывал такое же поведение? 2. может кто-нибудь сделать тест на другом устройстве с виртуальными навигационными кнопками? 3. кто-нибудь знает решение или какой-нибудь обходной путь, кроме как установить на устройстве жесты на весь экран?

Спасибо

public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    mUiSettings = mMap.getUiSettings();
    mUiSettings.setZoomControlsEnabled(true);

    // Add a marker 
    LatLng origin = new LatLng(0, 0);
    mMap.addMarker(new MarkerOptions().position(origin).title("Origo"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(origin));

    //for test:
    CameraPosition cp=mMap.getCameraPosition();
    Double lat = cp.target.latitude;
    Double lng = cp.target.longitude;
    Log.i("cam","lat= "+Double.toString(lat)+" lon= "+Double.toString(lng));

    mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
        @Override
        public boolean onMarkerClick(Marker marker) {


            LatLng p=marker.getPosition();
            mMap.moveCamera(CameraUpdateFactory.newLatLng(p));

            CameraPosition cp=mMap.getCameraPosition();
            Double lat = cp.target.latitude;
            Double lng = cp.target.longitude;
            marker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));
            Log.i("cam","lat after marker is clicked... lat= "+Double.toString(lat)+" lon= "+Double.toString(lng));

            return true;
        }
        });

}

On emulator:
2019-12-21 23:02:15.866 29689-29689/com.xxxxxx.maptest I/cam: lat= 0.0 lon= 0.0
2019-12-21 23:02:28.794 29689-29689/com.xxxxxx.maptest I/cam: lat after marker is clicked = 0.0 lon= 0.0

On SAMSUNG A50:
2019-12-21 23:05:23.055 5594-5594/com.xxxxxx.maptest I/cam: lat= 0.0 lon= 0.0
2019-12-21 23:05:39.766 5594-5594/com.xxxxxx.maptest I/cam: lat after marker is clicked... **lat= 0.03348201322727862** lon= 0.0

On Samsung Galaxy TAB Active2:
2019-12-21 23:10:33.713 17999-17999/com.xxxxxx.maptest I/cam: lat= 0.0 lon= 0.0
2019-12-21 23:10:37.824 17999-17999/com.xxxxxx.maptest I/cam: lat after marker is clicked... lat= 0.0 lon= 0.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...