package androidx.transition; import android.animation.Animator; import android.animation.TimeInterpolator; import android.content.Context; import android.graphics.Rect; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; import android.view.animation.AccelerateInterpolator; import android.view.animation.DecelerateInterpolator; import androidx.annotation.NonNull; public class Explode extends Visibility { private static final String PROPNAME_SCREEN_BOUNDS = "android:explode:screenBounds"; private static final TimeInterpolator sAccelerate = new AccelerateInterpolator(); private static final TimeInterpolator sDecelerate = new DecelerateInterpolator(); private int[] mTempLoc; public Explode() { this.mTempLoc = new int[2]; setPropagation(new CircularPropagation()); } public Explode(Context context, AttributeSet attributeSet) { super(context, attributeSet); this.mTempLoc = new int[2]; setPropagation(new CircularPropagation()); } private static float calculateDistance(float f, float f2) { return (float) Math.sqrt((double) ((f2 * f2) + (f * f))); } private static float calculateMaxDistance(View view, int i, int i2) { return calculateDistance((float) Math.max(i, view.getWidth() - i), (float) Math.max(i2, view.getHeight() - i2)); } private void calculateOut(View view, Rect rect, int[] iArr) { int i; int i2; view.getLocationOnScreen(this.mTempLoc); int[] iArr2 = this.mTempLoc; int i3 = iArr2[0]; int i4 = iArr2[1]; Rect epicenter = getEpicenter(); if (epicenter == null) { i2 = Math.round(view.getTranslationX()) + (view.getWidth() / 2) + i3; i = Math.round(view.getTranslationY()) + (view.getHeight() / 2) + i4; } else { i2 = epicenter.centerX(); i = epicenter.centerY(); } float centerX = (float) (rect.centerX() - i2); float centerY = (float) (rect.centerY() - i); if (centerX == 0.0f && centerY == 0.0f) { centerX = ((float) (Math.random() * 2.0d)) - 1.0f; centerY = ((float) (Math.random() * 2.0d)) - 1.0f; } float calculateDistance = calculateDistance(centerX, centerY); float calculateMaxDistance = calculateMaxDistance(view, i2 - i3, i - i4); iArr[0] = Math.round((centerX / calculateDistance) * calculateMaxDistance); iArr[1] = Math.round(calculateMaxDistance * (centerY / calculateDistance)); } private void captureValues(TransitionValues transitionValues) { View view = transitionValues.view; view.getLocationOnScreen(this.mTempLoc); int[] iArr = this.mTempLoc; int i = iArr[0]; int i2 = iArr[1]; transitionValues.values.put("android:explode:screenBounds", new Rect(i, i2, view.getWidth() + i, view.getHeight() + i2)); } @Override // androidx.transition.Visibility, androidx.transition.Transition public void captureEndValues(@NonNull TransitionValues transitionValues) { super.captureEndValues(transitionValues); captureValues(transitionValues); } @Override // androidx.transition.Visibility, androidx.transition.Transition public void captureStartValues(@NonNull TransitionValues transitionValues) { super.captureStartValues(transitionValues); captureValues(transitionValues); } @Override // androidx.transition.Visibility public Animator onAppear(ViewGroup viewGroup, View view, TransitionValues transitionValues, TransitionValues transitionValues2) { if (transitionValues2 == null) { return null; } Rect rect = (Rect) transitionValues2.values.get("android:explode:screenBounds"); float translationX = view.getTranslationX(); float translationY = view.getTranslationY(); calculateOut(viewGroup, rect, this.mTempLoc); int[] iArr = this.mTempLoc; return TranslationAnimationCreator.createAnimation(view, transitionValues2, rect.left, rect.top, translationX + ((float) iArr[0]), translationY + ((float) iArr[1]), translationX, translationY, sDecelerate, this); } @Override // androidx.transition.Visibility public Animator onDisappear(ViewGroup viewGroup, View view, TransitionValues transitionValues, TransitionValues transitionValues2) { float f; float f2; if (transitionValues == null) { return null; } Rect rect = (Rect) transitionValues.values.get("android:explode:screenBounds"); int i = rect.left; int i2 = rect.top; float translationX = view.getTranslationX(); float translationY = view.getTranslationY(); int[] iArr = (int[]) transitionValues.view.getTag(R.id.transition_position); if (iArr != null) { f2 = ((float) (iArr[0] - rect.left)) + translationX; f = ((float) (iArr[1] - rect.top)) + translationY; rect.offsetTo(iArr[0], iArr[1]); } else { f2 = translationX; f = translationY; } calculateOut(viewGroup, rect, this.mTempLoc); int[] iArr2 = this.mTempLoc; return TranslationAnimationCreator.createAnimation(view, transitionValues, i, i2, translationX, translationY, f2 + ((float) iArr2[0]), f + ((float) iArr2[1]), sAccelerate, this); } }