Question

I'm currently developing an android application that would allow users to draw Polylines with Markers on the map. Right now, I would like to implement a feature whereby the polyline will be draggable whenever the marker is being dragged and update the Polyline when the onMarkerDragEnd() method is being called. Does anyone know how I can achieve this? Below is a snippet of my codes. Thanks!

googleMap.setOnMapClickListener(new OnMapClickListener(){

        @Override
        public void onMapClick(LatLng point) {
            // TODO Auto-generated method stub
        if(drawMode == true && arrayPoints.isEmpty()){

            MarkerOptions marker=new MarkerOptions();
            marker.position(point); 
            googleMap.addMarker(marker).setDraggable(true); 
            arrayPoints.add(point);
            marker.draggable(true);


        }
        else if(drawMode == true){
            Log.e("","IN SECOND");
            MarkerOptions marker=new MarkerOptions();
            marker.position(point); 
            googleMap.addMarker(marker).setDraggable(true); 
            arrayPoints.add(point); 
            PolylineOptions polylineOptions = new PolylineOptions(); 
            polylineOptions.color(Color.BLUE); 
            polylineOptions.width(5);  
            polylineOptions.addAll(arrayPoints); 
            Polyline drawRoute = googleMap.addPolyline(polylineOptions);
        }
        }

    });
Was it helpful?

Solution

At first make Polyline drawRoute a field instead of a local variable. Then you can update the polyline inside onMarkerDragEnd by calling drawRoute.setPoints(arrayPoints).

Then you need in addition a Java-Map, which keeps track of which marker was responsible for which point in the array. The map would have the marker-ID as key and the array-index as value. (You get the marker ID from the marker which is returned by map.addMarker) When a marker is dragged, you can find out the index of the corresponding Point in arrayPoints using the marker-ID and said Java-Map. With that, you can exchange the point in the array and call drawRoute.setPoints again.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top