package androidx.transition; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.animation.PropertyValuesHolder; import android.animation.TimeInterpolator; import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.transition.Transition; public class TranslationAnimationCreator { public static class TransitionPositionListener extends AnimatorListenerAdapter implements Transition.TransitionListener { private final View mMovingView; private float mPausedX; private float mPausedY; private final int mStartX; private final int mStartY; private final float mTerminalX; private final float mTerminalY; private int[] mTransitionPosition; private final View mViewInHierarchy; public TransitionPositionListener(View view, View view2, int i, int i2, float f, float f2) { this.mMovingView = view; this.mViewInHierarchy = view2; this.mStartX = i - Math.round(view.getTranslationX()); this.mStartY = i2 - Math.round(view.getTranslationY()); this.mTerminalX = f; this.mTerminalY = f2; int i3 = R.id.transition_position; int[] iArr = (int[]) view2.getTag(i3); this.mTransitionPosition = iArr; if (iArr != null) { view2.setTag(i3, null); } } @Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorListener public void onAnimationCancel(Animator animator) { if (this.mTransitionPosition == null) { this.mTransitionPosition = new int[2]; } this.mTransitionPosition[0] = Math.round(this.mMovingView.getTranslationX() + ((float) this.mStartX)); this.mTransitionPosition[1] = Math.round(this.mMovingView.getTranslationY() + ((float) this.mStartY)); this.mViewInHierarchy.setTag(R.id.transition_position, this.mTransitionPosition); } @Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorPauseListener public void onAnimationPause(Animator animator) { this.mPausedX = this.mMovingView.getTranslationX(); this.mPausedY = this.mMovingView.getTranslationY(); this.mMovingView.setTranslationX(this.mTerminalX); this.mMovingView.setTranslationY(this.mTerminalY); } @Override // android.animation.AnimatorListenerAdapter, android.animation.Animator.AnimatorPauseListener public void onAnimationResume(Animator animator) { this.mMovingView.setTranslationX(this.mPausedX); this.mMovingView.setTranslationY(this.mPausedY); } @Override // androidx.transition.Transition.TransitionListener public void onTransitionCancel(@NonNull Transition transition) { } @Override // androidx.transition.Transition.TransitionListener public void onTransitionEnd(@NonNull Transition transition) { this.mMovingView.setTranslationX(this.mTerminalX); this.mMovingView.setTranslationY(this.mTerminalY); transition.removeListener(this); } @Override // androidx.transition.Transition.TransitionListener public void onTransitionPause(@NonNull Transition transition) { } @Override // androidx.transition.Transition.TransitionListener public void onTransitionResume(@NonNull Transition transition) { } @Override // androidx.transition.Transition.TransitionListener public void onTransitionStart(@NonNull Transition transition) { } } private TranslationAnimationCreator() { } @Nullable public static Animator createAnimation(@NonNull View view, @NonNull TransitionValues transitionValues, int i, int i2, float f, float f2, float f3, float f4, @Nullable TimeInterpolator timeInterpolator, @NonNull Transition transition) { float f5; float f6; float translationX = view.getTranslationX(); float translationY = view.getTranslationY(); int[] iArr = (int[]) transitionValues.view.getTag(R.id.transition_position); if (iArr != null) { f5 = ((float) (iArr[0] - i)) + translationX; f6 = ((float) (iArr[1] - i2)) + translationY; } else { f5 = f; f6 = f2; } int round = Math.round(f5 - translationX) + i; int round2 = Math.round(f6 - translationY) + i2; view.setTranslationX(f5); view.setTranslationY(f6); if (f5 == f3 && f6 == f4) { return null; } ObjectAnimator ofPropertyValuesHolder = ObjectAnimator.ofPropertyValuesHolder(view, PropertyValuesHolder.ofFloat(View.TRANSLATION_X, f5, f3), PropertyValuesHolder.ofFloat(View.TRANSLATION_Y, f6, f4)); TransitionPositionListener transitionPositionListener = new TransitionPositionListener(view, transitionValues.view, round, round2, translationX, translationY); transition.addListener(transitionPositionListener); ofPropertyValuesHolder.addListener(transitionPositionListener); AnimatorUtils.addPauseListener(ofPropertyValuesHolder, transitionPositionListener); ofPropertyValuesHolder.setInterpolator(timeInterpolator); return ofPropertyValuesHolder; } }