Иногда при попытке получить промежуток Широты или промежуток Долготы mapview с getLatitudeSpan () и getLongitudeSpan () я добираюсь 0 и 360*1E6 соответственно. Этого всегда не происходит, но это - проблема, кто-либо получил эту проблему? Какие-либо обходные решения? Я пытался использовать getProjection () также, но я получаю ту же проблему. Вот часть кода:
MapView mapView = (MapView) findViewById(R.id.mapview);
int lat = mapView.getLatitudeSpan(); // sometimes returns 0
int long = mapView.getLongitudeSpan(); // sometimes returns 360*1E6
Я бы обнаружил условие и запланировал вашу работу, чтобы повторить попытку через несколько сотен миллисекунд. AFAIK, эти значения в конечном итоге станут доступны, но они могут быть довольно зависимыми от времени. Теоретически их следует рассчитывать после того, как вы установили центр и масштаб, но я подозреваю, что на самом деле они не вычисляются до тех пор, пока не будет отрисован MapView
, и, возможно, только после того, как некоторые данные карты из Интернет скачивается.
Итак, изолируйте свой код, который зависит от этих диапазонов, в метод. Вызовите этот метод из onCreate ()
и AsyncTask
, вероятно, как вы это делаете сегодня.Но добавьте логику обнаружения, чтобы найти недопустимые значения, затем вызовите postDelayed ()
в вашем MapView
(или другом View
), чтобы снова вызвать ваш метод после несколько сотен миллисекунд, если значения недействительны. Вам также может потребоваться добавить какой-то счетчик, чтобы вы не могли бесконечно заниматься этим postDelayed ()
.
Это, конечно, взлом. Но поскольку компонент Google Maps не является открытым исходным кодом, трудно придумать что-то более надежное.