package com.github.florent37.expectanim.core.position; import android.animation.Animator; import android.animation.ObjectAnimator; import android.support.annotation.Nullable; import android.view.View; import com.github.florent37.expectanim.core.AnimExpectation; import com.github.florent37.expectanim.ViewCalculator; import com.github.florent37.expectanim.core.ExpectAnimManager; import java.util.ArrayList; import java.util.List; /** * Created by florentchampigny on 17/02/2017. */ public class ExpectAnimPositionManager extends ExpectAnimManager { private Float positionX = null; private Float positionY = null; private Float translationX = null; private Float translationY = null; public ExpectAnimPositionManager(List<AnimExpectation> animExpectations, View viewToMove, ViewCalculator viewCalculator) { super(animExpectations, viewToMove, viewCalculator); } public Float getPositionX() { if(translationX != null){ return viewToMove.getX() + translationX; } else { return positionX; } } public Float getPositionY() { if(translationX != null){ return viewToMove.getY() + translationY; } else { return positionY; } } public void calculate() { for (AnimExpectation animExpectation : animExpectations) { if(animExpectation instanceof PositionAnimExpectation) { PositionAnimExpectation expectation = (PositionAnimExpectation)animExpectation; expectation.setViewCalculator(viewCalculator); final Float calculatedValueX = expectation.getCalculatedValueX(viewToMove); if (calculatedValueX != null) { if (expectation.isForPositionX()) { positionX = calculatedValueX; } if (expectation.isForTranslationX()) { translationX = calculatedValueX; } } final Float calculatedValueY = expectation.getCalculatedValueY(viewToMove); if (calculatedValueY != null) { if (expectation.isForPositionY()) { positionY = calculatedValueY; } if (expectation.isForTranslationY()) { translationY = calculatedValueY; } } } } } @Override public List<Animator> getAnimators() { final List<Animator> animations = new ArrayList<>(); if (positionX != null) { animations.add(ObjectAnimator.ofFloat(viewToMove, View.X, viewCalculator.finalPositionLeftOfView(viewToMove, true))); } if (positionY != null) { animations.add(ObjectAnimator.ofFloat(viewToMove, View.Y, viewCalculator.finalPositionTopOfView(viewToMove, true))); } if (translationX != null) { animations.add(ObjectAnimator.ofFloat(viewToMove, View.TRANSLATION_X, translationX)); } if (translationY != null) { animations.add(ObjectAnimator.ofFloat(viewToMove, View.TRANSLATION_Y, translationY)); } return animations; } }