what-the-bank/sources/com/airbnb/lottie/utils/LottieValueAnimator.java

288 lines
9.4 KiB
Java
Raw Permalink Normal View History

2024-07-27 18:17:47 +07:00
package com.airbnb.lottie.utils;
import android.view.Choreographer;
import com.airbnb.lottie.L;
import com.airbnb.lottie.LottieComposition;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
/* loaded from: classes.dex */
public class LottieValueAnimator extends BaseLottieAnimator implements Choreographer.FrameCallback {
private LottieComposition composition;
private float speed = 1.0f;
private boolean speedReversedForRepeatMode = false;
private long lastFrameTimeNs = 0;
private float frame = BitmapDescriptorFactory.HUE_RED;
private int repeatCount = 0;
private float minFrame = -2.1474836E9f;
private float maxFrame = 2.1474836E9f;
protected boolean running = false;
@Override // android.animation.ValueAnimator
public Object getAnimatedValue() {
return Float.valueOf(getAnimatedValueAbsolute());
}
public float getAnimatedValueAbsolute() {
LottieComposition lottieComposition = this.composition;
return lottieComposition == null ? BitmapDescriptorFactory.HUE_RED : (this.frame - lottieComposition.getStartFrame()) / (this.composition.getEndFrame() - this.composition.getStartFrame());
}
@Override // android.animation.ValueAnimator
public float getAnimatedFraction() {
float minFrame;
float maxFrame;
float minFrame2;
if (this.composition == null) {
return BitmapDescriptorFactory.HUE_RED;
}
if (isReversed()) {
minFrame = getMaxFrame() - this.frame;
maxFrame = getMaxFrame();
minFrame2 = getMinFrame();
} else {
minFrame = this.frame - getMinFrame();
maxFrame = getMaxFrame();
minFrame2 = getMinFrame();
}
return minFrame / (maxFrame - minFrame2);
}
@Override // android.animation.ValueAnimator, android.animation.Animator
public long getDuration() {
if (this.composition == null) {
return 0L;
}
return r0.getDuration();
}
@Override // android.view.Choreographer.FrameCallback
public void doFrame(long j) {
postFrameCallback();
if (this.composition == null || !isRunning()) {
return;
}
L.beginSection("LottieValueAnimator#doFrame");
long j2 = this.lastFrameTimeNs;
float frameDurationNs = ((float) (j2 != 0 ? j - j2 : 0L)) / getFrameDurationNs();
float f = this.frame;
if (isReversed()) {
frameDurationNs = -frameDurationNs;
}
float f2 = f + frameDurationNs;
this.frame = f2;
boolean contains = MiscUtils.contains(f2, getMinFrame(), getMaxFrame());
this.frame = MiscUtils.clamp(this.frame, getMinFrame(), getMaxFrame());
this.lastFrameTimeNs = j;
notifyUpdate();
if (!contains) {
if (getRepeatCount() != -1 && this.repeatCount >= getRepeatCount()) {
this.frame = this.speed < BitmapDescriptorFactory.HUE_RED ? getMinFrame() : getMaxFrame();
removeFrameCallback();
notifyEnd(isReversed());
} else {
notifyRepeat();
this.repeatCount++;
if (getRepeatMode() == 2) {
this.speedReversedForRepeatMode = !this.speedReversedForRepeatMode;
reverseAnimationSpeed();
} else {
this.frame = isReversed() ? getMaxFrame() : getMinFrame();
}
this.lastFrameTimeNs = j;
}
}
verifyFrame();
L.endSection("LottieValueAnimator#doFrame");
}
private float getFrameDurationNs() {
LottieComposition lottieComposition = this.composition;
if (lottieComposition == null) {
return Float.MAX_VALUE;
}
return (1.0E9f / lottieComposition.getFrameRate()) / Math.abs(this.speed);
}
public void setComposition(LottieComposition lottieComposition) {
boolean z = this.composition == null;
this.composition = lottieComposition;
if (z) {
setMinAndMaxFrames(Math.max(this.minFrame, lottieComposition.getStartFrame()), Math.min(this.maxFrame, lottieComposition.getEndFrame()));
} else {
setMinAndMaxFrames((int) lottieComposition.getStartFrame(), (int) lottieComposition.getEndFrame());
}
float f = this.frame;
this.frame = BitmapDescriptorFactory.HUE_RED;
setFrame((int) f);
notifyUpdate();
}
public void setFrame(float f) {
if (this.frame == f) {
return;
}
this.frame = MiscUtils.clamp(f, getMinFrame(), getMaxFrame());
this.lastFrameTimeNs = 0L;
notifyUpdate();
}
public void setMinFrame(int i) {
setMinAndMaxFrames(i, (int) this.maxFrame);
}
public void setMaxFrame(float f) {
setMinAndMaxFrames(this.minFrame, f);
}
public void setMinAndMaxFrames(float f, float f2) {
if (f > f2) {
throw new IllegalArgumentException(String.format("minFrame (%s) must be <= maxFrame (%s)", Float.valueOf(f), Float.valueOf(f2)));
}
LottieComposition lottieComposition = this.composition;
float startFrame = lottieComposition == null ? -3.4028235E38f : lottieComposition.getStartFrame();
LottieComposition lottieComposition2 = this.composition;
float endFrame = lottieComposition2 == null ? Float.MAX_VALUE : lottieComposition2.getEndFrame();
float clamp = MiscUtils.clamp(f, startFrame, endFrame);
float clamp2 = MiscUtils.clamp(f2, startFrame, endFrame);
if (clamp == this.minFrame && clamp2 == this.maxFrame) {
return;
}
this.minFrame = clamp;
this.maxFrame = clamp2;
setFrame((int) MiscUtils.clamp(this.frame, clamp, clamp2));
}
public void reverseAnimationSpeed() {
setSpeed(-getSpeed());
}
@Override // android.animation.ValueAnimator
public void setRepeatMode(int i) {
super.setRepeatMode(i);
if (i == 2 || !this.speedReversedForRepeatMode) {
return;
}
this.speedReversedForRepeatMode = false;
reverseAnimationSpeed();
}
public void playAnimation() {
this.running = true;
notifyStart(isReversed());
setFrame((int) (isReversed() ? getMaxFrame() : getMinFrame()));
this.lastFrameTimeNs = 0L;
this.repeatCount = 0;
postFrameCallback();
}
public void endAnimation() {
removeFrameCallback();
notifyEnd(isReversed());
}
public void pauseAnimation() {
removeFrameCallback();
}
public void resumeAnimation() {
this.running = true;
postFrameCallback();
this.lastFrameTimeNs = 0L;
if (isReversed() && getFrame() == getMinFrame()) {
this.frame = getMaxFrame();
} else {
if (isReversed() || getFrame() != getMaxFrame()) {
return;
}
this.frame = getMinFrame();
}
}
@Override // android.animation.ValueAnimator, android.animation.Animator
public void cancel() {
notifyCancel();
removeFrameCallback();
}
private boolean isReversed() {
return getSpeed() < BitmapDescriptorFactory.HUE_RED;
}
public float getMinFrame() {
LottieComposition lottieComposition = this.composition;
if (lottieComposition == null) {
return BitmapDescriptorFactory.HUE_RED;
}
float f = this.minFrame;
return f == -2.1474836E9f ? lottieComposition.getStartFrame() : f;
}
public float getMaxFrame() {
LottieComposition lottieComposition = this.composition;
if (lottieComposition == null) {
return BitmapDescriptorFactory.HUE_RED;
}
float f = this.maxFrame;
return f == 2.1474836E9f ? lottieComposition.getEndFrame() : f;
}
/* JADX INFO: Access modifiers changed from: package-private */
@Override // com.airbnb.lottie.utils.BaseLottieAnimator
public void notifyCancel() {
super.notifyCancel();
notifyEnd(isReversed());
}
protected void postFrameCallback() {
if (isRunning()) {
removeFrameCallback(false);
Choreographer.getInstance().postFrameCallback(this);
}
}
protected void removeFrameCallback() {
removeFrameCallback(true);
}
protected void removeFrameCallback(boolean z) {
Choreographer.getInstance().removeFrameCallback(this);
if (z) {
this.running = false;
}
}
private void verifyFrame() {
if (this.composition == null) {
return;
}
float f = this.frame;
float f2 = this.minFrame;
if (f < f2 || f > this.maxFrame) {
throw new IllegalStateException(String.format("Frame must be [%f,%f]. It is %f", Float.valueOf(f2), Float.valueOf(this.maxFrame), Float.valueOf(f)));
}
}
public void setSpeed(float f) {
this.speed = f;
}
@Override // android.animation.ValueAnimator, android.animation.Animator
public boolean isRunning() {
return this.running;
}
public float getSpeed() {
return this.speed;
}
public float getFrame() {
return this.frame;
}
public void clearComposition() {
this.composition = null;
this.minFrame = -2.1474836E9f;
this.maxFrame = 2.1474836E9f;
}
}