package com.znv.linkup.util;
import android.animation.Animator;
import android.animation.ObjectAnimator;
import android.view.View;
import com.znv.linkup.view.animation.HideAnimator;
/**
* 动画辅助类,包括褪色,缩放,旋转和平移
*
* @author yzb
*
*/
public class AnimatorUtil {
private static int defaultDuration = 500;
/**
* 设置view的透明度
*
* @param view
* 参与动画的view
* @param fromAlpha
* 起始透明度
* @param toAlpha
* 结束透明度
*/
public static void animAlpha(View view, float fromAlpha, float toAlpha) {
animAlpha(view, fromAlpha, toAlpha, defaultDuration);
}
/**
* 设置view的透明度
*
* @param view
* 参与动画的view
* @param fromAlpha
* 起始透明度
* @param toAlpha
* 结束透明度
* @param duration
* 动画时长
*/
public static void animAlpha(View view, float fromAlpha, float toAlpha, int duration) {
ObjectAnimator.ofFloat(view, "alpha", fromAlpha, toAlpha).setDuration(duration).start();
}
/**
* 设置view的透明度
*
* @param view
* 参与动画的view
* @param fromAlpha
* 起始透明度
* @param toAlpha
* 结束透明度
* @param duration
* 动画时长
* @param delay
* 动画延迟
*/
public static void animAlpha(View view, float fromAlpha, float toAlpha, int duration, int delay) {
Animator anim = ObjectAnimator.ofFloat(view, "alpha", fromAlpha, toAlpha).setDuration(duration);
anim.setStartDelay(delay);
anim.start();
}
/**
* 缩放动画
*
* @param view
* 执行动画的view
* @param fromX
* X开始的比例
* @param toX
* X缩放比例
* @param fromY
* Y开始的比例
* @param toY
* Y缩放比例
*/
public static void animScale(View view, float fromX, float toX, float fromY, float toY) {
animScale(view, fromX, toX, fromY, toY, defaultDuration);
}
/**
* 缩放动画
*
* @param view
* 执行动画的view
* @param fromX
* X开始的比例
* @param toX
* X缩放比例
* @param fromY
* Y开始的比例
* @param toY
* Y缩放比例
* @param duration
* 动画时长
*/
public static void animScale(View view, float fromX, float toX, float fromY, float toY, int duration) {
ObjectAnimator.ofFloat(view, "scaleX", fromX, toX).setDuration(duration).start();
ObjectAnimator.ofFloat(view, "scaleY", fromY, toY).setDuration(duration).start();
}
/**
* 旋转动画
*
* @param view
* 执行动画的view
* @param fromDegrees
* 起始角度
* @param toDegrees
* 结束角度
*/
public static void animRotate(View view, float fromDegrees, float toDegrees) {
animRotate(view, fromDegrees, toDegrees, defaultDuration);
}
/**
* 旋转动画
*
* @param view
* 执行动画的view
* @param fromDegrees
* 起始角度
* @param toDegrees
* 结束角度
* @param duration
* 动画时长
*/
public static void animRotate(View view, float fromDegrees, float toDegrees, int duration) {
ObjectAnimator.ofFloat(view, "rotation", fromDegrees, toDegrees).setDuration(duration).start();
}
/**
* 平移动画
*
* @param view
* 执行动画的view
* @param fromX
* 起始X坐标
* @param toX
* 结束X坐标
* @param fromY
* 起始Y坐标
* @param toY
* 结束Y坐标
*/
public static void animTranslate(View view, float fromX, float toX, float fromY, float toY) {
animTranslate(view, fromX, toX, fromY, toY, defaultDuration, 0, false);
}
/**
* 平移动画
*
* @param view
* 执行动画的view
* @param fromX
* 起始X坐标
* @param toX
* 结束X坐标
* @param fromY
* 起始Y坐标
* @param toY
* 结束Y坐标
* @param duration
* 动画时长
*/
public static void animTranslate(View view, float fromX, float toX, float fromY, float toY, int duration, int delay, boolean isHide) {
Animator animX = ObjectAnimator.ofFloat(view, "translationX", fromX, toX).setDuration(duration);
Animator animY = ObjectAnimator.ofFloat(view, "translationY", fromY, toY).setDuration(duration);
if (fromX != toX) {
animX.setStartDelay(delay);
animX.start();
} else {
view.setTranslationX(fromX);
}
if (fromY != toY) {
animY.setStartDelay(delay);
if (isHide) {
animY.addListener(new HideAnimator(view));
}
animY.start();
} else {
view.setTranslationY(fromY);
}
}
}