public class Blue extends View {
private Paint mPaint;
private int colorBlue = Color.parseColor("#000000");
private int[] colors = {Color.TRANSPARENT,colorBlue};
private PathMeasure pathMeasure;
private float pathLenght;
private float animatorValue;
private static final int ANIMATOR_TIME = 1000;
//对勾的动画
private ValueAnimator animator;
private Path tP;
public Blue(Context context) {
super(context);
initClass();
}
public Blue(Context context, AttributeSet attrs) {
super(context, attrs);
initClass();
}
public Blue(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initClass();
}
private void initClass(){
tP = new Path();
pathMeasure = new PathMeasure();
}
@SuppressLint("Range")
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mPaint = new Paint();
mPaint.setAntiAlias(false);
Shader shader = new RadialGradient(getWidth()/2,getHeight()/2,120,colors,null,Shader.TileMode.REPEAT);
mPaint.setShader(shader);
canvas.drawCircle(getWidth()/2,getHeight()/2,120,mPaint);
mPaint.reset();
mPaint.setColor(Color.BLACK);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(5);
tP.reset();
tP.lineTo(0,0);
float stop = animatorValue * pathLenght;
pathMeasure.getSegment(0,stop,tP,true);
canvas.drawPath(tP,mPaint);
}
public void starAnimator(){
tAnimator();
initTPath();
animator.start();
}
private void initTPath(){
float[] l = new float[6];
l[0] = getWidth()/2-120/2;
l[1] = getHeight()/2;
l[2] = getWidth()/2;
l[3] = getHeight()/2+120/2;
l[4] = getWidth()/2+120*3/5;
l[5] = getHeight()/2-120/3;
tP.moveTo(l[0],l[1]);
tP.lineTo(l[2],l[3]);
tP.lineTo(l[4],l[5]);
pathMeasure.setPath(tP,false);
pathLenght = pathMeasure.getLength();
}
private void tAnimator(){
animator = ValueAnimator.ofFloat(0,1);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
animatorValue = (float) animation.getAnimatedValue();
invalidate();
}
});
animator.setDuration(ANIMATOR_TIME);
animator.setInterpolator(new AccelerateDecelerateInterpolator());
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
boolean isDrawTick = (animator != null && animator.isRunning());
if (isDrawTick){
animator.cancel();
}
}
}