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.
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.