package com.github.florent37.expectanim; import android.animation.Animator; import android.support.annotation.Nullable; import android.view.View; import com.github.florent37.expectanim.core.AnimExpectation; import com.github.florent37.expectanim.core.alpha.ExpectAnimAlphaManager; import com.github.florent37.expectanim.core.anim3d.ExpectAnimCameraDistanceManager; import com.github.florent37.expectanim.core.custom.ExpectAnimCustomManager; import com.github.florent37.expectanim.core.position.ExpectAnimPositionManager; import com.github.florent37.expectanim.core.rotation.ExpectAnimRotationManager; import com.github.florent37.expectanim.core.scale.ExpectAnimScaleManager; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Created by florentchampigny on 17/02/2017. */ public class ViewExpectation { private final ExpectAnim expectAnim; private final View viewToMove; private final List<View> dependencies; private List<Animator> animations; private List<AnimExpectation> animExpectations; private Float willHasScaleX; private Float willHasScaleY; private Float willHasPositionX; private Float willHasPositionY; private Float willHasRotationX; private Float willHaveRotationX, willHaveRotationY; private Float willHaveCameraDistance; ViewExpectation(ExpectAnim expectAnim, View viewToMove) { this.expectAnim = expectAnim; this.viewToMove = viewToMove; this.animations = new ArrayList<>(); this.animExpectations = new ArrayList<>(); this.dependencies = new ArrayList<>(); } public ViewExpectation expect(View view) { return expectAnim.expect(view); } public ViewExpectation toBe(AnimExpectation... animExpectations) { this.animExpectations.addAll(Arrays.asList(animExpectations)); return this; } private void calculatePosition(ViewCalculator viewCalculator) { if (animExpectations != null) { final ExpectAnimPositionManager manager = new ExpectAnimPositionManager(animExpectations, viewToMove, viewCalculator); manager.calculate(); willHasPositionX = manager.getPositionX(); willHasPositionY = manager.getPositionY(); animations.addAll(manager.getAnimators()); } } private void calculateScale(ViewCalculator viewCalculator) { if (animExpectations != null) { final ExpectAnimScaleManager manager = new ExpectAnimScaleManager(animExpectations, viewToMove, viewCalculator); manager.calculate(); willHasScaleX = manager.getScaleX(); willHasScaleY = manager.getScaleY(); animations.addAll(manager.getAnimators()); } } private void calculateAlpha(ViewCalculator viewCalculator) { if (animExpectations != null) { final ExpectAnimAlphaManager manager = new ExpectAnimAlphaManager(animExpectations, viewToMove, viewCalculator); manager.calculate(); animations.addAll(manager.getAnimators()); } } private void calculate3DTransforms(ViewCalculator viewCalculator) { if (animExpectations != null) { // camera distance animations final ExpectAnimCameraDistanceManager cameraDistanceManager = new ExpectAnimCameraDistanceManager(animExpectations, viewToMove, viewCalculator); cameraDistanceManager.calculate(); willHaveCameraDistance = cameraDistanceManager.getCameraDistance(); animations.addAll(cameraDistanceManager.getAnimators()); } } private void calculateRotation(ViewCalculator viewCalculator) { if (animExpectations != null) { final ExpectAnimRotationManager manager = new ExpectAnimRotationManager(animExpectations, viewToMove, viewCalculator); manager.calculate(); willHasRotationX = manager.getRotation(); willHaveRotationX = manager.getRotationX(); willHaveRotationY = manager.getRotationY(); animations.addAll(manager.getAnimators()); } } private void calculateCustom(ViewCalculator viewCalculator) { if (animExpectations != null) { final ExpectAnimCustomManager manager = new ExpectAnimCustomManager(animExpectations, viewToMove, viewCalculator); manager.calculate(); animations.addAll(manager.getAnimators()); } } ExpectAnim start() { return expectAnim.start(); } void setPercent(float percent) { expectAnim.setPercent(percent); } void calculate(ViewCalculator viewCalculator) { calculate3DTransforms(viewCalculator); calculateRotation(viewCalculator); calculateScale(viewCalculator); calculatePosition(viewCalculator); calculateAlpha(viewCalculator); calculateCustom(viewCalculator); } List<Animator> getAnimations() { return animations; } List<View> calculateDependencies() { dependencies.clear(); if (animExpectations != null) { for (AnimExpectation animExpectation : animExpectations) { dependencies.addAll(animExpectation.getViewsDependencies()); } } return dependencies; } List<View> getDependencies() { return dependencies; } View getViewToMove() { return viewToMove; } Float getFuturPositionX() { return willHasPositionX; } Float getFuturPositionY() { return willHasPositionY; } Float getWillHasScaleX() { if (willHasScaleX != null) { return willHasScaleX; } else { return 1f; } } Float getWillHasScaleY() { if (willHasScaleY != null) { return willHasScaleY; } else { return 1f; } } Float getWillHaveRotation() { if (willHasRotationX != null) { return willHasRotationX; } else { return null; } } @Nullable Float getWillHaveRotationX() { return willHaveRotationX; } @Nullable Float getWillHaveRotationY() { return willHaveRotationY; } public ExpectAnim toAnimation() { return expectAnim; } }