mirror of
https://github.com/Pinball3D/Rabbit-R1.git
synced 2025-01-09 13:43:22 +00:00
151 lines
6.7 KiB
Java
151 lines
6.7 KiB
Java
package com.google.android.material.motion;
|
|
|
|
import android.animation.Animator;
|
|
import android.animation.AnimatorListenerAdapter;
|
|
import android.animation.AnimatorSet;
|
|
import android.animation.ObjectAnimator;
|
|
import android.animation.ValueAnimator;
|
|
import android.content.res.Resources;
|
|
import android.util.Property;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import androidx.activity.BackEventCompat;
|
|
import androidx.core.view.GravityCompat;
|
|
import androidx.core.view.ViewCompat;
|
|
import androidx.interpolator.view.animation.FastOutSlowInInterpolator;
|
|
import com.google.android.material.R;
|
|
import com.google.android.material.animation.AnimationUtils;
|
|
|
|
/* loaded from: classes2.dex */
|
|
public class MaterialSideContainerBackHelper extends MaterialBackAnimationHelper<View> {
|
|
private final float maxScaleXDistanceGrow;
|
|
private final float maxScaleXDistanceShrink;
|
|
private final float maxScaleYDistance;
|
|
|
|
public MaterialSideContainerBackHelper(View view) {
|
|
super(view);
|
|
Resources resources = view.getResources();
|
|
this.maxScaleXDistanceShrink = resources.getDimension(R.dimen.m3_back_progress_side_container_max_scale_x_distance_shrink);
|
|
this.maxScaleXDistanceGrow = resources.getDimension(R.dimen.m3_back_progress_side_container_max_scale_x_distance_grow);
|
|
this.maxScaleYDistance = resources.getDimension(R.dimen.m3_back_progress_side_container_max_scale_y_distance);
|
|
}
|
|
|
|
public void startBackProgress(BackEventCompat backEventCompat) {
|
|
super.onStartBackProgress(backEventCompat);
|
|
}
|
|
|
|
public void updateBackProgress(BackEventCompat backEventCompat, int i) {
|
|
if (super.onUpdateBackProgress(backEventCompat) == null) {
|
|
return;
|
|
}
|
|
updateBackProgress(backEventCompat.getProgress(), backEventCompat.getSwipeEdge() == 0, i);
|
|
}
|
|
|
|
public void updateBackProgress(float f, boolean z, int i) {
|
|
int i2;
|
|
float interpolateProgress = interpolateProgress(f);
|
|
boolean checkAbsoluteGravity = checkAbsoluteGravity(i, 3);
|
|
boolean z2 = z == checkAbsoluteGravity;
|
|
int width = this.view.getWidth();
|
|
int height = this.view.getHeight();
|
|
float f2 = width;
|
|
if (f2 > 0.0f) {
|
|
float f3 = height;
|
|
if (f3 <= 0.0f) {
|
|
return;
|
|
}
|
|
float f4 = this.maxScaleXDistanceShrink / f2;
|
|
float f5 = this.maxScaleXDistanceGrow / f2;
|
|
float f6 = this.maxScaleYDistance / f3;
|
|
V v = this.view;
|
|
if (checkAbsoluteGravity) {
|
|
f2 = 0.0f;
|
|
}
|
|
v.setPivotX(f2);
|
|
if (!z2) {
|
|
f5 = -f4;
|
|
}
|
|
float lerp = AnimationUtils.lerp(0.0f, f5, interpolateProgress);
|
|
float f7 = lerp + 1.0f;
|
|
this.view.setScaleX(f7);
|
|
float lerp2 = 1.0f - AnimationUtils.lerp(0.0f, f6, interpolateProgress);
|
|
this.view.setScaleY(lerp2);
|
|
if (this.view instanceof ViewGroup) {
|
|
ViewGroup viewGroup = (ViewGroup) this.view;
|
|
for (int i3 = 0; i3 < viewGroup.getChildCount(); i3++) {
|
|
View childAt = viewGroup.getChildAt(i3);
|
|
if (checkAbsoluteGravity) {
|
|
i2 = (width - childAt.getRight()) + childAt.getWidth();
|
|
} else {
|
|
i2 = -childAt.getLeft();
|
|
}
|
|
childAt.setPivotX(i2);
|
|
childAt.setPivotY(-childAt.getTop());
|
|
float f8 = z2 ? 1.0f - lerp : 1.0f;
|
|
float f9 = lerp2 != 0.0f ? (f7 / lerp2) * f8 : 1.0f;
|
|
childAt.setScaleX(f8);
|
|
childAt.setScaleY(f9);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void finishBackProgress(BackEventCompat backEventCompat, final int i, Animator.AnimatorListener animatorListener, ValueAnimator.AnimatorUpdateListener animatorUpdateListener) {
|
|
final boolean z = backEventCompat.getSwipeEdge() == 0;
|
|
boolean checkAbsoluteGravity = checkAbsoluteGravity(i, 3);
|
|
float width = (this.view.getWidth() * this.view.getScaleX()) + getEdgeMargin(checkAbsoluteGravity);
|
|
V v = this.view;
|
|
Property property = View.TRANSLATION_X;
|
|
float[] fArr = new float[1];
|
|
if (checkAbsoluteGravity) {
|
|
width = -width;
|
|
}
|
|
fArr[0] = width;
|
|
ObjectAnimator ofFloat = ObjectAnimator.ofFloat(v, (Property<V, Float>) property, fArr);
|
|
if (animatorUpdateListener != null) {
|
|
ofFloat.addUpdateListener(animatorUpdateListener);
|
|
}
|
|
ofFloat.setInterpolator(new FastOutSlowInInterpolator());
|
|
ofFloat.setDuration(AnimationUtils.lerp(this.hideDurationMax, this.hideDurationMin, backEventCompat.getProgress()));
|
|
ofFloat.addListener(new AnimatorListenerAdapter() { // from class: com.google.android.material.motion.MaterialSideContainerBackHelper.1
|
|
@Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener
|
|
public void onAnimationEnd(Animator animator) {
|
|
MaterialSideContainerBackHelper.this.view.setTranslationX(0.0f);
|
|
MaterialSideContainerBackHelper.this.updateBackProgress(0.0f, z, i);
|
|
}
|
|
});
|
|
if (animatorListener != null) {
|
|
ofFloat.addListener(animatorListener);
|
|
}
|
|
ofFloat.start();
|
|
}
|
|
|
|
public void cancelBackProgress() {
|
|
if (super.onCancelBackProgress() == null) {
|
|
return;
|
|
}
|
|
AnimatorSet animatorSet = new AnimatorSet();
|
|
animatorSet.playTogether(ObjectAnimator.ofFloat(this.view, (Property<V, Float>) View.SCALE_X, 1.0f), ObjectAnimator.ofFloat(this.view, (Property<V, Float>) View.SCALE_Y, 1.0f));
|
|
if (this.view instanceof ViewGroup) {
|
|
ViewGroup viewGroup = (ViewGroup) this.view;
|
|
for (int i = 0; i < viewGroup.getChildCount(); i++) {
|
|
animatorSet.playTogether(ObjectAnimator.ofFloat(viewGroup.getChildAt(i), (Property<View, Float>) View.SCALE_Y, 1.0f));
|
|
}
|
|
}
|
|
animatorSet.setDuration(this.cancelDuration);
|
|
animatorSet.start();
|
|
}
|
|
|
|
private boolean checkAbsoluteGravity(int i, int i2) {
|
|
return (GravityCompat.getAbsoluteGravity(i, ViewCompat.getLayoutDirection(this.view)) & i2) == i2;
|
|
}
|
|
|
|
private int getEdgeMargin(boolean z) {
|
|
ViewGroup.LayoutParams layoutParams = this.view.getLayoutParams();
|
|
if (!(layoutParams instanceof ViewGroup.MarginLayoutParams)) {
|
|
return 0;
|
|
}
|
|
ViewGroup.MarginLayoutParams marginLayoutParams = (ViewGroup.MarginLayoutParams) layoutParams;
|
|
return z ? marginLayoutParams.leftMargin : marginLayoutParams.rightMargin;
|
|
}
|
|
}
|