Я рисую polyLines
между тремя markers
на GoogleMap
, два из которых являются подвижными.Я реализовал onMarkerDragListener
для моего fragment
.перемещение только одного из маркеров «кажется» работает правильно, пока я не переместлю и второй маркер.если я перемещаю 2-й маркер, то polyLine рисует из 2-го маркера, который я перемещаю, в исходное положение 1-го маркера, а не в обновленный, что говорит мне, что xMarker.getPosition()
не обновляется при перемещении маркера.Как я могу убедиться, что позиция xMarker обновляется во время перетаскивания?
Я попытался установить его как реализацию на уровне класса фрагмента, и я также попробовал это после создания карты следующим образом:
googleMap.setOnMarkerDragListener(new GoogleMap.OnMarkerDragListener() {
@Override
public void onMarkerDragStart(Marker marker) {
}
@Override
public void onMarkerDrag(Marker marker) {
}
@Override
public void onMarkerDragEnd(Marker marker) {
}
});
вот мой код (в настоящее время используется implements GoogleMap.OnMarkerListener
):
centerMarker = new MarkerOptions().position(
new LatLng(holeX, holeY)).title("CenterPoint");
backTeeMarker = new MarkerOptions().position(new LatLng(backTeeX,backTeeY)).title("BackTee");
flagMarker = new MarkerOptions().position(new LatLng(greenCenterX,greenCenterY)).title("flag");
centerMarker.draggable(true);
backTeeMarker.draggable(true);
flagMarker.draggable(false);
// adding marker
googleMap.addMarker(centerMarker);
googleMap.addMarker(backTeeMarker);
googleMap.addMarker(flagMarker);
backTeeToCenterPL = googleMap.addPolyline((new PolylineOptions())
.clickable(false)
.add(new LatLng(backTeeX, backTeeY),
new LatLng(centerMarker.getPosition().latitude, centerMarker.getPosition().longitude)
));
centerToFlagPL = googleMap.addPolyline((new PolylineOptions())
.clickable(false)
.add(new LatLng(centerMarker.getPosition().latitude,centerMarker.getPosition().longitude),
new LatLng(greenCenterX,greenCenterY)));
@Override
public void onMarkerDragStart(Marker marker) {
markerMoved(marker);
}
@Override
public void onMarkerDrag(Marker marker) {
markerMoved(marker);
}
@Override
public void onMarkerDragEnd(Marker marker) {
markerMoved(marker);
}
public void markerMoved(Marker marker) {
if (marker.getTitle().equals("CenterPoint")) {
backTeeToCenterPL.remove();
backTeeToCenterPL = googleMap.addPolyline((new PolylineOptions())
.clickable(false)
.add(new LatLng(backTeeMarker.getPosition().latitude, backTeeMarker.getPosition().longitude),
new LatLng(marker.getPosition().latitude, marker.getPosition().longitude)
));
backTeeToCenterPL.setColor(Color.WHITE);
centerToFlagPL.remove();
centerToFlagPL = googleMap.addPolyline((new PolylineOptions())
.clickable(false)
.add(new LatLng(marker.getPosition().latitude, marker.getPosition().longitude),
new LatLng(greenCenterX, greenCenterY)));
centerToFlagPL.setColor(Color.WHITE);
}
}
if (marker.getTitle().equals("BackTee")) {
backTeeToCenterPL.remove();
backTeeToCenterPL = googleMap.addPolyline((new PolylineOptions())
.clickable(false)
.add(new LatLng(marker.getPosition().latitude, marker.getPosition().longitude),
new LatLng(centerMarker.getPosition().latitude, centerMarker.getPosition().longitude)
));
backTeeToCenterPL.setColor(Color.WHITE);
centerToFlagPL.remove();
centerToFlagPL = googleMap.addPolyline((new PolylineOptions())
.clickable(false)
.add(new LatLng(centerMarker.getPosition().latitude, centerMarker.getPosition().longitude),
new LatLng(greenCenterX, greenCenterY)));
centerToFlagPL.setColor(Color.WHITE);
}