简体   繁体   中英

Google Map Polygon is not editable through Marker dragging

在此处输入图片说明 i created 3 markers through long click event, so its created polygon. If i try to drag first marker it needs to show polyline from 2 to 3. but its creating internal points and from that points on wards showing polyline.

if i drag 1 marker i need polyline from 2 to 3. if i drag 2 marker i need polyline from 1 to 3. if i drag 3 marker i need polyline from 1 to 2.

My Code:

map.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {
            @Override
            public void onMapLongClick(LatLng latLng) {

                String id = Utils.generateRandomNumber() + "";

                arrayListLatLngs.add(createMapPolygonData(latLng, id));

                map.addMarker(new MarkerOptions()
                        .position(latLng)
                        .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
                        .title(arrayListLatLngs.size() + "")
                        .snippet(id)
                        .draggable(true));

                if (arrayListLatLngs.size() > 1) {
                    if (polygon != null) {
                        polygon.remove();
                        polygon = null;
                    }

                    polygonOptions.add(latLng);
                    polygonOptions.strokeColor(Color.RED);
                    polygonOptions.fillColor(Color.parseColor("#40000000"));
                    polygon = map.addPolygon(polygonOptions);
                } else {
                    polygonOptions = new PolygonOptions().add(latLng);
                }

            }
        });


        map.setOnMarkerDragListener(new GoogleMap.OnMarkerDragListener() {

            @Override
            public void onMarkerDragStart(Marker marker) {
                AlertUtils.showLog("marker", "onMarkerDragEnd" + " marker id : " + marker.getTitle());
            }

            @Override
            public void onMarkerDrag(Marker marker) {
                AlertUtils.showLog("marker", "onMarkerDrag" + " marker id : " + marker.getTitle());

                if (arrayListLatLngs.size() > 1) {

                    for (int i = 0; i < arrayListLatLngs.size(); i++) {

                        MapPolygonData mapData = arrayListLatLngs.get(i);
                        AlertUtils.showLog("marker", "mapData" + " marker id : " + mapData.id);

                        if (marker.getSnippet().equals(mapData.id)) {

                            mapData.latitude = marker.getPosition().latitude;
                            mapData.longitude = marker.getPosition().longitude;
                            mapData.latLng = marker.getPosition();

                            arrayListLatLngs.set(i, mapData);

                            if (arrayListLatLngs.size() > 1) {

                                if (polygon != null) {
                                    polygon.remove();
                                    polygon = null;
                                }

                                polygonOptions.add(marker.getPosition());
                                polygonOptions.strokeColor(Color.RED);
                                polygonOptions.fillColor(Color.parseColor("#40000000"));
                                polygon = map.addPolygon(polygonOptions);

                                mapData.polygon=polygon;
                                arrayListLatLngs.set(i, mapData);

                            } /*else {
                                polygonOptions = new PolygonOptions().add(marker.getPosition());
                            }*/

                            break;
                        }
                    }
                }
            }



private MapPolygonData createMapPolygonData(LatLng latLng, String id) {
        MapPolygonData mapData = null;
        try {
            mapData = new MapPolygonData();
            mapData.id = id;
            mapData.latitude = latLng.latitude;
            mapData.longitude = latLng.longitude;
            mapData.latLng = latLng;
            mapData.title = id;
            mapData.snippet = id;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return mapData;
    }

while dragging marker instantly updating polygon using below logic.

  1. updating marker latlng in my arraylist.
  2. with help of loop created polygon.
  3. remove earlier polygon

    if (polygon != null) polygon.remove();

     public void onMarkerDrag(Marker marker) { AlertUtils.showLog("marker", "onMarkerDrag" + " marker id : " + marker.getTitle()); if (arrayListPolygonData.size() > 1) { //step 1 for (int i = 0; i < arrayListPolygonData.size(); i++) { MapPolygonData mapData = arrayListPolygonData.get(i); AlertUtils.showLog("marker", "mapData" + " marker id : " + mapData.id); if (marker.getSnippet().equals(mapData.id)) { mapData.latitude = marker.getPosition().latitude; mapData.longitude = marker.getPosition().longitude; mapData.latLng = marker.getPosition(); arrayListPolygonData.set(i, mapData); break; } } //step 2 polygonOptions = new PolygonOptions(); for (int i = 0; i < arrayListPolygonData.size(); i++) { MapPolygonData mapData = arrayListPolygonData.get(i); LatLng latLng = mapData.latLng; arrayListLatLngs.add(mapData.latLng); if (polygon != null) polygon.remove(); polygonOptions.add(latLng); polygonOptions.strokeColor(Color.RED); polygonOptions.fillColor(Color.parseColor("#40000000")); polygon = map.addPolygon(polygonOptions); } } } 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM