package com.espian.showcaseview.anim; import android.animation.Animator; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.os.Handler; import android.view.View; public class AnimationUtils { public 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 view.getX(); } public static float getY(View view) { return view.getY(); } public static void hide(View view) { view.setAlpha(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, INVISIBLE, 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) { view.setAlpha(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; } }