上下回弹动画

来源:互联网 发布:java上最简单的游戏 编辑:程序博客网 时间:2024/05/21 17:59

调用方式:

AnimUtils.kickBackAnim(view,200,2000,1500);

AnimUtils类

/** * AnimUtils */public class AnimUtils {/** * 回弹效果动画 *  * @param delayTime      延迟时间 * @param view     * @param durationTime    动画持续时长 * @param defoutRange  回弹幅度 */public static void kickBackAnim( final View view, int delayTime,int durationTime,int defoutRange ,String propertyName) {    view.setVisibility(View.INVISIBLE);    view.postDelayed(new Runnable() {        @Override        public void run() {            //时长            view.setVisibility(View.VISIBLE);            ValueAnimator fadeAnim = null;            switch (propertyName.toLowerCase()) {                case "x":                    fadeAnim = ObjectAnimator.ofFloat(view, "translationX", defoutRange, 0);                    break;                case "y":                    fadeAnim = ObjectAnimator.ofFloat(view, "translationY", defoutRange, 0);                    break;            }                fadeAnim.setDuration(duration);            KickBackAnimator kickAnimator = new KickBackAnimator();            kickAnimator.setDuration(durationTime);            fadeAnim.setEvaluator(kickAnimator);            fadeAnim.start();            fadeAnim.addListener(new Animator.AnimatorListener() {                @Override                public void onAnimationStart(Animator animation) {                }                @Override                public void onAnimationEnd(Animator animation) {                    view.clearAnimation();                }                @Override                public void onAnimationCancel(Animator animation) {                }                @Override                public void onAnimationRepeat(Animator animation) {                }            });        }    }, delayTime);}}

KickBackAnimator类:

    /** * 上下回弹动画 */public class KickBackAnimator implements TypeEvaluator<Float> {   private final float s = 1.70158f;   float mDuration = 0f;   public void setDuration(float duration) {      mDuration = duration;   }   public Float evaluate(float fraction, Float startValue, Float endValue) {      float t = mDuration * fraction;      float b = startValue.floatValue();      float c = endValue.floatValue() - startValue.floatValue();      float d = mDuration;      float result = calculate(t, b, c, d);      return result;   }   public Float calculate(float t, float b, float c, float d) {      return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;   }}
原创粉丝点击