简陋

    xiaoxiao2022-06-28  202

    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(); } } }

    最新回复(0)