2017-06-16 4 views
0

Ich kann ein Polygon mit der singleTapConfirmedHelper() machen. Aber ich habe immer noch ein Problem. Wie entferne ich die Linie (blauer Pfeil) beim Hinzufügen eines vierten Punktes (roter Kreis)? Die Zeile verschwindet nicht, nachdem ich den vierten Punkt hinzugefügt habe. Ich hoffe ich habe es gut erklärt. Vielen Dank.Osmdroid Polygon - Hinzufügen eines neuen Punktes in einem Dreieck

@Override 
    public boolean singleTapConfirmedHelper(GeoPoint p) { 

    Polygon circle = new Polygon(); 
    circle.setPoints(Polygon.pointsAsCircle(p, 2.0)); 
    circle.setFillColor(0x12121212); 
    circle.setStrokeColor(Color.RED); 
    circle.setStrokeWidth(2); 
    map.getOverlays().add(circle); 
    circle.setInfoWindow(new 
    BasicInfoWindow(org.osmdroid.bonuspack.R.layout.bonuspack_bubble, 
    map)); 
    circle.setTitle("Centered on " + p.getLatitude() + "," + 
    p.getLongitude()); 

    List<GeoPoint> pts = new ArrayList<>(); 
    pts.add(new GeoPoint(p.getLatitude(), p.getLongitude())); 

    Polygon polygon = new Polygon(ctx); 
    polygon.setTitle("This is a polygon"); 
    polygon.setSubDescription(Polygon.class.getCanonicalName()); 
    polygon.setFillColor(0x12121212); 
    polygon.setVisible(true); 
    polygon.setStrokeColor(Color.BLACK); 
    polygon.setStrokeWidth(4); 
    polygon.setInfoWindow(new 
    BasicInfoWindow(R.layout.bonuspack_bubble, map)); 
    polygon.setPoints(pts); 
    map.getOverlays().add(polygon); 

    map.invalidate(); 

    return true; 
} 

screenshot

Antwort

1

Sie zeichnen für jeden Punkt neuen Polygon hinzugefügt und Sie entfernen nicht alte. Also wird theMapView sie alle übereinander zeichnen. Sie sollten zuvor gezeichnete Polygone aus der Liste der Overlays entfernen, bevor Sie map.invalidate() aufrufen.

Polygon polygon = new Polygon(ctx); 
polygon.setTitle("This is a polygon"); 
polygon.setSubDescription(Polygon.class.getCanonicalName()); 
polygon.setFillColor(0x12121212); 
polygon.setVisible(true); 
polygon.setStrokeColor(Color.BLACK); 
polygon.setStrokeWidth(4); 
polygon.setInfoWindow(new 
BasicInfoWindow(R.layout.bonuspack_bubble, map)); 
polygon.setPoints(pts); 
map.getOverlays().add(polygon); 
if (oldPolygon != null) { 
    map.getOverlays().remove(oldPolygon); 
} 
oldPolygon = polygon; 

map.invalidate(); 
+0

Hallo! Danke für die Antwort. Ich habe oben die if-Bedingung hinzugefügt, jetzt zeichnet es nicht nur die Punkte. –

+1

Sorry, ich habe mich vertippt, es ist oldPolygon, das entfernt werden sollte. "map.getOverlays(). remove (oldPolygon)". Ich werde diese Zeile in der Antwort beheben. –

+0

OMG !! Vielen Dank. Wie du sehen kannst, habe ich diesen Teil am 16. Juni veröffentlicht. Ich habe diesen Teil meines Projekts übersprungen, weil es mich verrückt macht. Ich sollte wirklich an meiner Logik arbeiten. Danke Josef. Ich schätze es sehr. Aber ich bin immer noch verwirrt, wie können wir das alte Polygon entfernen, wenn wir es gar nicht erst hinzugefügt haben? –

Verwandte Themen