diff --git a/library/src/main/java/com/google/maps/android/clustering/view/ClusterRenderer.java b/library/src/main/java/com/google/maps/android/clustering/view/ClusterRenderer.java index 136729de9..c89621f5b 100644 --- a/library/src/main/java/com/google/maps/android/clustering/view/ClusterRenderer.java +++ b/library/src/main/java/com/google/maps/android/clustering/view/ClusterRenderer.java @@ -51,6 +51,11 @@ public interface ClusterRenderer { */ void setAnimation(boolean animate); + /** + * Sets the length of the animation in milliseconds. + */ + void setAnimationDuration(long animationDurationMs); + /** * Called when the view is added. */ diff --git a/library/src/main/java/com/google/maps/android/clustering/view/DefaultClusterRenderer.java b/library/src/main/java/com/google/maps/android/clustering/view/DefaultClusterRenderer.java index 5854486be..a1cec59a5 100644 --- a/library/src/main/java/com/google/maps/android/clustering/view/DefaultClusterRenderer.java +++ b/library/src/main/java/com/google/maps/android/clustering/view/DefaultClusterRenderer.java @@ -81,6 +81,7 @@ public class DefaultClusterRenderer implements ClusterRen private final ClusterManager mClusterManager; private final float mDensity; private boolean mAnimate; + private long mAnimationDurationMs; private final Executor mExecutor = Executors.newSingleThreadExecutor(); private static final int[] BUCKETS = {10, 20, 50, 100, 200, 500, 1000}; @@ -134,6 +135,7 @@ public class DefaultClusterRenderer implements ClusterRen public DefaultClusterRenderer(Context context, GoogleMap map, ClusterManager clusterManager) { mMap = map; mAnimate = true; + mAnimationDurationMs = 300; mDensity = context.getResources().getDisplayMetrics().density; mIconGenerator = new IconGenerator(context); mIconGenerator.setContentView(makeSquareTextView(context)); @@ -575,6 +577,15 @@ public void setAnimation(boolean animate) { mAnimate = animate; } + /** + * {@inheritDoc} The default duration is 300 milliseconds. + * @param animationDurationMs long: The length of the animation, in milliseconds. This value cannot be negative. + */ + @Override + public void setAnimationDuration(long animationDurationMs) { + mAnimationDurationMs = animationDurationMs; + } + private Set> immutableOf(Set> clusters) { return clusters != null ? Collections.unmodifiableSet(clusters) : Collections.emptySet(); } @@ -1138,6 +1149,7 @@ private AnimationTask(MarkerWithPosition markerWithPosition, LatLng from, LatLng public void perform() { ValueAnimator valueAnimator = ValueAnimator.ofFloat(0.0f, 1.0f); valueAnimator.setInterpolator(ANIMATION_INTERP); + valueAnimator.setDuration(mAnimationDurationMs); valueAnimator.addUpdateListener(this); valueAnimator.addListener(this); valueAnimator.start();