googleMap onMarkerDrag не обновляет маркер .getPosition () Android Java - PullRequest
0 голосов
/ 21 января 2019

Я рисую 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);
}

1 Ответ

0 голосов
/ 23 января 2019

при перемещении маркера я ожидал, что centerMarker.position и backTeeMarker.position будут автоматически обновляться googleMap, учитывая, что он рисует его в новом месте, он должен понимать свое новое местоположение.однако оказалось, что это не так.

Похоже, что он обновляет перемещенную позицию «маркера» в пределах onMarkerDragListener, но никогда не переводит ее в позицию именованного объекта-маркера.и поэтому, чтобы обновить его вручную с помощью метода markerMoved(), когда я перемещал данный маркер, например centerMarker, мне пришлось добавить следующую строку: centerMarker.position(marker.getPosition()).

...