自定义控件之动画

98 阅读1分钟
自定义控件自然离不开动画,参考: 
[Android自定义控件三部曲文章](https://blog.csdn.net/harvic880925/article/details/50995268)

1.View Animation:

android.view.animation中的Tween Animation(补间动画)和Frame Animation(逐帧动画);

2.Property Animator:

android.animation中的ValueAnimator和ObjectAnimation;ObjectAnimator extends ValueAnimator

ObjectAnimator animator = ObjectAnimator.ofFloat(tv,"alpha",1,0,1);
animator.setDuration(2000);
animator.start();

3.重点:自定义Interpolator,自定义Evaluater

参考: 自定义控件三部曲之动画篇(五)——ValueAnimator高级进阶(一)

自定义控件三部曲之动画篇(六)——ValueAnimator高级进阶(二)

ValueAnimator animator = ValueAnimator.ofInt(0,600);

animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        int curValue = (int)animation.getAnimatedValue();
        tv.layout(tv.getLeft(),curValue,tv.getRight(),curValue+tv.getHeight());
    }
});
animator.setDuration(1000);
animator.setEvaluator(new IntEvaluator());
animator.setInterpolator(new BounceInterpolator());
animator.start();

ValueAnimator animator = ValueAnimator.ofObject(new PointEvaluator(),new Point(20),new Point(200));
        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                mCurPoint = (Point)animation.getAnimatedValue();
                invalidate();
            }
        });
        animator.setDuration(1000);
        animator.setInterpolator(new BounceInterpolator());
        animator.start();

public class PointEvaluator implements TypeEvaluator<Point> {
    @Override
    public Point evaluate(float fraction, Point startValue, Point endValue) {
        int start = startValue.getRadius();
        int end  = endValue.getRadius();
        int curValue = (int)(start + fraction * (end - start));
        return new Point(curValue);
    }
}