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