package me.xiaopan.sketchsample.util;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
public class AnimationUtils {
/**
* 将给定视图渐渐显示出来(view.setVisibility(View.VISIBLE))
*
* @param view 被处理的视图
* @param durationMillis 持续时间,毫秒
* @param isBanClick 在执行动画的过程中是否禁止点击
* @param animationListener 动画监听器
*/
public static void visibleViewByAlpha(final View view, long durationMillis, final boolean isBanClick, final Animation.AnimationListener animationListener) {
if (view.getVisibility() != View.VISIBLE) {
view.setVisibility(View.VISIBLE);
AlphaAnimation showAlphaAnimation = getShowAlphaAnimation(durationMillis);
showAlphaAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
if (isBanClick) {
view.setClickable(false);
}
if (animationListener != null) {
animationListener.onAnimationStart(animation);
}
}
@Override
public void onAnimationRepeat(Animation animation) {
if (animationListener != null) {
animationListener.onAnimationRepeat(animation);
}
}
@Override
public void onAnimationEnd(Animation animation) {
if (isBanClick) {
view.setClickable(true);
}
if (animationListener != null) {
animationListener.onAnimationEnd(animation);
}
}
});
view.startAnimation(showAlphaAnimation);
}
}
public static void visibleViewByAlpha(View view) {
visibleViewByAlpha(view, 400, true, null);
}
/**
* 将给定视图渐渐隐去最后从界面中移除(view.setVisibility(View.GONE))
*
* @param view 被处理的视图
* @param durationMillis 持续时间,毫秒
* @param isBanClick 在执行动画的过程中是否禁止点击
* @param animationListener 动画监听器
*/
public static void goneViewByAlpha(final View view, long durationMillis, final boolean isBanClick, final Animation.AnimationListener animationListener) {
if (view.getVisibility() != View.GONE) {
AlphaAnimation hiddenAlphaAnimation = getHiddenAlphaAnimation(durationMillis);
hiddenAlphaAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
if (isBanClick) {
view.setClickable(false);
}
if (animationListener != null) {
animationListener.onAnimationStart(animation);
}
}
@Override
public void onAnimationRepeat(Animation animation) {
if (animationListener != null) {
animationListener.onAnimationRepeat(animation);
}
}
@Override
public void onAnimationEnd(Animation animation) {
if (isBanClick) {
view.setClickable(true);
}
view.setVisibility(View.GONE);
if (animationListener != null) {
animationListener.onAnimationEnd(animation);
}
}
});
view.startAnimation(hiddenAlphaAnimation);
}
}
public static void goneViewByAlpha(View view) {
goneViewByAlpha(view, 400, true, null);
}
/**
* 将给定视图渐渐隐去最后从界面中移除(view.setVisibility(View.GONE))
*
* @param view 被处理的视图
* @param durationMillis 持续时间,毫秒
* @param isBanClick 在执行动画的过程中是否禁止点击
* @param animationListener 动画监听器
*/
public static void invisibleViewByAlpha(final View view, long durationMillis, final boolean isBanClick, final Animation.AnimationListener animationListener) {
if (view.getVisibility() != View.INVISIBLE) {
AlphaAnimation hiddenAlphaAnimation = getHiddenAlphaAnimation(durationMillis);
hiddenAlphaAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
if (isBanClick) {
view.setClickable(false);
}
if (animationListener != null) {
animationListener.onAnimationStart(animation);
}
}
@Override
public void onAnimationRepeat(Animation animation) {
if (animationListener != null) {
animationListener.onAnimationRepeat(animation);
}
}
@Override
public void onAnimationEnd(Animation animation) {
if (isBanClick) {
view.setClickable(true);
}
view.setVisibility(View.INVISIBLE);
if (animationListener != null) {
animationListener.onAnimationEnd(animation);
}
}
});
view.startAnimation(hiddenAlphaAnimation);
}
}
public static void invisibleViewByAlpha(View view) {
invisibleViewByAlpha(view, 400, true, null);
}
/**
* 获取一个由完全显示变为不可见的透明度渐变动画
*
* @param durationMillis 持续时间
* @return 一个由完全显示变为不可见的透明度渐变动画
*/
public static AlphaAnimation getHiddenAlphaAnimation(long durationMillis) {
return getHiddenAlphaAnimation(durationMillis, null);
}
/**
* 获取一个由完全显示变为不可见的透明度渐变动画
*
* @param durationMillis 持续时间
* @param animationListener 动画监听器
* @return 一个由完全显示变为不可见的透明度渐变动画
*/
public static AlphaAnimation getHiddenAlphaAnimation(long durationMillis, Animation.AnimationListener animationListener) {
return getAlphaAnimation(1.0f, 0.0f, durationMillis, animationListener);
}
/**
* 获取一个透明度渐变动画
*
* @param fromAlpha 开始时的透明度
* @param toAlpha 结束时的透明度都
* @param durationMillis 持续时间
* @param animationListener 动画监听器
* @return 一个透明度渐变动画
*/
public static AlphaAnimation getAlphaAnimation(float fromAlpha, float toAlpha, long durationMillis, Animation.AnimationListener animationListener) {
AlphaAnimation alphaAnimation = new AlphaAnimation(fromAlpha, toAlpha);
alphaAnimation.setDuration(durationMillis);
if (animationListener != null) {
alphaAnimation.setAnimationListener(animationListener);
}
return alphaAnimation;
}
/**
* 获取一个由不可见变为完全显示的透明度渐变动画
*
* @param durationMillis 持续时间
* @return 一个由不可见变为完全显示的透明度渐变动画
*/
public static AlphaAnimation getShowAlphaAnimation(long durationMillis) {
return getAlphaAnimation(0.0f, 1.0f, durationMillis, null);
}
}