package com.github.florent37.expectanim.core.anim3d;
import android.animation.Animator;
import android.animation.ValueAnimator;
import android.os.Build;
import android.support.annotation.Nullable;
import android.view.View;
import com.github.florent37.expectanim.ViewCalculator;
import com.github.florent37.expectanim.core.AnimExpectation;
import com.github.florent37.expectanim.core.ExpectAnimManager;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Christian Ringshofer on 17/02/2017.
*/
public class ExpectAnimCameraDistanceManager extends ExpectAnimManager {
@Nullable
private Float mCurrentCameraDistance, mCameraDistance = null;
public ExpectAnimCameraDistanceManager(List<AnimExpectation> animExpectations, View viewToMove, ViewCalculator viewCalculator) {
super(animExpectations, viewToMove, viewCalculator);
}
@Override
public void calculate() {
for (AnimExpectation expectation : animExpectations) {
if (expectation instanceof CameraDistanceExpectation) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
mCurrentCameraDistance = viewToMove.getCameraDistance();
}
final Float cameraDistance = ((CameraDistanceExpectation) expectation).getCalculatedCameraDistance(viewToMove);
if (cameraDistance != null) mCameraDistance = cameraDistance;
}
}
}
@Override
public List<Animator> getAnimators() {
final List<Animator> animations = new ArrayList<>();
calculate();
if (mCameraDistance != null) {
final ValueAnimator animator = ValueAnimator.ofFloat(mCurrentCameraDistance, mCameraDistance);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
viewToMove.setCameraDistance((float) valueAnimator.getAnimatedValue());
}
});
animations.add(animator);
}
return animations;
}
@Nullable
public Float getCameraDistance() {
return mCameraDistance;
}
}