ADD week 5
This commit is contained in:
		| @@ -0,0 +1,430 @@ | ||||
| package androidx.dynamicanimation.animation; | ||||
|  | ||||
| import android.os.Looper; | ||||
| import android.util.AndroidRuntimeException; | ||||
| import android.view.View; | ||||
| import androidx.constraintlayout.motion.widget.Key; | ||||
| import androidx.core.view.ViewCompat; | ||||
| import androidx.dynamicanimation.animation.AnimationHandler; | ||||
| import androidx.dynamicanimation.animation.DynamicAnimation; | ||||
| import java.util.ArrayList; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public abstract class DynamicAnimation<T extends DynamicAnimation<T>> implements AnimationHandler.AnimationFrameCallback { | ||||
|     public static final float MIN_VISIBLE_CHANGE_ALPHA = 0.00390625f; | ||||
|     public static final float MIN_VISIBLE_CHANGE_PIXELS = 1.0f; | ||||
|     public static final float MIN_VISIBLE_CHANGE_ROTATION_DEGREES = 0.1f; | ||||
|     public static final float MIN_VISIBLE_CHANGE_SCALE = 0.002f; | ||||
|     private static final float THRESHOLD_MULTIPLIER = 0.75f; | ||||
|     private static final float UNSET = Float.MAX_VALUE; | ||||
|     private final ArrayList<OnAnimationEndListener> mEndListeners; | ||||
|     private long mLastFrameTime; | ||||
|     float mMaxValue; | ||||
|     float mMinValue; | ||||
|     private float mMinVisibleChange; | ||||
|     final FloatPropertyCompat mProperty; | ||||
|     boolean mRunning; | ||||
|     boolean mStartValueIsSet; | ||||
|     final Object mTarget; | ||||
|     private final ArrayList<OnAnimationUpdateListener> mUpdateListeners; | ||||
|     float mValue; | ||||
|     float mVelocity; | ||||
|     public static final ViewProperty TRANSLATION_X = new ViewProperty("translationX") { // from class: androidx.dynamicanimation.animation.DynamicAnimation.1 | ||||
|         @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|         public void setValue(View view, float f) { | ||||
|             view.setTranslationX(f); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|         public float getValue(View view) { | ||||
|             return view.getTranslationX(); | ||||
|         } | ||||
|     }; | ||||
|     public static final ViewProperty TRANSLATION_Y = new ViewProperty("translationY") { // from class: androidx.dynamicanimation.animation.DynamicAnimation.2 | ||||
|         @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|         public void setValue(View view, float f) { | ||||
|             view.setTranslationY(f); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|         public float getValue(View view) { | ||||
|             return view.getTranslationY(); | ||||
|         } | ||||
|     }; | ||||
|     public static final ViewProperty TRANSLATION_Z = new ViewProperty("translationZ") { // from class: androidx.dynamicanimation.animation.DynamicAnimation.3 | ||||
|         @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|         public void setValue(View view, float f) { | ||||
|             ViewCompat.setTranslationZ(view, f); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|         public float getValue(View view) { | ||||
|             return ViewCompat.getTranslationZ(view); | ||||
|         } | ||||
|     }; | ||||
|     public static final ViewProperty SCALE_X = new ViewProperty("scaleX") { // from class: androidx.dynamicanimation.animation.DynamicAnimation.4 | ||||
|         @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|         public void setValue(View view, float f) { | ||||
|             view.setScaleX(f); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|         public float getValue(View view) { | ||||
|             return view.getScaleX(); | ||||
|         } | ||||
|     }; | ||||
|     public static final ViewProperty SCALE_Y = new ViewProperty("scaleY") { // from class: androidx.dynamicanimation.animation.DynamicAnimation.5 | ||||
|         @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|         public void setValue(View view, float f) { | ||||
|             view.setScaleY(f); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|         public float getValue(View view) { | ||||
|             return view.getScaleY(); | ||||
|         } | ||||
|     }; | ||||
|     public static final ViewProperty ROTATION = new ViewProperty(Key.ROTATION) { // from class: androidx.dynamicanimation.animation.DynamicAnimation.6 | ||||
|         @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|         public void setValue(View view, float f) { | ||||
|             view.setRotation(f); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|         public float getValue(View view) { | ||||
|             return view.getRotation(); | ||||
|         } | ||||
|     }; | ||||
|     public static final ViewProperty ROTATION_X = new ViewProperty("rotationX") { // from class: androidx.dynamicanimation.animation.DynamicAnimation.7 | ||||
|         @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|         public void setValue(View view, float f) { | ||||
|             view.setRotationX(f); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|         public float getValue(View view) { | ||||
|             return view.getRotationX(); | ||||
|         } | ||||
|     }; | ||||
|     public static final ViewProperty ROTATION_Y = new ViewProperty("rotationY") { // from class: androidx.dynamicanimation.animation.DynamicAnimation.8 | ||||
|         @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|         public void setValue(View view, float f) { | ||||
|             view.setRotationY(f); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|         public float getValue(View view) { | ||||
|             return view.getRotationY(); | ||||
|         } | ||||
|     }; | ||||
|     public static final ViewProperty X = new ViewProperty("x") { // from class: androidx.dynamicanimation.animation.DynamicAnimation.9 | ||||
|         @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|         public void setValue(View view, float f) { | ||||
|             view.setX(f); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|         public float getValue(View view) { | ||||
|             return view.getX(); | ||||
|         } | ||||
|     }; | ||||
|     public static final ViewProperty Y = new ViewProperty("y") { // from class: androidx.dynamicanimation.animation.DynamicAnimation.10 | ||||
|         @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|         public void setValue(View view, float f) { | ||||
|             view.setY(f); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|         public float getValue(View view) { | ||||
|             return view.getY(); | ||||
|         } | ||||
|     }; | ||||
|     public static final ViewProperty Z = new ViewProperty("z") { // from class: androidx.dynamicanimation.animation.DynamicAnimation.11 | ||||
|         @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|         public void setValue(View view, float f) { | ||||
|             ViewCompat.setZ(view, f); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|         public float getValue(View view) { | ||||
|             return ViewCompat.getZ(view); | ||||
|         } | ||||
|     }; | ||||
|     public static final ViewProperty ALPHA = new ViewProperty("alpha") { // from class: androidx.dynamicanimation.animation.DynamicAnimation.12 | ||||
|         @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|         public void setValue(View view, float f) { | ||||
|             view.setAlpha(f); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|         public float getValue(View view) { | ||||
|             return view.getAlpha(); | ||||
|         } | ||||
|     }; | ||||
|     public static final ViewProperty SCROLL_X = new ViewProperty("scrollX") { // from class: androidx.dynamicanimation.animation.DynamicAnimation.13 | ||||
|         @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|         public void setValue(View view, float f) { | ||||
|             view.setScrollX((int) f); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|         public float getValue(View view) { | ||||
|             return view.getScrollX(); | ||||
|         } | ||||
|     }; | ||||
|     public static final ViewProperty SCROLL_Y = new ViewProperty("scrollY") { // from class: androidx.dynamicanimation.animation.DynamicAnimation.14 | ||||
|         @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|         public void setValue(View view, float f) { | ||||
|             view.setScrollY((int) f); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|         public float getValue(View view) { | ||||
|             return view.getScrollY(); | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|     public interface OnAnimationEndListener { | ||||
|         void onAnimationEnd(DynamicAnimation dynamicAnimation, boolean z, float f, float f2); | ||||
|     } | ||||
|  | ||||
|     public interface OnAnimationUpdateListener { | ||||
|         void onAnimationUpdate(DynamicAnimation dynamicAnimation, float f, float f2); | ||||
|     } | ||||
|  | ||||
|     abstract float getAcceleration(float f, float f2); | ||||
|  | ||||
|     public float getMinimumVisibleChange() { | ||||
|         return this.mMinVisibleChange; | ||||
|     } | ||||
|  | ||||
|     float getValueThreshold() { | ||||
|         return this.mMinVisibleChange * 0.75f; | ||||
|     } | ||||
|  | ||||
|     abstract boolean isAtEquilibrium(float f, float f2); | ||||
|  | ||||
|     public boolean isRunning() { | ||||
|         return this.mRunning; | ||||
|     } | ||||
|  | ||||
|     public T setMaxValue(float f) { | ||||
|         this.mMaxValue = f; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public T setMinValue(float f) { | ||||
|         this.mMinValue = f; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public T setStartValue(float f) { | ||||
|         this.mValue = f; | ||||
|         this.mStartValueIsSet = true; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public T setStartVelocity(float f) { | ||||
|         this.mVelocity = f; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     abstract void setValueThreshold(float f); | ||||
|  | ||||
|     abstract boolean updateValueAndVelocity(long j); | ||||
|  | ||||
|     public static abstract class ViewProperty extends FloatPropertyCompat<View> { | ||||
|         private ViewProperty(String str) { | ||||
|             super(str); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     static class MassState { | ||||
|         float mValue; | ||||
|         float mVelocity; | ||||
|  | ||||
|         MassState() { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     DynamicAnimation(final FloatValueHolder floatValueHolder) { | ||||
|         this.mVelocity = 0.0f; | ||||
|         this.mValue = Float.MAX_VALUE; | ||||
|         this.mStartValueIsSet = false; | ||||
|         this.mRunning = false; | ||||
|         this.mMaxValue = Float.MAX_VALUE; | ||||
|         this.mMinValue = -Float.MAX_VALUE; | ||||
|         this.mLastFrameTime = 0L; | ||||
|         this.mEndListeners = new ArrayList<>(); | ||||
|         this.mUpdateListeners = new ArrayList<>(); | ||||
|         this.mTarget = null; | ||||
|         this.mProperty = new FloatPropertyCompat("FloatValueHolder") { // from class: androidx.dynamicanimation.animation.DynamicAnimation.15 | ||||
|             @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|             public float getValue(Object obj) { | ||||
|                 return floatValueHolder.getValue(); | ||||
|             } | ||||
|  | ||||
|             @Override // androidx.dynamicanimation.animation.FloatPropertyCompat | ||||
|             public void setValue(Object obj, float f) { | ||||
|                 floatValueHolder.setValue(f); | ||||
|             } | ||||
|         }; | ||||
|         this.mMinVisibleChange = 1.0f; | ||||
|     } | ||||
|  | ||||
|     <K> DynamicAnimation(K k, FloatPropertyCompat<K> floatPropertyCompat) { | ||||
|         this.mVelocity = 0.0f; | ||||
|         this.mValue = Float.MAX_VALUE; | ||||
|         this.mStartValueIsSet = false; | ||||
|         this.mRunning = false; | ||||
|         this.mMaxValue = Float.MAX_VALUE; | ||||
|         this.mMinValue = -Float.MAX_VALUE; | ||||
|         this.mLastFrameTime = 0L; | ||||
|         this.mEndListeners = new ArrayList<>(); | ||||
|         this.mUpdateListeners = new ArrayList<>(); | ||||
|         this.mTarget = k; | ||||
|         this.mProperty = floatPropertyCompat; | ||||
|         if (floatPropertyCompat == ROTATION || floatPropertyCompat == ROTATION_X || floatPropertyCompat == ROTATION_Y) { | ||||
|             this.mMinVisibleChange = 0.1f; | ||||
|             return; | ||||
|         } | ||||
|         if (floatPropertyCompat == ALPHA) { | ||||
|             this.mMinVisibleChange = 0.00390625f; | ||||
|         } else if (floatPropertyCompat == SCALE_X || floatPropertyCompat == SCALE_Y) { | ||||
|             this.mMinVisibleChange = 0.00390625f; | ||||
|         } else { | ||||
|             this.mMinVisibleChange = 1.0f; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public T addEndListener(OnAnimationEndListener onAnimationEndListener) { | ||||
|         if (!this.mEndListeners.contains(onAnimationEndListener)) { | ||||
|             this.mEndListeners.add(onAnimationEndListener); | ||||
|         } | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public void removeEndListener(OnAnimationEndListener onAnimationEndListener) { | ||||
|         removeEntry(this.mEndListeners, onAnimationEndListener); | ||||
|     } | ||||
|  | ||||
|     public T addUpdateListener(OnAnimationUpdateListener onAnimationUpdateListener) { | ||||
|         if (isRunning()) { | ||||
|             throw new UnsupportedOperationException("Error: Update listeners must be added beforethe animation."); | ||||
|         } | ||||
|         if (!this.mUpdateListeners.contains(onAnimationUpdateListener)) { | ||||
|             this.mUpdateListeners.add(onAnimationUpdateListener); | ||||
|         } | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public void removeUpdateListener(OnAnimationUpdateListener onAnimationUpdateListener) { | ||||
|         removeEntry(this.mUpdateListeners, onAnimationUpdateListener); | ||||
|     } | ||||
|  | ||||
|     public T setMinimumVisibleChange(float f) { | ||||
|         if (f <= 0.0f) { | ||||
|             throw new IllegalArgumentException("Minimum visible change must be positive."); | ||||
|         } | ||||
|         this.mMinVisibleChange = f; | ||||
|         setValueThreshold(f * 0.75f); | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     private static <T> void removeNullEntries(ArrayList<T> arrayList) { | ||||
|         for (int size = arrayList.size() - 1; size >= 0; size--) { | ||||
|             if (arrayList.get(size) == null) { | ||||
|                 arrayList.remove(size); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static <T> void removeEntry(ArrayList<T> arrayList, T t) { | ||||
|         int indexOf = arrayList.indexOf(t); | ||||
|         if (indexOf >= 0) { | ||||
|             arrayList.set(indexOf, null); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void start() { | ||||
|         if (Looper.myLooper() != Looper.getMainLooper()) { | ||||
|             throw new AndroidRuntimeException("Animations may only be started on the main thread"); | ||||
|         } | ||||
|         if (this.mRunning) { | ||||
|             return; | ||||
|         } | ||||
|         startAnimationInternal(); | ||||
|     } | ||||
|  | ||||
|     public void cancel() { | ||||
|         if (Looper.myLooper() != Looper.getMainLooper()) { | ||||
|             throw new AndroidRuntimeException("Animations may only be canceled on the main thread"); | ||||
|         } | ||||
|         if (this.mRunning) { | ||||
|             endAnimationInternal(true); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void startAnimationInternal() { | ||||
|         if (this.mRunning) { | ||||
|             return; | ||||
|         } | ||||
|         this.mRunning = true; | ||||
|         if (!this.mStartValueIsSet) { | ||||
|             this.mValue = getPropertyValue(); | ||||
|         } | ||||
|         float f = this.mValue; | ||||
|         if (f > this.mMaxValue || f < this.mMinValue) { | ||||
|             throw new IllegalArgumentException("Starting value need to be in between min value and max value"); | ||||
|         } | ||||
|         AnimationHandler.getInstance().addAnimationFrameCallback(this, 0L); | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.dynamicanimation.animation.AnimationHandler.AnimationFrameCallback | ||||
|     public boolean doAnimationFrame(long j) { | ||||
|         long j2 = this.mLastFrameTime; | ||||
|         if (j2 == 0) { | ||||
|             this.mLastFrameTime = j; | ||||
|             setPropertyValue(this.mValue); | ||||
|             return false; | ||||
|         } | ||||
|         this.mLastFrameTime = j; | ||||
|         boolean updateValueAndVelocity = updateValueAndVelocity(j - j2); | ||||
|         float min = Math.min(this.mValue, this.mMaxValue); | ||||
|         this.mValue = min; | ||||
|         float max = Math.max(min, this.mMinValue); | ||||
|         this.mValue = max; | ||||
|         setPropertyValue(max); | ||||
|         if (updateValueAndVelocity) { | ||||
|             endAnimationInternal(false); | ||||
|         } | ||||
|         return updateValueAndVelocity; | ||||
|     } | ||||
|  | ||||
|     private void endAnimationInternal(boolean z) { | ||||
|         this.mRunning = false; | ||||
|         AnimationHandler.getInstance().removeCallback(this); | ||||
|         this.mLastFrameTime = 0L; | ||||
|         this.mStartValueIsSet = false; | ||||
|         for (int i = 0; i < this.mEndListeners.size(); i++) { | ||||
|             if (this.mEndListeners.get(i) != null) { | ||||
|                 this.mEndListeners.get(i).onAnimationEnd(this, z, this.mValue, this.mVelocity); | ||||
|             } | ||||
|         } | ||||
|         removeNullEntries(this.mEndListeners); | ||||
|     } | ||||
|  | ||||
|     void setPropertyValue(float f) { | ||||
|         this.mProperty.setValue(this.mTarget, f); | ||||
|         for (int i = 0; i < this.mUpdateListeners.size(); i++) { | ||||
|             if (this.mUpdateListeners.get(i) != null) { | ||||
|                 this.mUpdateListeners.get(i).onAnimationUpdate(this, this.mValue, this.mVelocity); | ||||
|             } | ||||
|         } | ||||
|         removeNullEntries(this.mUpdateListeners); | ||||
|     } | ||||
|  | ||||
|     private float getPropertyValue() { | ||||
|         return this.mProperty.getValue(this.mTarget); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user