Google Map v2 Marker Animation
Asked Answered
H

3

8

Do anyone have idea how this animation's implementation is possible in google map api v2. Check out this here. I would like to know how this is done. Please let me know if anyone have any sample code regarding this.

Thanks in advance.

Hanhana answered 20/12, 2012 at 12:37 Comment(1)
For animating polyline routes github.com/amalChandran/google-maps-route-animationInextricable
S
9

I found a solution that worked for me:

final LatLng target = NEW_LOCATION;

final long duration = 400;
final Handler handler = new Handler();
final long start = SystemClock.uptimeMillis();
Projection proj = map.getProjection();

Point startPoint = proj.toScreenLocation(marker.getPosition());
final LatLng startLatLng = proj.fromScreenLocation(startPoint);

final Interpolator interpolator = new LinearInterpolator();
handler.post(new Runnable() {
    @Override
    public void run() {
        long elapsed = SystemClock.uptimeMillis() - start;
        if (elapsed > duration) {
            elapsed = duration;
        }
        float t = interpolator.getInterpolation((float) elapsed / duration);
        double lng = t * target.longitude + (1 - t) * startLatLng.longitude;
        double lat = t * target.latitude + (1 - t) * startLatLng.latitude;
        marker.setPosition(new LatLng(lat, lng));
        if (t < 1.0) {
            // Post again 10ms later.
            handler.postDelayed(this, 10);
        } else {
            // animation ended
        }
    }
});
Seigel answered 5/2, 2013 at 14:9 Comment(3)
Interpolator interpolator = new LinearInterpolator(); This line giving error ... "Incompatible type"Reductive
make sure you import: import android.view.animation.Interpolator; import android.view.animation.LinearInterpolator; And not the other Interpolator.Modie
i found a bug. Is necessary to add this two lines: if (elapsed>duration) elapsed=duration;Orientalism
W
7

You are welcome to change the position of a Marker at any point by calling setPosition(). You are welcome to change the position of the "camera" (i.e., the map's center and zoom level) at any point by applying a CameraUpdate object using moveTo() or animateTo() on GoogleMap. Combining these with a light timing loop (e.g., using postDelayed()) should allow you to achieve a similar animation effect.

Witty answered 20/12, 2012 at 12:43 Comment(2)
Can you please provide some code so that i can get better idea of implementation. I have tried to animate the map using CameraUpdateFactory.scrollBy method.. its working fine even. But not found any way of animating the on the path on the map.Hanhana
@Grishu: "Can you please provide some code so that i can get better idea of implementation" -- I do not have any lying around that handles your scenario. "But not found any way of animating the on the path on the map" -- you have to find "the path on the map" yourself, using some Web service (presumably), then update the Marker positions to be various points along that path.Witty
C
0

Great news is that he Google Map API v2 gives the new Camera controls. You can check the new features and how to use them directly here on the Youtube channel of the Android developers team.

It also provides animate, tilt, bearing ... but I think the video is very detailed and also talks about applications like the one in your example.

Have fun, and give me a link when you finish your app.

Cerys answered 1/2, 2013 at 23:45 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.