|
(0020575)
|
|
zed
|
21-12-2025 16:47
(edited on: 21-12-2025 16:59) |
|
Обложил логами процесс отрисовки тайлов и выяснил, что при смене зума дело обстоит так: вначале текущая тайловая матрица несколько раз перерисовывается с растягиванием, потом она "соображает", что нужно взять тайлы со следующего зума, полностью очищается и начинает готовить тайлы с этого нового зума. Тут происходит новая отрисовка, и может так оказаться, что ещё не все тайлы готовы и получается частичное отображение, т.е. моргание.
Придумал и реализовал следующий фикс:
1. Перед сменой зума запоминается текущая матрица тайлов (тех, что отображаются на экране в данный момент).
2. Во время зумирования выводится кэшированная матрица из п.1 и поверх неё — новая матрица с динамически подгружаемыми тайлами.
3. Когда зумирование завершается, матрица из п.1 продолжает использоваться некоторое время, пока новая матрица не завершит своё обновление, либо пока пользователь не сдвинет карту или не сменит зум.
На последнем этапе возникает трудность: приходится угадывать, когда обновление матрицы завершено, так как никакой нотификации для этого не предусмотрено. В итоге могут быть случаи, когда кэшированная матрица всё же устаревает, а обновлённая ещё не до конца готова. И тогда временные тайлы исчезают, и карта частично очищается. Получается не идеально, но уже, в общем-то, терпимо.
|
|