package com.lcodecore.tkrefreshlayout.header.bezierlayout; import android.animation.ValueAnimator; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.util.AttributeSet; import android.view.View; import android.view.animation.AccelerateDecelerateInterpolator; /** * Created by Administrator on 2015/8/27. */ public class RoundProgressView extends View { private Paint mPath; private Paint mPantR; private float r = 40; private int num = 7; private int stratAngle = 270; private int endAngle = 0; private int outCir_value = 15; public void setCir_x(int cir_x) { this.cir_x = cir_x; } private int cir_x; public RoundProgressView(Context context) { this(context, null, 0); } public RoundProgressView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public RoundProgressView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } ValueAnimator va; private void init() { mPath = new Paint(); mPantR = new Paint(); mPantR.setColor(Color.WHITE); mPantR.setAntiAlias(true); mPath.setAntiAlias(true); mPath.setColor(Color.rgb(114, 114, 114)); va = ValueAnimator.ofInt(0, 360); va.setDuration(720); va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { endAngle = (int) animation.getAnimatedValue(); postInvalidate(); } }); va.setRepeatCount(ValueAnimator.INFINITE); va.setInterpolator(new AccelerateDecelerateInterpolator()); } private RectF oval, oval2; @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int w = getMeasuredWidth() / num - 10; mPath.setStyle(Paint.Style.FILL); canvas.drawCircle(getMeasuredWidth() / 2, getMeasuredHeight() / 2, r, mPath); canvas.save(); mPath.setStyle(Paint.Style.STROKE);//设置为空心 mPath.setStrokeWidth(6); canvas.drawCircle(getMeasuredWidth() / 2, getMeasuredHeight() / 2, r + 15, mPath); canvas.restore(); mPantR.setStyle(Paint.Style.FILL); if (oval == null) oval = new RectF(); oval.set(getMeasuredWidth() / 2 - r, getMeasuredHeight() / 2 - r, getMeasuredWidth() / 2 + r, getMeasuredHeight() / 2 + r);// 设置个新的长方形,扫描测量 canvas.drawArc(oval, stratAngle, endAngle, true, mPantR); canvas.save(); mPantR.setStrokeWidth(6); mPantR.setStyle(Paint.Style.STROKE); if (oval2 == null) oval2 = new RectF(); oval2.set(getMeasuredWidth() / 2 - r - outCir_value, getMeasuredHeight() / 2 - r - outCir_value, getMeasuredWidth() / 2 + r + outCir_value, getMeasuredHeight() / 2 + r + outCir_value);// 设置个新的长方形,扫描测量 canvas.drawArc(oval2, stratAngle, endAngle, false, mPantR); canvas.restore(); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); if (va != null) va.cancel(); } public void startAnim() { if (va != null) va.start(); } public void stopAnim() { if (va != null && va.isRunning()) va.cancel(); } }