#android #android-mapview #itemizedoverlay
#Android #android-mapview #itemizedoverlay
Вопрос:
У меня есть класс:
public class WaypointOverlay extends ItemizedOverlay<OverlayItem>
Это переопределяет draw()
метод ItemizedOverlay
.
В моей деятельности у меня есть карта со многими элементами наложения, а также список. Я заметил из выходных данных traceviewer и logcat, что MapView.onDraw()
вызывалось много раз, даже когда карта оставалась нетронутой. Это привело к тому, что список и карта действительно перестали отвечать (когда мой WaypointOverlay
класс просто возвращается из этих onDraw
вызовов, все работает хорошо)
Как я могу сделать так, чтобы onDraw
вызовы выполнялись реже — в идеале только при выполнении MapView
изменений? Я попытался, в onDraw
, проверить, имеет ли MapView
тот же диапазон широты / lon, что и в последнем onDraw
вызове, и рисовать, только если они разные. Это приводило к тому, что OverlayItems
отображалось только при панорамировании или масштабировании карты.
Есть идеи по повышению производительности?
Комментарии:
1. Похоже, что выполняется множество вызовов «invalidate ()». Ваш код выполняет этот вызов?
2. Я не делаю вызовов MapView.invalidate().
Ответ №1:
Я думаю, что, возможно, решил эту проблему (по крайней мере, для моего случая). В моем приложении пользователь может отойти от карты, а затем вернуться к ней, выполняя одно и то же действие. Каждый раз, когда пользователь возвращался к карте, я повторно добавлял все созданные мной наложения. Это означало, что на карте было слишком много наложений — я не мог их видеть, потому что они перекрывались. Вызов MapView.getOverlays().clear() значительно улучшил работу карты и списка.