yandexmobile / yandexmapkit-android

Yandex Map Kit for Android
160 stars 65 forks source link

setZoomToSpan масштабирует не всегда #266

Closed CoolMind closed 7 years ago

CoolMind commented 7 years ago

Добрый день! Список объектов mOverlay.getOverlayItems() получаю запросом, обрабатываю по аналогии с https://github.com/yandexmobile/yandexmapkit-android/issues/78#issuecomment-10543563. Делаю

....
mapController.setZoomToSpan(maxMinusMinLat, maxMinusMinLon);
mapController.setPositionNoAnimationTo(geoPoint);
mapController.notifyRepaint();

Всё это обрамляю в mapView.getViewTreeObserver(), как указано в https://github.com/yandexmobile/yandexmapkit-android/issues/175. Переносит в нужную точку и обычно отображает все объекты на экране (выполняет масштабирование). Но не всегда. После некоторых запросов все объекты видны на карте, после других - только часть (масштабирование не выполняется). Пока не уловил зависимость. Почему этот метод работает некорректно? Ведь перенос при этом выполняется корректно независимо от состояния карты. Возможно также, что это из-за старой версии библиотеки (на новую пока не перехожу, не уверен в поддержке новых устройств). Выяснилось, что метод не работает повторно даже тогда, когда карта уже отрисована, если не сработал и первый раз. Т.е. если есть TabHost со вкладками, при переходе на вкладку с картой выполнить масштабирование, то ничего не изменится.

CoolMind commented 7 years ago

Событие onGlobalLayout выполняется не всегда во время инициализации. Я привязывался к карте (mapView), затем вычислял OverlayItems. Если этот процесс происходил достаточно долго, карта успевала отрисоваться, и тогда onGlobalLayout не вызывался. Решением послужил вызов mapView.requestLayout(); перед вызовом события.