How to animate google map v2 marker on a polyline path?

I am already creating an application using Google V2 maps and overlay 2 markers on the map. The first token is to get the user's current location, and the second token is the user's destination. And then I add the decodePoly method to draw a line between these markers. I also add a method to provide information about the duration, start address, and destination address using the warning dialog.

route

So, when I click on the second marker, I want to animate this marker to “move” to the first marker. But my problem is that the second marker does not move along the path of the polyline. You can see in the image below:

result

This is MapActivity.java:

@Override public boolean onMarkerClick(Marker arg0) { // if user click the first marker if(this.lokasi_asli.equals(arg0)){ AlertDialog.Builder alert = new AlertDialog.Builder(MapActivity.this); alert.setTitle("First Position") .setIcon(R.drawable.ic_launcher) .setCancelable(true) .setMessage("First Position : " + "\n" + loc_a) .setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }) .setNegativeButton("No", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); alert.show(); } else if (this.lokasi_tujuan.equals(arg0)) { //if user click second marker final boolean hideMarker = false; final Handler handler = new Handler(); final long start = SystemClock.uptimeMillis(); Projection proj = gmap.getProjection(); Point startPoint = proj.toScreenLocation(lokasi_tujuan.getPosition()); final LatLng startLatLng = proj.fromScreenLocation(startPoint); final long duration = 5000; final Interpolator interpolator = new LinearInterpolator(); handler.post(new Runnable() { @Override public void run() { long elapsed = SystemClock.uptimeMillis() - start; float t = interpolator.getInterpolation((float) elapsed / duration); double longid = t * lokasi_asli.getPosition().longitude + (1-t) * startLatLng.longitude; double latid = t * lokasi_asli.getPosition().latitude + (1-t) * startLatLng.latitude; lokasi_tujuan.setPosition(new LatLng(latid, longid)); if(t < 1.0){ // handler.postDelayed(this, 16); } else { if(hideMarker){ lokasi_tujuan.setVisible(false); } else { lokasi_tujuan.setVisible(true); } } } }); 

fetching data from google map:

 @Override protected void onPostExecute(Void result){ super.onPostExecute(result); if(doc != null){ NodeList _nodelist = doc.getElementsByTagName("status"); Node node1 = _nodelist.item(0); String _status1 = node1.getChildNodes().item(0).getNodeValue(); if(_status1.equalsIgnoreCase("OK")) { NodeList _nodelist_path = doc.getElementsByTagName("overview_polyline"); Node node_path = _nodelist_path.item(0); Element _status_path = (Element)node_path; NodeList _nodelist_destination_path = _status_path.getElementsByTagName("points"); Node _nodelist_dest = _nodelist_destination_path.item(0); String _path = _nodelist_dest.getChildNodes().item(0).getNodeValue(); List<LatLng> directionPoint = decodePoly(_path); PolylineOptions rectLine = new PolylineOptions().width(10).color(Color.RED).geodesic(true); for (int i = 0; i < directionPoint.size(); i++) { rectLine.add(directionPoint.get(i)); } gmap.addPolyline(rectLine); mark_opt.position(new LatLng(dest_lat, dest_long)); mark_opt.draggable(true); mark_opt.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)); lokasi_tujuan = gmap.addMarker(mark_opt); } else { Toast.makeText(MapActivity.this, "Maaf, Tidak dapat menemukan rute tujuan\nCoba pilih rute lain yang mendekati", Toast.LENGTH_LONG).show(); } progres_dlg.dismiss(); } } } 

How to make the second marker move along the path of the polyline? Any ideas or help would be greatly appreciated. Environment: Windows 7, Eclipse, Genymotion.

+6
source share
2 answers

Check out the tutorial, which shows how to animate a marker on a map’s route. It also provides code on GitHub that you can try.

Check HERE

Hope this helps you.

+5
source

See If you can use marker.setPosition (LatLng)

Position The LatLng value for the marker position on the map. You can change this value at any time if you want to move the marker.

+1
source

All Articles