4

I'm currently developing an android application that would allow users to draw Polylines with Markers or point in the polyline when user long press on points how to dragline with points move also line would be move on the map. how do I achieve this I drag marker but cant move marker

public class MainMapActivity extends AppCompatActivity {

GeoPoint startPoint;
MapView map;
Road road;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_map);
    map = (MapView) findViewById(R.id.map);
    map.setTileSource(TileSourceFactory.MAPNIK);
    map.setBuiltInZoomControls(true);
    map.setMultiTouchControls(true);
    GpsTracking gps=new GpsTracking(MainMapActivity.this);
    if (gps.canGetLocation()) {
        double latitude = gps.getLatitude();
        double longitude = gps.getLongitude();
        startPoint = new GeoPoint(latitude, longitude);
        Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show();
    } else {
        gps.showSettingsAlert();
    }

  //  GeoPoint startPoint = new GeoPoint(48.13, -1.63);
    IMapController mapController = map.getController();
    mapController.setZoom(17);
    mapController.setCenter(startPoint);

    Marker startMarker = new Marker(map);
    startMarker.setPosition(startPoint);
    startMarker.setDraggable(true);
    startMarker.setOnMarkerDragListener(new OnMarkerDragListenerDrawer());
    startMarker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM);
    map.getOverlays().add(startMarker);


    //Set-up your start and end points:
    RoadManager roadManager = new OSRMRoadManager(this);
    ArrayList<GeoPoint> waypoints = new ArrayList<GeoPoint>();
    waypoints.add(startPoint);
    GeoPoint endPoint = new GeoPoint(31.382108, 74.260107);
    waypoints.add(endPoint);

    // retreive the road between those points:
    Road road = roadManager.getRoad(waypoints);

    // build a Polyline with the route shape:
    Polyline polyline=new Polyline();
    polyline.setOnClickListener(new Polyline.OnClickListener() {
        @Override
        public boolean onClick(Polyline polyline, MapView mapView, GeoPoint eventPos) {
            return false;
        }
    });
    Polyline roadOverlay = RoadManager.buildRoadOverlay(road);

    //Polyline to the overlays of your map:
    map.getOverlays().add(roadOverlay);

    //Refresh the map!
    map.invalidate();
   //3. Showing the Route steps on the map
    FolderOverlay roadMarkers = new FolderOverlay();
    map.getOverlays().add(roadMarkers);
    Drawable nodeIcon = ResourcesCompat.getDrawable(getResources(), R.drawable.marker_node, null);
    for (int i = 0; i < road.mNodes.size(); i++) {
        RoadNode node = road.mNodes.get(i);
        Marker nodeMarker = new Marker(map);
        nodeMarker.setDraggable(true);
        nodeMarker.setOnMarkerDragListener(new OnMarkerDragListenerDrawer());
        nodeMarker.setPosition(node.mLocation);
        nodeMarker.setIcon(nodeIcon);

        //4. Filling the bubbles
        nodeMarker.setTitle("Step " + i);
        nodeMarker.setSnippet(node.mInstructions);
        nodeMarker.setSubDescription(Road.getLengthDurationText(this, node.mLength, node.mDuration));
        Drawable iconContinue = ResourcesCompat.getDrawable(getResources(), R.drawable.ic_continue, null);
        nodeMarker.setImage(iconContinue);
        //4. end

        roadMarkers.add(nodeMarker);
    }
}


class OnMarkerDragListenerDrawer implements Marker.OnMarkerDragListener {
    ArrayList<GeoPoint> mTrace;
    Polyline mPolyline;

    OnMarkerDragListenerDrawer() {
        mTrace = new ArrayList<GeoPoint>(100);
        mPolyline = new Polyline();
        mPolyline.setColor(0xAA0000FF);
        mPolyline.setWidth(2.0f);
        mPolyline.setGeodesic(true);
        map.getOverlays().add(mPolyline);
    }

    @Override public void onMarkerDrag(Marker marker) {
        //mTrace.add(marker.getPosition());
    }

    @Override public void onMarkerDragEnd(Marker marker) {
        mTrace.add(marker.getPosition());
        mPolyline.setPoints(mTrace);
        map.invalidate();
    }

    @Override public void onMarkerDragStart(Marker marker) {
        //mTrace.add(marker.getPosition());
    }
}

}

Does anyone know how I can achieve this? above is a snippet of my codes. Thanks!

HassanUsman
  • 1,787
  • 1
  • 20
  • 38
Meerz
  • 158
  • 1
  • 10

0 Answers0