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);
}
}