使用属性动画实现一个简单的加载动画

安卓的动画各种各样,新加的属性动画可以很好的实现动画效果。
如何实现一个简单的加载动画呢?
Frist of all, Because of you are custom view, you need extends the View,and implement there important method,such as onMeasure()、onDraw()、onLayout()..
Then, you need some paints to draw,so that…

public FourCirlceRotate(Context context, AttributeSet attrs) {
        super(context, attrs);
        paint1 = new Paint();
        paint2 = new Paint();
        paint3 = new Paint();
        paint4 = new Paint();
        paint5 = new Paint();
        paint1.setColor(Color.parseColor("#ff0099cc"));
        paint2.setColor(Color.parseColor("#ff669900"));
        paint3.setColor(Color.parseColor("#ffcc0000"));
        paint4.setColor(Color.parseColor("#ffaa66cc"));
        paint5.setColor(Color.parseColor("#ffffbb33"));
    }

and you should get the value animator, just like this!

private ValueAnimator getValueAnimator() {
        ValueAnimator valueAnimator = ValueAnimator.ofFloat(0f, 8f);
        valueAnimator.setDuration(4000);
        valueAnimator.setInterpolator(new LinearInterpolator());
        valueAnimator.start();
        return valueAnimator;
    }

and you should fresh your screen when your application had runing.


    public void startAnimation() {
        if (valueAnimator == null) {
            valueAnimator = getValueAnimator();
        } else {
            valueAnimator.start();
        }
        R = getHeight() / 6;
        postDelayed(new Runnable() {
            @Override
            public void run() {
                if (!stop) {
                    startAnimation();
                    invalidate();
                }
            }
        }, valueAnimator.getDuration());
        init = true;
    }

then,The best part of it is you need set some coding on onDraw() method to make it happen.

 @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
//        Log.i(TAG, "onDraw " + where);
        if (!init) {
            startAnimation();

        }
        Log.e(">>>>>>>>>>>>>>>>>","show:"+show+"where:"+where);
        //显示固定的圆,逐个出现
        if (show <= 4) {
            canvas.drawCircle(R, R, R, paint2);
        }
        if (show <= 3) {
            canvas.drawCircle(getWidth() - R, R, R, paint3);
        }
        if (show <= 2) {
            canvas.drawCircle(getWidth() - R, getHeight() - R, R, paint4);
        }
        if (show <= 1) {
            canvas.drawCircle(R, getHeight() - R, R, paint5);
        }
        //逐个消失
        if (show > 4) {
            if (show <= 4) {
                canvas.drawCircle(R, R, R, paint2);
            }
            if (show <= 5) {
                canvas.drawCircle(getWidth() - R, R, R, paint3);
            }
            if (show <= 6) {
                canvas.drawCircle(getWidth() - R, getHeight() - R, R, paint4);
            }
            if (show <= 7) {
                canvas.drawCircle(R, getHeight() - R, R, paint5);
            }
        }
        //移动
        if (where < 1 && where > 0) {
            canvas.drawCircle(R + (getWidth() - 2 * R) * where, R, R, paint1);
            show = 4;
        }
        if (where < 2 && where > 1) {
            canvas.drawCircle(getHeight() - R, R + (getHeight() - 2 * R) * (where - 1), R, paint1);
            show = 3;
        }
        if (where < 3 && where > 2) {
            canvas.drawCircle(getWidth() - R - (getWidth() - 2 * R) * (where - 2), getHeight() - R, R, paint1);
            show = 2;
        }
        if (where < 4 && where > 3) {
            canvas.drawCircle(R, getHeight() - R - (getHeight() - 2 * R) * (where - 3), R, paint1);
            show = 1;
        }
        if (where > 4 && where < 5) {
            canvas.drawCircle(R + (getWidth() - 2 * R) * (where - 4), R, R, paint1);
            show = 5;
        }
        if (where > 5 && where < 6) {
            canvas.drawCircle(getHeight() - R, R + (getHeight() - 2 * R) * (where - 5), R, paint1);
            show = 6;
        }
        if (where > 6 && where < 7) {
            canvas.drawCircle(getWidth() - R - (getWidth() - 2 * R) * (where - 6), getHeight() - R, R, paint1);
            show = 7;
        }
        if (where > 7 && where < 8) {
            canvas.drawCircle(R, getHeight() - R - (getHeight() - 2 * R) * (where - 7), R, paint1);
            show = 8;
        }


        if (isStart) {
            where = (float) valueAnimator.getAnimatedValue();
        }
        if (valueAnimator.isRunning()) {
            isStart = true;
          invalidate();
        }


    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值