googleMap onMarkerDrag 不更新标记的 .getPosition() Android Java

googleMap onMarkerDrag not updating marker's .getPosition() Android Java

我在 GoogleMap 上的三个 markers 之间绘制 polyLines,其中两个是可移动的。我已将 onMarkerDragListener 应用到我的 fragment。仅移动一个标记 'seems' 即可正常工作,直到我也移动第二个标记。如果我移动第二个标记,折线从第二个标记绘制,我正在移动到第一个标记的原始位置,而不是更新后的位置,这告诉我 xMarker.getPosition() 在标记为感动。如何确保 xMarker 的位置在拖动过程中得到更新?

我尝试将其设置为片段 class 级别的实现,并且在创建地图后也尝试过,如下所示:

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);
}

当移动标记时,我预计 centerMarker.position 和 backTeeMarker.position 会被 googleMap 自动更新,因为它是在一个新的地方绘制它,它必须了解它是新的地点。然而,事实并非如此。

它似乎更新了 onMarkerDragListener 中移动的 'marker' 位置,但从未将其转换为命名标记对象的位置。因此,要使用 markerMoved() 方法手动更新它,当我移动给定标记(例如 centerMarker)时,我必须添加以下行: centerMarker.position(marker.getPosition()).