package com.jacky.uikit.animator; import android.view.View; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.Animation.AnimationListener; import android.view.animation.RotateAnimation; import android.view.animation.ScaleAnimation; import com.jacky.uikit.R; /** * @author jacky * @version v1.0 * @since 16/3/16 */ public class AnimationUtils { public static void enlargeAnim(View v) { Animation a = android.view.animation.AnimationUtils.loadAnimation(v.getContext(), R.anim.uikit_enlarge); a.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { } }); a.setFillAfter(true); v.clearAnimation(); v.setAnimation(a); a.start(); } public static void reduceAnim(View v) { Animation a = android.view.animation.AnimationUtils.loadAnimation(v.getContext(), R.anim.uikit_reduce); a.setFillAfter(true); v.clearAnimation(); v.startAnimation(a); a.start(); } /** * 默认动画持续时间 */ public static final long DEFAULT_ANIMATION_DURATION = 400; /** * 获取一个旋转动画 * * @param fromDegrees 开始角度 * @param toDegrees 结束角度 * @param pivotXType 旋转中心点X轴坐标相对类型 * @param pivotXValue 旋转中心点X轴坐标 * @param pivotYType 旋转中心点Y轴坐标相对类型 * @param pivotYValue 旋转中心点Y轴坐标 * @param durationMillis 持续时间 * @param animationListener 动画监听器 * @return 一个旋转动画 */ public static RotateAnimation getRotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue, long durationMillis, AnimationListener animationListener) { RotateAnimation rotateAnimation = new RotateAnimation(fromDegrees, toDegrees, pivotXType, pivotXValue, pivotYType, pivotYValue); rotateAnimation.setDuration(durationMillis); if (animationListener != null) { rotateAnimation.setAnimationListener(animationListener); } return rotateAnimation; } /** * 获取一个根据视图自身中心点旋转的动画 * * @param durationMillis 动画持续时间 * @param animationListener 动画监听器 * @return 一个根据中心点旋转的动画 */ public static RotateAnimation getRotateAnimationByCenter(long durationMillis, AnimationListener animationListener) { return getRotateAnimation(0f, 359f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f, durationMillis, animationListener); } /** * 获取一个根据中心点旋转的动画 * * @param duration 动画持续时间 * @return 一个根据中心点旋转的动画 */ public static RotateAnimation getRotateAnimationByCenter(long duration) { return getRotateAnimationByCenter(duration, null); } /** * 获取一个根据视图自身中心点旋转的动画 * * @param animationListener 动画监听器 * @return 一个根据中心点旋转的动画 */ public static RotateAnimation getRotateAnimationByCenter(AnimationListener animationListener) { return getRotateAnimationByCenter(DEFAULT_ANIMATION_DURATION, animationListener); } /** * 获取一个根据中心点旋转的动画 * * @return 一个根据中心点旋转的动画,默认持续时间为DEFAULT_ANIMATION_DURATION */ public static RotateAnimation getRotateAnimationByCenter() { return getRotateAnimationByCenter(DEFAULT_ANIMATION_DURATION, null); } /** * 获取一个透明度渐变动画 * * @param fromAlpha 开始时的透明度 * @param toAlpha 结束时的透明度都 * @param durationMillis 持续时间 * @param animationListener 动画监听器 * @return 一个透明度渐变动画 */ public static AlphaAnimation getAlphaAnimation(float fromAlpha, float toAlpha, long durationMillis, AnimationListener animationListener) { AlphaAnimation alphaAnimation = new AlphaAnimation(fromAlpha, toAlpha); alphaAnimation.setDuration(durationMillis); if (animationListener != null) { alphaAnimation.setAnimationListener(animationListener); } return alphaAnimation; } /** * 获取一个透明度渐变动画 * * @param fromAlpha 开始时的透明度 * @param toAlpha 结束时的透明度都 * @param durationMillis 持续时间 * @return 一个透明度渐变动画 */ public static AlphaAnimation getAlphaAnimation(float fromAlpha, float toAlpha, long durationMillis) { return getAlphaAnimation(fromAlpha, toAlpha, durationMillis, null); } /** * 获取一个透明度渐变动画 * * @param fromAlpha 开始时的透明度 * @param toAlpha 结束时的透明度都 * @param animationListener 动画监听器 * @return 一个透明度渐变动画,默认持续时间为DEFAULT_ANIMATION_DURATION */ public static AlphaAnimation getAlphaAnimation(float fromAlpha, float toAlpha, AnimationListener animationListener) { return getAlphaAnimation(fromAlpha, toAlpha, DEFAULT_ANIMATION_DURATION, animationListener); } /** * 获取一个透明度渐变动画 * * @param fromAlpha 开始时的透明度 * @param toAlpha 结束时的透明度都 * @return 一个透明度渐变动画,默认持续时间为DEFAULT_ANIMATION_DURATION */ public static AlphaAnimation getAlphaAnimation(float fromAlpha, float toAlpha) { return getAlphaAnimation(fromAlpha, toAlpha, DEFAULT_ANIMATION_DURATION, null); } /** * 获取一个由完全显示变为不可见的透明度渐变动画 * * @param durationMillis 持续时间 * @param animationListener 动画监听器 * @return 一个由完全显示变为不可见的透明度渐变动画 */ public static AlphaAnimation getHiddenAlphaAnimation(long durationMillis, AnimationListener animationListener) { return getAlphaAnimation(1.0f, 0.0f, durationMillis, animationListener); } /** * 获取一个由完全显示变为不可见的透明度渐变动画 * * @param durationMillis 持续时间 * @return 一个由完全显示变为不可见的透明度渐变动画 */ public static AlphaAnimation getHiddenAlphaAnimation(long durationMillis) { return getHiddenAlphaAnimation(durationMillis, null); } /** * 获取一个由完全显示变为不可见的透明度渐变动画 * * @param animationListener 动画监听器 * @return 一个由完全显示变为不可见的透明度渐变动画,默认持续时间为DEFAULT_ANIMATION_DURATION */ public static AlphaAnimation getHiddenAlphaAnimation(AnimationListener animationListener) { return getHiddenAlphaAnimation(DEFAULT_ANIMATION_DURATION, animationListener); } /** * 获取一个由完全显示变为不可见的透明度渐变动画 * * @return 一个由完全显示变为不可见的透明度渐变动画,默认持续时间为DEFAULT_ANIMATION_DURATION */ public static AlphaAnimation getHiddenAlphaAnimation() { return getHiddenAlphaAnimation(DEFAULT_ANIMATION_DURATION, null); } /** * 获取一个由不可见变为完全显示的透明度渐变动画 * * @param durationMillis 持续时间 * @param animationListener 动画监听器 * @return 一个由不可见变为完全显示的透明度渐变动画 */ public static AlphaAnimation getShowAlphaAnimation(long durationMillis, AnimationListener animationListener) { return getAlphaAnimation(0.0f, 1.0f, durationMillis, animationListener); } /** * 获取一个由不可见变为完全显示的透明度渐变动画 * * @param durationMillis 持续时间 * @return 一个由不可见变为完全显示的透明度渐变动画 */ public static AlphaAnimation getShowAlphaAnimation(long durationMillis) { return getAlphaAnimation(0.0f, 1.0f, durationMillis, null); } /** * 获取一个由不可见变为完全显示的透明度渐变动画 * * @param animationListener 动画监听器 * @return 一个由不可见变为完全显示的透明度渐变动画,默认持续时间为DEFAULT_ANIMATION_DURATION */ public static AlphaAnimation getShowAlphaAnimation(AnimationListener animationListener) { return getAlphaAnimation(0.0f, 1.0f, DEFAULT_ANIMATION_DURATION, animationListener); } /** * 获取一个由不可见变为完全显示的透明度渐变动画 * * @return 一个由不可见变为完全显示的透明度渐变动画,默认持续时间为DEFAULT_ANIMATION_DURATION */ public static AlphaAnimation getShowAlphaAnimation() { return getAlphaAnimation(0.0f, 1.0f, DEFAULT_ANIMATION_DURATION, null); } /** * 获取一个缩小动画 * * @param durationMillis * @param animationListener * @return */ public static ScaleAnimation getLessenScaleAnimation(float fromX, float toX, float fromY, float toY, long durationMillis, AnimationListener animationListener) { ScaleAnimation scaleAnimation = new ScaleAnimation(fromX, toX, fromY, toY, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); scaleAnimation.setDuration(durationMillis); scaleAnimation.setAnimationListener(animationListener); return scaleAnimation; } /** * 获取一个缩小动画 * * @param durationMillis * @return */ public static ScaleAnimation getLessenScaleAnimation(long durationMillis) { return getLessenScaleAnimation(1.0f, 0.0f, 1.0f, 0.0f, durationMillis, null); } public static ScaleAnimation getLessenScaleAnimation(float fromX, float fromY, long durationMillis) { return getLessenScaleAnimation(fromX, 1.0f, fromY, 1.0f, durationMillis, null); } public static void startLessenScaleAnimation(View v, float fromX, float fromY, long durationMillis) { ScaleAnimation scaleAnimation = getLessenScaleAnimation(fromX, fromY, durationMillis); scaleAnimation.setFillAfter(true); v.clearAnimation(); v.setAnimation(scaleAnimation); scaleAnimation.start(); } /** * 获取一个缩小动画 * * @param animationListener * @return */ public static ScaleAnimation getLessenScaleAnimation(AnimationListener animationListener) { return getLessenScaleAnimation(1.0f, 0.0f, 1.0f, 0.0f, DEFAULT_ANIMATION_DURATION, animationListener); } /** * 获取一个放大动画 * * @param durationMillis * @param animationListener * @return */ public static ScaleAnimation getAmplificationAnimation(float fromX, float toX, float fromY, float toY, long durationMillis, AnimationListener animationListener) { ScaleAnimation scaleAnimation = new ScaleAnimation(fromX, toX, fromY, toY, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); scaleAnimation.setDuration(durationMillis); scaleAnimation.setAnimationListener(animationListener); return scaleAnimation; } /** * 获取一个放大动画 * * @param durationMillis * @return */ public static ScaleAnimation getAmplificationAnimation(long durationMillis) { return getAmplificationAnimation(0.0f, 1.0f, 0.0f, 1.0f, durationMillis, null); } public static ScaleAnimation getAmplificationAnimation(float toX, float toY, long durationMillis) { return getAmplificationAnimation(1.0f, toX, 1.0f, toY, durationMillis, null); } public static void startAmplificationAnimation(View v, float toX, float toY, long durationMillis) { ScaleAnimation scaleAnimation = getAmplificationAnimation(toX, toY, durationMillis); scaleAnimation.setFillAfter(true); v.clearAnimation(); v.setAnimation(scaleAnimation); scaleAnimation.start(); } /** * 获取一个放大动画 * * @param animationListener * @return */ public static ScaleAnimation getAmplificationAnimation(AnimationListener animationListener) { return getAmplificationAnimation(0.0f, 1.0f, 0.0f, 1.0f, DEFAULT_ANIMATION_DURATION, animationListener); } }