我通过长按事件创建了3个标记,因此创建了多边形。如果我尝试拖动第一个标记,则需要显示2到3的折线,但是它会创建内部点,并从显示折线的区域显示。
如果我拖动1个标记,我需要2到3的折线。 如果我拖动2个标记我需要1到3的折线。 如果我拖动3个标记,我需要从1到2的折线。
我的代码:
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;
}
答案 0 :(得分:0)
拖动标记时立即使用以下逻辑更新多边形。
删除早期的多边形
if(polygon!= null) polygon.remove();
{{1}}