Last active
May 20, 2020 16:56
-
-
Save piruin/94dc141e7736851b002c to your computer and use it in GitHub Desktop.
android marker drop in animation on google maps
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
protected Marker addMarker(LatLng position, @ColorRes int color, boolean draggable) { | |
MarkerOptions markerOptions = new MarkerOptions(); | |
markerOptions.draggable(draggable); | |
markerOptions.icon(MapUtils.getIconBitmapDescriptor(getActivity(), color)); | |
markerOptions.position(position); | |
Marker pinnedMarker = googleMap.addMarker(markerOptions); | |
startDropMarkerAnimation(pinnedMarker); | |
return pinnedMarker; | |
} | |
private void startDropMarkerAnimation(final Marker marker) { | |
final LatLng target = marker.getPosition(); | |
final Handler handler = new Handler(); | |
final long start = SystemClock.uptimeMillis(); | |
Projection proj = getMap().getProjection(); | |
Point targetPoint = proj.toScreenLocation(target); | |
final long duration = (long) (200 + (targetPoint.y * 0.6)); | |
Point startPoint = proj.toScreenLocation(marker.getPosition()); | |
startPoint.y = 0; | |
final LatLng startLatLng = proj.fromScreenLocation(startPoint); | |
final Interpolator interpolator = new LinearOutSlowInInterpolator(); | |
handler.post(new Runnable() { | |
@Override | |
public void run() { | |
long elapsed = SystemClock.uptimeMillis() - start; | |
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 16ms later == 60 frames per second | |
handler.postDelayed(this, 16); | |
} | |
} | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Kotlin : https://gist.github.com/keithics/e860c55de09d73794c7854d5a8d9f9b3