Как стать автором
Обновить

Комментарии 16

Уберите эти идиотские флажки, они только мешаются.
Или перекрасьте их.
Ну и еще: MapView пихать как единственного ребенка RelativeLayout… Тоже не комильфо.
Это же пример использования, а не готовое приложение )
Примеры тоже надо правильно писать, дабы ученики не повторяли ошибок.
Да, я солидарен с BOOMik
По примерам ведь копи-пастом пойдут ваши ляпы.
не согласен, цель примера показать работу с апи яндекса, а не выбор графики и компановки разметки
Ну окей, отбросим графику и разметку.
BitmapFactory.decodeResource(
this.c.getContext().getResources(),
R.drawable.flag2leftred)
Тут вот какая-никакая, а утечка памяти. Не лучше-ли будет декодировать картинку один раз, и не мучить хип?

path2.lineTo(p2.getX() + 5, p2.getY() + 8.66f);
path2.lineTo(p2.getX() — 5, p2.getY() + 8.66f);
Вот эти магические числа не поясните? Что за 5 и 8.66?
Тут вот какая-никакая, а утечка памяти. Не лучше-ли будет декодировать картинку один раз, и не мучить хип?

согласен, плюс еще можно проверять, что точки попадают в видимую область карты, и не рисовать невидимые

Вот эти магические числа не поясните? Что за 5 и 8.66?

Это константы, которые расчитал заранее, для определения недостающих вершин равностороннего треугольника, который образует стрелку
Большое спасибо за статью, очень помогла. А у вас получилось определить, попадают ли точки в видимую область карты? В моем случае, метод draw() почему-то вызывается только тогда, когда видна первая точка. Таким образом получается, что я не могу отрисовывать полилинию по частям, только целиком, что очень нехорошо.
у контролера есть метод getGeoPoint(ScreenPoint) передавай туда размеры своей карты MapView.getHeight, MapView.getWidth для получения нижней правой координаты и 0,0 для получения верхней
Да нет, здесь проблема не в получении координат. Проблема в том, что метод MyOverlayIRender.draw() отвечающий за отрисовку, постоянно вызывается только тогда, когда на экране видна первая точка полилинии. Как только она уходит из поля зрения, перерисовка перестает работать, MyOverlayIRender.draw() просто не вызывается. Если отрисовывать сразу всю полилинию целиком, то тогда все работает нормально. Только карта начинает сильно тормозить. Видимо, нужно как-то сообщить оверлэю, что там тоже должно быть что-то нарисовано.
MapController.notifyRepaint()?
Нет, это не помогло и не помогло совершенно правильно: ошибка нашлась, банальная опечатка. Тем не менее, выяснилась другая особенность. Метод draw() вызывается только если на экране присутствует хотя бы одна из точек. Если ни одна из точек не отображается, то и линия исчезает. Таким образом легко можно получить ситуацию, когда например одна точка далеко справа за границей экрана, а другая далеко слева и линия между ними не будет отображаться. Есть ли идеи, как это можно исправить?
Да, действительно выход. Добавил в OnMapListener / MapEvent.MSG_SCROLL_END автодобавление невидимой точки по центру. Спасибо!
в Overlay несколько иначе проверяют видимость OverlayItem, посмотри, может так быстрее будет
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации