FileDocCategorySizeDatePackage
TranslationAnimationCreator.javaAPI DocAndroid 5.1 API5924Thu Mar 12 22:22:10 GMT 2015android.transition

TranslationAnimationCreator

public class TranslationAnimationCreator extends Object
This class is used by Slide and Explode to create an animator that goes from the start position to the end position. It takes into account the canceled position so that it will not blink out or shift suddenly when the transition is interrupted.

Fields Summary
Constructors Summary
Methods Summary
static android.animation.AnimatorcreateAnimation(android.view.View view, TransitionValues values, int viewPosX, int viewPosY, float startX, float startY, float endX, float endY, android.animation.TimeInterpolator interpolator)
Creates an animator that can be used for x and/or y translations. When interrupted, it sets a tag to keep track of the position so that it may be continued from position.

param
view The view being moved. This may be in the overlay for onDisappear.
param
values The values containing the view in the view hierarchy.
param
viewPosX The x screen coordinate of view
param
viewPosY The y screen coordinate of view
param
startX The start translation x of view
param
startY The start translation y of view
param
endX The end translation x of view
param
endY The end translation y of view
param
interpolator The interpolator to use with this animator.
return
An animator that moves from (startX, startY) to (endX, endY) unless there was a previous interruption, in which case it moves from the current position to (endX, endY).

        float terminalX = view.getTranslationX();
        float terminalY = view.getTranslationY();
        int[] startPosition = (int[]) values.view.getTag(R.id.transitionPosition);
        if (startPosition != null) {
            startX = startPosition[0] - viewPosX + terminalX;
            startY = startPosition[1] - viewPosY + terminalY;
        }
        // Initial position is at translation startX, startY, so position is offset by that amount
        int startPosX = viewPosX + Math.round(startX - terminalX);
        int startPosY = viewPosY + Math.round(startY - terminalY);

        view.setTranslationX(startX);
        view.setTranslationY(startY);
        if (startX == endX && startY == endY) {
            return null;
        }
        Path path = new Path();
        path.moveTo(startX, startY);
        path.lineTo(endX, endY);
        ObjectAnimator anim = ObjectAnimator.ofFloat(view, View.TRANSLATION_X, View.TRANSLATION_Y,
                path);

        TransitionPositionListener listener = new TransitionPositionListener(view, values.view,
                startPosX, startPosY, terminalX, terminalY);
        anim.addListener(listener);
        anim.addPauseListener(listener);
        anim.setInterpolator(interpolator);
        return anim;