57 lines
2 KiB
Java
57 lines
2 KiB
Java
package androidx.transition;
|
|
|
|
import android.annotation.SuppressLint;
|
|
import android.graphics.Matrix;
|
|
import android.graphics.drawable.Drawable;
|
|
import android.os.Build;
|
|
import android.widget.ImageView;
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.annotation.RequiresApi;
|
|
import java.lang.reflect.Field;
|
|
public class ImageViewUtils {
|
|
private static Field sDrawMatrixField = null;
|
|
private static boolean sDrawMatrixFieldFetched = false;
|
|
private static boolean sTryHiddenAnimateTransform = true;
|
|
|
|
private ImageViewUtils() {
|
|
}
|
|
|
|
public static void animateTransform(@NonNull ImageView imageView, @Nullable Matrix matrix) {
|
|
if (Build.VERSION.SDK_INT >= 29) {
|
|
imageView.animateTransform(matrix);
|
|
} else if (matrix == null) {
|
|
Drawable drawable = imageView.getDrawable();
|
|
if (drawable != null) {
|
|
drawable.setBounds(0, 0, (imageView.getWidth() - imageView.getPaddingLeft()) - imageView.getPaddingRight(), (imageView.getHeight() - imageView.getPaddingTop()) - imageView.getPaddingBottom());
|
|
imageView.invalidate();
|
|
}
|
|
} else {
|
|
hiddenAnimateTransform(imageView, matrix);
|
|
}
|
|
}
|
|
|
|
private static void fetchDrawMatrixField() {
|
|
if (!sDrawMatrixFieldFetched) {
|
|
try {
|
|
Field declaredField = ImageView.class.getDeclaredField("mDrawMatrix");
|
|
sDrawMatrixField = declaredField;
|
|
declaredField.setAccessible(true);
|
|
} catch (NoSuchFieldException unused) {
|
|
}
|
|
sDrawMatrixFieldFetched = true;
|
|
}
|
|
}
|
|
|
|
@RequiresApi(21)
|
|
@SuppressLint({"NewApi"})
|
|
private static void hiddenAnimateTransform(@NonNull ImageView imageView, @Nullable Matrix matrix) {
|
|
if (sTryHiddenAnimateTransform) {
|
|
try {
|
|
imageView.animateTransform(matrix);
|
|
} catch (NoSuchMethodError unused) {
|
|
sTryHiddenAnimateTransform = false;
|
|
}
|
|
}
|
|
}
|
|
}
|