182 lines
7.9 KiB
Java
182 lines
7.9 KiB
Java
package androidx.transition;
|
|
|
|
import android.animation.Animator;
|
|
import android.animation.ObjectAnimator;
|
|
import android.animation.TypeEvaluator;
|
|
import android.content.Context;
|
|
import android.graphics.Matrix;
|
|
import android.graphics.Rect;
|
|
import android.graphics.drawable.Drawable;
|
|
import android.util.AttributeSet;
|
|
import android.util.Property;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.widget.ImageView;
|
|
import androidx.annotation.NonNull;
|
|
import androidx.transition.TransitionUtils;
|
|
import java.util.Map;
|
|
public class ChangeImageTransform extends Transition {
|
|
private static final Property<ImageView, Matrix> ANIMATED_TRANSFORM_PROPERTY = new AnonymousClass2(Matrix.class, "animatedTransform");
|
|
private static final TypeEvaluator<Matrix> NULL_MATRIX_EVALUATOR = new AnonymousClass1();
|
|
private static final String PROPNAME_BOUNDS = "android:changeImageTransform:bounds";
|
|
private static final String PROPNAME_MATRIX = "android:changeImageTransform:matrix";
|
|
private static final String[] sTransitionProperties = {"android:changeImageTransform:matrix", "android:changeImageTransform:bounds"};
|
|
|
|
/* renamed from: androidx.transition.ChangeImageTransform$1 reason: invalid class name */
|
|
public static class AnonymousClass1 implements TypeEvaluator<Matrix> {
|
|
public Matrix evaluate(float f, Matrix matrix, Matrix matrix2) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/* renamed from: androidx.transition.ChangeImageTransform$2 reason: invalid class name */
|
|
public static class AnonymousClass2 extends Property<ImageView, Matrix> {
|
|
public AnonymousClass2(Class cls, String str) {
|
|
super(cls, str);
|
|
}
|
|
|
|
public Matrix get(ImageView imageView) {
|
|
return null;
|
|
}
|
|
|
|
public void set(ImageView imageView, Matrix matrix) {
|
|
ImageViewUtils.animateTransform(imageView, matrix);
|
|
}
|
|
}
|
|
|
|
/* renamed from: androidx.transition.ChangeImageTransform$3 reason: invalid class name */
|
|
public static /* synthetic */ class AnonymousClass3 {
|
|
public static final /* synthetic */ int[] $SwitchMap$android$widget$ImageView$ScaleType;
|
|
|
|
static {
|
|
int[] iArr = new int[ImageView.ScaleType.values().length];
|
|
$SwitchMap$android$widget$ImageView$ScaleType = iArr;
|
|
try {
|
|
iArr[ImageView.ScaleType.FIT_XY.ordinal()] = 1;
|
|
} catch (NoSuchFieldError unused) {
|
|
}
|
|
try {
|
|
$SwitchMap$android$widget$ImageView$ScaleType[ImageView.ScaleType.CENTER_CROP.ordinal()] = 2;
|
|
} catch (NoSuchFieldError unused2) {
|
|
}
|
|
}
|
|
}
|
|
|
|
public ChangeImageTransform() {
|
|
}
|
|
|
|
public ChangeImageTransform(Context context, AttributeSet attributeSet) {
|
|
super(context, attributeSet);
|
|
}
|
|
|
|
private void captureValues(TransitionValues transitionValues) {
|
|
View view = transitionValues.view;
|
|
if ((view instanceof ImageView) && view.getVisibility() == 0) {
|
|
ImageView imageView = (ImageView) view;
|
|
if (imageView.getDrawable() != null) {
|
|
Map<String, Object> map = transitionValues.values;
|
|
map.put("android:changeImageTransform:bounds", new Rect(view.getLeft(), view.getTop(), view.getRight(), view.getBottom()));
|
|
map.put("android:changeImageTransform:matrix", copyImageMatrix(imageView));
|
|
}
|
|
}
|
|
}
|
|
|
|
private static Matrix centerCropMatrix(ImageView imageView) {
|
|
Drawable drawable = imageView.getDrawable();
|
|
int intrinsicWidth = drawable.getIntrinsicWidth();
|
|
float width = (float) imageView.getWidth();
|
|
float f = (float) intrinsicWidth;
|
|
int intrinsicHeight = drawable.getIntrinsicHeight();
|
|
float height = (float) imageView.getHeight();
|
|
float f2 = (float) intrinsicHeight;
|
|
float max = Math.max(width / f, height / f2);
|
|
int round = Math.round((width - (f * max)) / 2.0f);
|
|
int round2 = Math.round((height - (f2 * max)) / 2.0f);
|
|
Matrix matrix = new Matrix();
|
|
matrix.postScale(max, max);
|
|
matrix.postTranslate((float) round, (float) round2);
|
|
return matrix;
|
|
}
|
|
|
|
@NonNull
|
|
private static Matrix copyImageMatrix(@NonNull ImageView imageView) {
|
|
Drawable drawable = imageView.getDrawable();
|
|
if (drawable.getIntrinsicWidth() > 0 && drawable.getIntrinsicHeight() > 0) {
|
|
int i = AnonymousClass3.$SwitchMap$android$widget$ImageView$ScaleType[imageView.getScaleType().ordinal()];
|
|
if (i == 1) {
|
|
return fitXYMatrix(imageView);
|
|
}
|
|
if (i == 2) {
|
|
return centerCropMatrix(imageView);
|
|
}
|
|
}
|
|
return new Matrix(imageView.getImageMatrix());
|
|
}
|
|
|
|
private ObjectAnimator createMatrixAnimator(ImageView imageView, Matrix matrix, Matrix matrix2) {
|
|
return ObjectAnimator.ofObject(imageView, (Property<ImageView, V>) ANIMATED_TRANSFORM_PROPERTY, (TypeEvaluator) new TransitionUtils.MatrixEvaluator(), (Object[]) new Matrix[]{matrix, matrix2});
|
|
}
|
|
|
|
@NonNull
|
|
private ObjectAnimator createNullAnimator(@NonNull ImageView imageView) {
|
|
Property<ImageView, Matrix> property = ANIMATED_TRANSFORM_PROPERTY;
|
|
TypeEvaluator<Matrix> typeEvaluator = NULL_MATRIX_EVALUATOR;
|
|
Matrix matrix = MatrixUtils.IDENTITY_MATRIX;
|
|
return ObjectAnimator.ofObject(imageView, (Property<ImageView, V>) property, (TypeEvaluator) typeEvaluator, (Object[]) new Matrix[]{matrix, matrix});
|
|
}
|
|
|
|
private static Matrix fitXYMatrix(ImageView imageView) {
|
|
Drawable drawable = imageView.getDrawable();
|
|
Matrix matrix = new Matrix();
|
|
matrix.postScale(((float) imageView.getWidth()) / ((float) drawable.getIntrinsicWidth()), ((float) imageView.getHeight()) / ((float) drawable.getIntrinsicHeight()));
|
|
return matrix;
|
|
}
|
|
|
|
@Override // androidx.transition.Transition
|
|
public void captureEndValues(@NonNull TransitionValues transitionValues) {
|
|
captureValues(transitionValues);
|
|
}
|
|
|
|
@Override // androidx.transition.Transition
|
|
public void captureStartValues(@NonNull TransitionValues transitionValues) {
|
|
captureValues(transitionValues);
|
|
}
|
|
|
|
@Override // androidx.transition.Transition
|
|
public Animator createAnimator(@NonNull ViewGroup viewGroup, TransitionValues transitionValues, TransitionValues transitionValues2) {
|
|
if (transitionValues == null || transitionValues2 == null) {
|
|
return null;
|
|
}
|
|
Rect rect = (Rect) transitionValues.values.get("android:changeImageTransform:bounds");
|
|
Rect rect2 = (Rect) transitionValues2.values.get("android:changeImageTransform:bounds");
|
|
if (rect == null || rect2 == null) {
|
|
return null;
|
|
}
|
|
Matrix matrix = (Matrix) transitionValues.values.get("android:changeImageTransform:matrix");
|
|
Matrix matrix2 = (Matrix) transitionValues2.values.get("android:changeImageTransform:matrix");
|
|
boolean z2 = (matrix == null && matrix2 == null) || (matrix != null && matrix.equals(matrix2));
|
|
if (rect.equals(rect2) && z2) {
|
|
return null;
|
|
}
|
|
ImageView imageView = (ImageView) transitionValues2.view;
|
|
Drawable drawable = imageView.getDrawable();
|
|
int intrinsicWidth = drawable.getIntrinsicWidth();
|
|
int intrinsicHeight = drawable.getIntrinsicHeight();
|
|
if (intrinsicWidth <= 0 || intrinsicHeight <= 0) {
|
|
return createNullAnimator(imageView);
|
|
}
|
|
if (matrix == null) {
|
|
matrix = MatrixUtils.IDENTITY_MATRIX;
|
|
}
|
|
if (matrix2 == null) {
|
|
matrix2 = MatrixUtils.IDENTITY_MATRIX;
|
|
}
|
|
ANIMATED_TRANSFORM_PROPERTY.set(imageView, matrix);
|
|
return createMatrixAnimator(imageView, matrix, matrix2);
|
|
}
|
|
|
|
@Override // androidx.transition.Transition
|
|
public String[] getTransitionProperties() {
|
|
return sTransitionProperties;
|
|
}
|
|
}
|