summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/MapboxAnimator.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/MapboxAnimator.java')
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/MapboxAnimator.java73
1 files changed, 38 insertions, 35 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/MapboxAnimator.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/MapboxAnimator.java
index a72bf08a86..ab8b782249 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/MapboxAnimator.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/MapboxAnimator.java
@@ -1,22 +1,21 @@
package com.mapbox.mapboxsdk.location;
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
import android.animation.TypeEvaluator;
import android.animation.ValueAnimator;
import android.support.annotation.IntDef;
-
-import com.mapbox.mapboxsdk.geometry.LatLng;
+import android.support.annotation.NonNull;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
-import java.util.List;
/**
* Abstract class for all of the location component animators.
*
* @param <K> Data type that will be animated.
- * @param <L> Listener of animation updates.
*/
-abstract class MapboxAnimator<K, L> extends ValueAnimator implements ValueAnimator.AnimatorUpdateListener {
+abstract class MapboxAnimator<K> extends ValueAnimator implements ValueAnimator.AnimatorUpdateListener {
@Retention(RetentionPolicy.SOURCE)
@IntDef( {
ANIMATOR_LAYER_LATLNG,
@@ -42,51 +41,55 @@ abstract class MapboxAnimator<K, L> extends ValueAnimator implements ValueAnimat
static final int ANIMATOR_ZOOM = 7;
static final int ANIMATOR_TILT = 8;
- private final int animatorType = provideAnimatorType();
- final List<L> updateListeners;
+ private final AnimationsValueChangeListener<K> updateListener;
private final K target;
+ private K animatedValue;
+
+ private double minUpdateInterval;
+ private long timeElapsed;
- MapboxAnimator(K previous, K target, List<L> updateListeners) {
+ MapboxAnimator(@NonNull K previous, @NonNull K target, @NonNull AnimationsValueChangeListener<K> updateListener,
+ int maxAnimationFps) {
+ minUpdateInterval = 1E9 / maxAnimationFps;
setObjectValues(previous, target);
setEvaluator(provideEvaluator());
- this.updateListeners = updateListeners;
+ this.updateListener = updateListener;
this.target = target;
addUpdateListener(this);
+ addListener(new AnimatorListener());
}
- K getTarget() {
- return target;
- }
-
- @Type
- int getAnimatorType() {
- return animatorType;
- }
-
- @Type
- abstract int provideAnimatorType();
-
- abstract TypeEvaluator provideEvaluator();
-
- interface OnLayerAnimationsValuesChangeListener {
- void onNewLatLngValue(LatLng latLng);
-
- void onNewGpsBearingValue(float gpsBearing);
+ @Override
+ public void onAnimationUpdate(ValueAnimator animation) {
+ animatedValue = (K) animation.getAnimatedValue();
- void onNewCompassBearingValue(float compassBearing);
+ long currentTime = System.nanoTime();
+ if ((currentTime - timeElapsed) < minUpdateInterval) {
+ return;
+ }
- void onNewAccuracyRadiusValue(float accuracyRadiusValue);
+ postUpdates();
+ timeElapsed = currentTime;
}
- interface OnCameraAnimationsValuesChangeListener {
- void onNewLatLngValue(LatLng latLng);
+ private class AnimatorListener extends AnimatorListenerAdapter {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ postUpdates();
+ }
+ }
- void onNewGpsBearingValue(float gpsBearing);
+ private void postUpdates() {
+ updateListener.onNewAnimationValue(animatedValue);
+ }
- void onNewCompassBearingValue(float compassBearing);
+ K getTarget() {
+ return target;
+ }
- void onNewZoomValue(float zoom);
+ abstract TypeEvaluator provideEvaluator();
- void onNewTiltValue(float tilt);
+ interface AnimationsValueChangeListener<K> {
+ void onNewAnimationValue(K value);
}
}