1 package com.airbnb.lottie.utils; 2 3 import android.animation.Animator; 4 import android.animation.TimeInterpolator; 5 import android.animation.ValueAnimator; 6 import android.os.Build; 7 8 import java.util.Set; 9 import java.util.concurrent.CopyOnWriteArraySet; 10 11 public abstract class BaseLottieAnimator extends ValueAnimator { 12 private final Set<ValueAnimator.AnimatorUpdateListener> updateListeners = new CopyOnWriteArraySet<>(); 13 private final Set<AnimatorListener> listeners = new CopyOnWriteArraySet<>(); 14 private final Set<Animator.AnimatorPauseListener> pauseListeners = new CopyOnWriteArraySet<>(); 15 16 getStartDelay()17 @Override public long getStartDelay() { 18 throw new UnsupportedOperationException("LottieAnimator does not support getStartDelay."); 19 } 20 setStartDelay(long startDelay)21 @Override public void setStartDelay(long startDelay) { 22 throw new UnsupportedOperationException("LottieAnimator does not support setStartDelay."); 23 } 24 setDuration(long duration)25 @Override public ValueAnimator setDuration(long duration) { 26 throw new UnsupportedOperationException("LottieAnimator does not support setDuration."); 27 } 28 setInterpolator(TimeInterpolator value)29 @Override public void setInterpolator(TimeInterpolator value) { 30 throw new UnsupportedOperationException("LottieAnimator does not support setInterpolator."); 31 } 32 addUpdateListener(ValueAnimator.AnimatorUpdateListener listener)33 public void addUpdateListener(ValueAnimator.AnimatorUpdateListener listener) { 34 updateListeners.add(listener); 35 } 36 removeUpdateListener(ValueAnimator.AnimatorUpdateListener listener)37 public void removeUpdateListener(ValueAnimator.AnimatorUpdateListener listener) { 38 updateListeners.remove(listener); 39 } 40 removeAllUpdateListeners()41 public void removeAllUpdateListeners() { 42 updateListeners.clear(); 43 } 44 addListener(Animator.AnimatorListener listener)45 public void addListener(Animator.AnimatorListener listener) { 46 listeners.add(listener); 47 } 48 removeListener(Animator.AnimatorListener listener)49 public void removeListener(Animator.AnimatorListener listener) { 50 listeners.remove(listener); 51 } 52 removeAllListeners()53 public void removeAllListeners() { 54 listeners.clear(); 55 } 56 notifyStart(boolean isReverse)57 void notifyStart(boolean isReverse) { 58 for (Animator.AnimatorListener listener : listeners) { 59 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { 60 listener.onAnimationStart(this, isReverse); 61 } else { 62 listener.onAnimationStart(this); 63 } 64 } 65 } 66 addPauseListener(AnimatorPauseListener listener)67 @Override public void addPauseListener(AnimatorPauseListener listener) { 68 pauseListeners.add(listener); 69 } 70 removePauseListener(AnimatorPauseListener listener)71 @Override public void removePauseListener(AnimatorPauseListener listener) { 72 pauseListeners.remove(listener); 73 } 74 notifyRepeat()75 void notifyRepeat() { 76 for (Animator.AnimatorListener listener : listeners) { 77 listener.onAnimationRepeat(this); 78 } 79 } 80 notifyEnd(boolean isReverse)81 void notifyEnd(boolean isReverse) { 82 for (Animator.AnimatorListener listener : listeners) { 83 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { 84 listener.onAnimationEnd(this, isReverse); 85 } else { 86 listener.onAnimationEnd(this); 87 } 88 } 89 } 90 notifyCancel()91 void notifyCancel() { 92 for (Animator.AnimatorListener listener : listeners) { 93 listener.onAnimationCancel(this); 94 } 95 } 96 notifyUpdate()97 void notifyUpdate() { 98 for (ValueAnimator.AnimatorUpdateListener listener : updateListeners) { 99 listener.onAnimationUpdate(this); 100 } 101 } 102 notifyPause()103 void notifyPause() { 104 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 105 for (AnimatorPauseListener pauseListener : pauseListeners) { 106 pauseListener.onAnimationPause(this); 107 } 108 } 109 } 110 notifyResume()111 void notifyResume() { 112 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 113 for (AnimatorPauseListener pauseListener : pauseListeners) { 114 pauseListener.onAnimationResume(this); 115 } 116 } 117 } 118 } 119