【问题标题】:googleMap onMarkerDrag not updating marker's .getPosition() Android JavagoogleMap onMarkerDrag 不更新标记的 .getPosition() Android Java
【发布时间】: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


    【解决方案1】:

    在移动标记时,我希望 googleMap 会自动更新 centerMarker.position 和 backTeeMarker.position,因为它正在将它绘制在一个新的地方,它必须了解它的新位置。然而,事实并非如此。

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

    【讨论】:

      猜你喜欢
      • 2013-02-27
      • 2013-11-19
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 2014-08-06
      相关资源
      最近更新 更多