Мы разрабатываем приложение для Android (ориентированное на API 19 и выше) с использованием С# и инфраструктуры Xamarin. Центральным компонентом является карта, которая живет внутри WebViewClient - эта карта - это карты, которые отображаются с помощью API-интерфейсов здесь Maps JS v3 (а не Android Maps SDK для Android).
Проблема: map.getZoom() возвращает 0 после того, как пользователь выполнил операцию " щепотку"
В качестве теста мы проверили следующие события: "mapviewchangestart", "mapviewchange", "mapviewchangeend", "sync", а затем в обработчике с именем map.getZoom() - за исключением "sync", где мы ссылались на e.newValue. увеличить. Также приложение может вызвать map.getZoom() напрямую без какого-либо связанного события карты. В каждом случае, однако, после действия pinch-to-zoom, getZoom() возвращает 0.
Думая, что это может быть проблемой асинхронного действия, мы ожидали несколько секунд (apx 30) для завершения всех событий/обработчиков до вызова map.getZoom() - он вернул 0.
Однако при нажатии на карту на карте (например, + -) для масштабирования или установки уровня масштабирования программным способом функция getZoom(), как и ожидалось, возвращает правильный уровень масштабирования. Возможная подсказка: при достижении максимального зума и максимального уровня масштабирования (т.е. 20) map.getZoom() корректно отражает 20.
Кто-нибудь испытал что-то подобное? Любые мысли или идеи (пусть и незначительные) были бы оценены - спасибо.
После работы с нашим партнером по составлению карт и пересмотра кода примера, который они предоставили, мы смогли убедиться, что проблема была вызвана неправильным допущением с нашей стороны:
getZoom() не возвращает целое число, а скорее float
В нашей оболочке С# мы неправильно предположили, что она вернула целое число и поэтому всякий раз, когда значение не было неявно конвертируется в целое число (например, когда оно не было 3.0, 4.0, 5.0 и т.д.) И вместо этого было десятичной частью (например, 3.462), это было преобразован в ноль (0) на С#.
Интересно отметить, что всякий раз, когда используются кнопки управления масштабированием карты (+ -), значение всегда увеличивается/уменьшается до следующего целого целого числа (например, 3,462 будет 3,0 или 4,0), но когда прижимается к зуму происходит событие, значения обычно содержат десятичную часть.
Мы также предположили, что существует 21 уровень масштабирования (от 0 до 20), но это также представляется неправильным предположением - если кто-нибудь знает какую-либо документацию, которая будет посвящена этому, это было бы полезно.
В любом случае, я думаю, это, по сути, случай, когда нужно более внимательно относиться к RTFM и переоценивать предположения.