Есть ли способ нарисовать пунктирную линию, используя полилинию osmdroid на карте osm?

В настоящее время я использую ломаную линию для рисования трека gpx на карте OSM.

Мне интересно, есть ли способ рисовать пунктирные линии вместо сплошных с помощью osmdroid? Вот мой код:

        Double firstLat, lastLat, firstLong, lastLong;
        firstLat = lastLat = firstLong = lastLong = -100.0;


        for (Track track : gpx.getTracks()) {

                for (TrackSegment trackSegment : track.getTrackSegments()) {


                        Polyline line = new Polyline(mMap);
                        ArrayList<GeoPoint> trajet = new ArrayList<>();

                        for (TrackPoint trackPoint : trackSegment.getTrackPoints()) {
                            GeoPoint geoPoint = new GeoPoint(trackPoint.getLatitude(), trackPoint.getLongitude());
                            trajet.add(geoPoint);

                            if (firstLat == -100.0) { firstLat = trackPoint.getLatitude(); }

                            if (lastLat == -100.0) { lastLat = trackPoint.getLatitude(); }

                            if (firstLong == -100.0) { firstLong = trackPoint.getLongitude(); }

                            if (lastLong == -100.0) { lastLong = trackPoint.getLongitude(); }

                            if (trackPoint.getLatitude() < firstLat) { firstLat = trackPoint.getLatitude(); }

                            if (trackPoint.getLatitude() > lastLat) { lastLat = trackPoint.getLatitude(); }

                            if (trackPoint.getLongitude() < firstLong) { firstLong = trackPoint.getLongitude(); }

                            if (trackPoint.getLongitude() > lastLong) { lastLong = trackPoint.getLongitude(); }
                        }



                        line.setPoints(trajet);
                        line.setInfoWindow(null);
                        line.setColor(Color.rgb(0,191,255));

                        mMap.getOverlays().add(0, line);
                        mMap.invalidate();
        }

Спасибо !

РЕДАКТИРОВАТЬ : Использование line.getPaint().setPathEffect(new DashPathEffect(new float[]{10, 20}, 0)); работает для этой проблемы.

В общем, следует просмотреть документацию указанной библиотеки и указанного класса и проверить наличие метода для выполнения желаемого действия или эффекта. В данном случае это Полилиния osmdroid. Есть только setColor() и setWidth(). Или можно просто найти «пунктирную линию osmdroid» и найти обсуждение этого в системе отслеживания проблем osmdroid. Похоже, в настоящее время это невозможно.

Markus Kauppinen 20.06.2019 14:19

Но в случае osmdroid, если вам не хватает функции, всегда стоит посмотреть на бонусный пакет osmdroid. Хотя я не думаю, что это как-то меняет Polyline.

Markus Kauppinen 20.06.2019 14:20

Спасибо @MarkusKauppinen за ваш ответ, я посмотрю эти ссылки.

Flint12 20.06.2019 14:23
4
3
758
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Код, работающий с использованием getpaint().setPathEffect():

Double firstLat, lastLat, firstLong, lastLong;
        firstLat = lastLat = firstLong = lastLong = -100.0;


        for (Track track : gpx.getTracks()) {

                for (TrackSegment trackSegment : track.getTrackSegments()) {


                        Polyline line = new Polyline(mMap);
                        ArrayList<GeoPoint> trajet = new ArrayList<>();

                        for (TrackPoint trackPoint : trackSegment.getTrackPoints()) {
                            GeoPoint geoPoint = new GeoPoint(trackPoint.getLatitude(), trackPoint.getLongitude());
                            trajet.add(geoPoint);

                            if (firstLat == -100.0) { firstLat = trackPoint.getLatitude(); }

                            if (lastLat == -100.0) { lastLat = trackPoint.getLatitude(); }

                            if (firstLong == -100.0) { firstLong = trackPoint.getLongitude(); }

                            if (lastLong == -100.0) { lastLong = trackPoint.getLongitude(); }

                            if (trackPoint.getLatitude() < firstLat) { firstLat = trackPoint.getLatitude(); }

                            if (trackPoint.getLatitude() > lastLat) { lastLat = trackPoint.getLatitude(); }

                            if (trackPoint.getLongitude() < firstLong) { firstLong = trackPoint.getLongitude(); }

                            if (trackPoint.getLongitude() > lastLong) { lastLong = trackPoint.getLongitude(); }
                        }



                        line.setPoints(trajet);
                        line.setInfoWindow(null);
                        line.setColor(Color.rgb(0,191,255));
                        line.getPaint().setPathEffect(new DashPathEffect(new float[]{10, 20}, 0));


                        mMap.getOverlays().add(0, line);
                        mMap.invalidate();
        }

Другие вопросы по теме