Osmdroid - полилиния не отображается плавно

Я использую библиотеку Osmdroid для отображения автономной карты и использую Polyline для рисования линии по карте. Но результирующая линия не является непрерывной. Если улица изогнута, то линия ломается.

пример ломаной линии

Мой код:

    Polyline polyline = new Polyline();
    ArrayList<GeoPoint> geoPoints = new ArrayList<>();
    // add Gepoint to array here.
    polyline.setPoints(geoPoints);
    polyline.setWidth(mywidth);
    polyline.setColor(mycolor);
    map.getOverlayManager().add(polyline);
    map.invalidate();

Как я могу решить это?


person Foxes    schedule 23.04.2018    source источник


Ответы (1)


Попробуйте изменить Paint полилинии.

Paint имеет два атрибута: соединение обводки и окончание обводки. Соединение штрихов определяет, как соединяются сегменты пути, а концы штрихов определяют, как заканчивается весь путь.

Учитывая, что можно предположить, что этот код решит проблему:

polyline.getPaint().setStrokeJoin(Paint.Join.ROUND)

Но не будет. Библиотека Osmdroiod явно оптимизирует производительность и не отображает всю полилинию как один путь. Вместо этого он отображает его в отдельных сегментах. Его внешний вид можно улучшить, установив обводку.

polyline.getPaint().setStrokeCap(Cap.Join.ROUND)
person Josef Adamcik    schedule 23.04.2018
comment
Привет Йозеф Адамчик. Я просто пытаюсь добавить ваш код в свой код, но это не работает. - person Foxes; 23.04.2018
comment
@Foxes Я вижу, я проверил исходный код библиотеки osmdroid, и оказалось, что это вызвано некоторыми аккуратными оптимизациями рендеринга. Попробуйте вместо этого использовать polyline.getPaint().setStrokeCap(Cap.ROUND);, это должно помочь и улучшить внешний вид полилинии. Я обновлю свой ответ соответственно. - person Josef Adamcik; 23.04.2018
comment
Я понял. Используя polyline.getPaint().setStrokeCap(Paint.Cap.ROUND); Спасибо за помощь @Josef Adamcik. Пожалуйста, поделитесь со мной библиотеками Osmdroid, которые вы видели. Я хотел бы знать ясно. - person Foxes; 24.04.2018
comment
Исходный код можно найти на github, класс полилинии: github.com/osmdroid/osmdroid/blob/ - person Josef Adamcik; 24.04.2018
comment
getPaint устарел? любой последний синтаксис? - person Hari Shankar S; 10.05.2021