package android.view.ext; import android.content.Context; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.AnimationSet; import android.view.animation.AnimationUtils; import android.view.animation.RotateAnimation; import android.view.animation.TranslateAnimation; import android.view.ext.R; /** * Factory class for creating satellite in/out animations * * @author Siyamed SINIR * */ public class SatelliteAnimationCreator { public static Animation createItemInAnimation(Context context, int index, long expandDuration, int x, int y){ RotateAnimation rotate = new RotateAnimation(720, 0, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); rotate.setInterpolator(context, R.anim.sat_item_in_rotate_interpolator); rotate.setDuration(expandDuration); TranslateAnimation translate = new TranslateAnimation(x, 0, y, 0); long delay = 250; if(expandDuration <= 250){ delay = expandDuration / 3; } long duration = 400; if((expandDuration-delay) > duration){ duration = expandDuration-delay; } translate.setDuration(duration); translate.setStartOffset(delay); translate.setInterpolator(context, R.anim.sat_item_anticipate_interpolator); AlphaAnimation alphaAnimation = new AlphaAnimation(1f, 0f); long alphaDuration = 10; if(expandDuration < 10){ alphaDuration = expandDuration / 10; } alphaAnimation.setDuration(alphaDuration); alphaAnimation.setStartOffset((delay + duration) - alphaDuration); AnimationSet animationSet = new AnimationSet(false); animationSet.setFillAfter(false); animationSet.setFillBefore(true); animationSet.setFillEnabled(true); animationSet.addAnimation(alphaAnimation); animationSet.addAnimation(rotate); animationSet.addAnimation(translate); animationSet.setStartOffset(30*index); animationSet.start(); animationSet.startNow(); return animationSet; } public static Animation createItemOutAnimation(Context context, int index, long expandDuration, int x, int y){ AlphaAnimation alphaAnimation = new AlphaAnimation(0f, 1f); long alphaDuration = 60; if(expandDuration < 60){ alphaDuration = expandDuration / 4; } alphaAnimation.setDuration(alphaDuration); alphaAnimation.setStartOffset(0); TranslateAnimation translate = new TranslateAnimation(0, x, 0, y); translate.setStartOffset(0); translate.setDuration(expandDuration); translate.setInterpolator(context, R.anim.sat_item_overshoot_interpolator); RotateAnimation rotate = new RotateAnimation(0f, 360f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); rotate.setInterpolator(context, R.anim.sat_item_out_rotate_interpolator); long duration = 100; if(expandDuration <= 150){ duration = expandDuration / 3; } rotate.setDuration(expandDuration-duration); rotate.setStartOffset(duration); AnimationSet animationSet = new AnimationSet(false); animationSet.setFillAfter(false); animationSet.setFillBefore(true); animationSet.setFillEnabled(true); //animationSet.addAnimation(alphaAnimation); //animationSet.addAnimation(rotate); animationSet.addAnimation(translate); animationSet.setStartOffset(30*index); return animationSet; } public static Animation createMainButtonAnimation(Context context){ return AnimationUtils.loadAnimation(context, R.anim.sat_main_rotate_left); } public static Animation createMainButtonInverseAnimation(Context context){ return AnimationUtils.loadAnimation(context, R.anim.sat_main_rotate_right); } public static Animation createItemClickAnimation(Context context){ return AnimationUtils.loadAnimation(context, R.anim.sat_item_anim_click); } public static int getTranslateX(float degree, int distance){ return Double.valueOf(distance * Math.cos(Math.toRadians(degree))).intValue(); } public static int getTranslateY(float degree, int distance){ return Double.valueOf(-1 * distance * Math.sin(Math.toRadians(degree))).intValue(); } }