ChangeImageTransformpublic class ChangeImageTransform extends Transition This Transition captures an ImageView's matrix before and after the
scene change and animates it during the transition.
In combination with ChangeBounds, ChangeImageTransform allows ImageViews
that change size, shape, or {@link android.widget.ImageView.ScaleType} to animate contents
smoothly. |
Fields Summary |
---|
private static final String | TAG | private static final String | PROPNAME_MATRIX | private static final String | PROPNAME_BOUNDS | private static final String[] | sTransitionProperties | private static android.animation.TypeEvaluator | NULL_MATRIX_EVALUATOR | private static android.util.Property | ANIMATED_TRANSFORM_PROPERTY |
Methods Summary |
---|
public void | captureEndValues(TransitionValues transitionValues)
captureValues(transitionValues);
| public void | captureStartValues(TransitionValues transitionValues)
captureValues(transitionValues);
| private void | captureValues(TransitionValues transitionValues)
View view = transitionValues.view;
if (!(view instanceof ImageView) || view.getVisibility() != View.VISIBLE) {
return;
}
ImageView imageView = (ImageView) view;
Drawable drawable = imageView.getDrawable();
if (drawable == null) {
return;
}
Map<String, Object> values = transitionValues.values;
int left = view.getLeft();
int top = view.getTop();
int right = view.getRight();
int bottom = view.getBottom();
Rect bounds = new Rect(left, top, right, bottom);
values.put(PROPNAME_BOUNDS, bounds);
Matrix matrix;
ImageView.ScaleType scaleType = imageView.getScaleType();
if (scaleType == ImageView.ScaleType.FIT_XY) {
matrix = imageView.getImageMatrix();
if (!matrix.isIdentity()) {
matrix = new Matrix(matrix);
} else {
int drawableWidth = drawable.getIntrinsicWidth();
int drawableHeight = drawable.getIntrinsicHeight();
if (drawableWidth > 0 && drawableHeight > 0) {
float scaleX = ((float) bounds.width()) / drawableWidth;
float scaleY = ((float) bounds.height()) / drawableHeight;
matrix = new Matrix();
matrix.setScale(scaleX, scaleY);
} else {
matrix = null;
}
}
} else {
matrix = new Matrix(imageView.getImageMatrix());
}
values.put(PROPNAME_MATRIX, matrix);
| public android.animation.Animator | createAnimator(android.view.ViewGroup sceneRoot, TransitionValues startValues, TransitionValues endValues)Creates an Animator for ImageViews moving, changing dimensions, and/or changing
{@link android.widget.ImageView.ScaleType}.
if (startValues == null || endValues == null) {
return null;
}
Rect startBounds = (Rect) startValues.values.get(PROPNAME_BOUNDS);
Rect endBounds = (Rect) endValues.values.get(PROPNAME_BOUNDS);
if (startBounds == null || endBounds == null) {
return null;
}
Matrix startMatrix = (Matrix) startValues.values.get(PROPNAME_MATRIX);
Matrix endMatrix = (Matrix) endValues.values.get(PROPNAME_MATRIX);
boolean matricesEqual = (startMatrix == null && endMatrix == null) ||
(startMatrix != null && startMatrix.equals(endMatrix));
if (startBounds.equals(endBounds) && matricesEqual) {
return null;
}
ImageView imageView = (ImageView) endValues.view;
Drawable drawable = imageView.getDrawable();
int drawableWidth = drawable.getIntrinsicWidth();
int drawableHeight = drawable.getIntrinsicHeight();
ObjectAnimator animator;
if (drawableWidth == 0 || drawableHeight == 0) {
animator = createNullAnimator(imageView);
} else {
if (startMatrix == null) {
startMatrix = Matrix.IDENTITY_MATRIX;
}
if (endMatrix == null) {
endMatrix = Matrix.IDENTITY_MATRIX;
}
ANIMATED_TRANSFORM_PROPERTY.set(imageView, startMatrix);
animator = createMatrixAnimator(imageView, startMatrix, endMatrix);
}
return animator;
| private android.animation.ObjectAnimator | createMatrixAnimator(android.widget.ImageView imageView, android.graphics.Matrix startMatrix, android.graphics.Matrix endMatrix)
return ObjectAnimator.ofObject(imageView, ANIMATED_TRANSFORM_PROPERTY,
new TransitionUtils.MatrixEvaluator(), startMatrix, endMatrix);
| private android.animation.ObjectAnimator | createNullAnimator(android.widget.ImageView imageView)
return ObjectAnimator.ofObject(imageView, ANIMATED_TRANSFORM_PROPERTY,
NULL_MATRIX_EVALUATOR, null, null);
| public java.lang.String[] | getTransitionProperties()
return sTransitionProperties;
|
|