package com.github.espiandev.showcaseview.anim;
import android.os.Handler;
import android.view.View;
import com.nineoldandroids.animation.Animator;
import com.nineoldandroids.animation.AnimatorSet;
import com.nineoldandroids.animation.ObjectAnimator;
import com.nineoldandroids.view.ViewHelper;
public class AnimationUtils {
private static final int DEFAULT_DURATION = 300;
private static final String ALPHA = "alpha";
private static final float INVISIBLE = 0f;
private static final float VISIBLE = 1f;
private static final String COORD_X = "x";
private static final String COORD_Y = "y";
private static final int INSTANT = 0;
public interface AnimationStartListener {
void onAnimationStart();
}
public interface AnimationEndListener {
void onAnimationEnd();
}
public static float getX(View view) {
return ViewHelper.getX(view);
}
public static float getY(View view) {
return ViewHelper.getY(view);
}
public static void hide(View view) {
ViewHelper.setAlpha(view, INVISIBLE);
}
public static ObjectAnimator createFadeInAnimation(Object target, final AnimationStartListener listener) {
return createFadeInAnimation(target, DEFAULT_DURATION, listener);
}
public static ObjectAnimator createFadeInAnimation(Object target, int duration, final AnimationStartListener listener) {
ObjectAnimator oa = ObjectAnimator.ofFloat(target, ALPHA, VISIBLE);
oa.setDuration(duration).addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) {
listener.onAnimationStart();
}
@Override
public void onAnimationEnd(Animator animator) {
}
@Override
public void onAnimationCancel(Animator animator) {
}
@Override
public void onAnimationRepeat(Animator animator) {
}
});
return oa;
}
public static ObjectAnimator createFadeOutAnimation(Object target, final AnimationEndListener listener) {
return createFadeOutAnimation(target, DEFAULT_DURATION, listener);
}
public static ObjectAnimator createFadeOutAnimation(Object target, int duration, final AnimationEndListener listener) {
ObjectAnimator oa = ObjectAnimator.ofFloat(target, ALPHA, INVISIBLE);
oa.setDuration(duration).addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) {
}
@Override
public void onAnimationEnd(Animator animator) {
listener.onAnimationEnd();
}
@Override
public void onAnimationCancel(Animator animator) {
}
@Override
public void onAnimationRepeat(Animator animator) {
}
});
return oa;
}
public static AnimatorSet createMovementAnimation(View view, float canvasX, float canvasY,
float offsetStartX, float offsetStartY,
float offsetEndX, float offsetEndY,
final AnimationEndListener listener) {
ViewHelper.setAlpha(view, INVISIBLE);
ObjectAnimator alphaIn = ObjectAnimator.ofFloat(view, ALPHA, INVISIBLE, VISIBLE).setDuration(500);
ObjectAnimator setUpX = ObjectAnimator.ofFloat(view, COORD_X, canvasX + offsetStartX).setDuration(INSTANT);
ObjectAnimator setUpY = ObjectAnimator.ofFloat(view, COORD_Y, canvasY + offsetStartY).setDuration(INSTANT);
ObjectAnimator moveX = ObjectAnimator.ofFloat(view, COORD_X, canvasX + offsetEndX).setDuration(1000);
ObjectAnimator moveY = ObjectAnimator.ofFloat(view, COORD_Y, canvasY + offsetEndY).setDuration(1000);
moveX.setStartDelay(1000);
moveY.setStartDelay(1000);
ObjectAnimator alphaOut = ObjectAnimator.ofFloat(view, ALPHA, INVISIBLE).setDuration(500);
alphaOut.setStartDelay(2500);
AnimatorSet as = new AnimatorSet();
as.play(setUpX).with(setUpY).before(alphaIn).before(moveX).with(moveY).before(alphaOut);
Handler handler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run() {
listener.onAnimationEnd();
}
};
handler.postDelayed(runnable, 3000);
return as;
}
public static AnimatorSet createMovementAnimation(View view, float x, float y) {
ObjectAnimator alphaIn = ObjectAnimator.ofFloat(view, ALPHA, INVISIBLE, VISIBLE).setDuration(500);
ObjectAnimator setUpX = ObjectAnimator.ofFloat(view, COORD_X, x).setDuration(INSTANT);
ObjectAnimator setUpY = ObjectAnimator.ofFloat(view, COORD_Y, y).setDuration(INSTANT);
AnimatorSet as = new AnimatorSet();
as.play(setUpX).with(setUpY).before(alphaIn);
return as;
}
}