I'm facing a real challenge which I hope you guys can help me figure out. I'm creating a polyline for given Position objects, and what I'd want to do, is to put a custom marker in the origin and make it move all through the polyline, not necessarily tracking a position, just moving over the polyline.
My first step was creating an ObjectAnimation object, and make it move in a line from one marker to another, but i'm not figuring out how can I make it move along my polyline and not in a line.
Thank you in advance, and any further information you guys need to clarify the issue, i'm viewing this topic at every time!
We have an example for this
you're correct in using an object animator, you also need to make use of a handler to keep updating the position.
// Animating the marker requires the use of both the ValueAnimator and a handler.
// The ValueAnimator is used to move the marker between the GeoJSON points, this is
// done linearly. The handler is used to move the marker along the GeoJSON points.
handler = new Handler();
runnable = new Runnable() {
@Override
public void run() {
// Check if we are at the end of the points list, if so we want to stop using
// the handler.
if ((points.size() - 1) > count) {
// Calculating the distance is done between the current point and next.
// This gives us the duration we will need to execute the ValueAnimator.
// Multiplying by ten is done to slow down the marker speed. Adjusting
// this value will result in the marker traversing faster or slower along
// the line
distance = (long) marker.getPosition().distanceTo(points.get(count)) * 10;
// animate the marker from it's current position to the next point in the
// points list.
ValueAnimator markerAnimator = ObjectAnimator.ofObject(marker, "position",
new LatLngEvaluator(), marker.getPosition(), points.get(count));
markerAnimator.setDuration(distance);
markerAnimator.setInterpolator(new LinearInterpolator());
markerAnimator.start();
// This line will make sure the marker appears when it is being animated
// and starts outside the current user view. Without this, the user must
// intentionally execute a gesture before the view marker reappears on
// the map.
map.getMarkerViewManager().update();
// Keeping the current point count we are on.
count++;
// Once we finish we need to repeat the entire process by executing the
// handler again once the ValueAnimator is finished.
handler.postDelayed(this, distance);
}
}
};
handler.post(runnable);