Я получаю ошибку getCameraPosition
, если на устройстве есть программные / виртуальные навигационные кнопки, на которых запущена программа. Я использую для тестирования приведенный ниже код. (Когда карта готова, она добавляет маркер к lng=0
lat=0
, перемещает камеру туда, затем записывает положение камеры в LogCat. Затем, если пользователь коснется маркера, программа переместит камеру в положение маркера, затем получит и запишетфактическое положение камеры.)
Странное поведение:
Если я запускаю тест на эмуляторе, все в порядке, камера перемещается на lng=0
, lat=0
и если я коснусь маркера, я вернусь в положение 0; 0, как и должно быть.
если я запусту тест на Galaxy TAB Active 2, в котором есть физические кнопки навигации, все в порядке, так же, как на эмуляторе.
НО, если я запустил тест на 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