【发布时间】:2019-06-15 06:08:39
【问题描述】:
我在GoogleMap 上的三个markers 之间绘制polyLines,其中两个是可移动的。我已经为我的fragment 实现了onMarkerDragListener。只移动一个标记“似乎”可以正常工作,直到我也移动第二个标记。如果我移动第二个标记,则折线从第二个标记开始绘制,我将移动到第一个标记的原始位置,而不是更新后的位置,这告诉我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);
}
【问题讨论】:
标签: java android android-fragments google-maps-markers google-maps-android-api-2