package com.example.a03_customview.view; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.RectF; import android.os.Handler; import android.os.Message; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.view.View; /** * Created by yujie on 2017/11/30. */ public class ProgressView extends View{ private int progress = 0; private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if(msg.what == 0){ progress++; if(progress < 100){ handler.sendEmptyMessageDelayed(0, 30); }else{ handler.removeCallbacksAndMessages(null); progress = 0; } postInvalidate(); } } }; public ProgressView(Context context) { super(context); } public ProgressView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public ProgressView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint paint = new Paint(); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(2); paint.setAntiAlias(true); canvas.drawCircle(getMeasuredWidth()/2, getMeasuredHeight()/2, getMeasuredWidth()/2, paint); String text = progress+"%"; paint.setTextSize(40); Rect rect = new Rect(); paint.getTextBounds(text, 0, text.length(), rect); canvas.drawText(text, getMeasuredWidth()/2-rect.width()/2, getMeasuredHeight()/2+rect.height()/2, paint); paint.setColor(Color.GREEN); paint.setStrokeWidth(5); RectF rectF = new RectF(0, 0, getMeasuredWidth(), getMeasuredHeight()); canvas.drawArc(rectF, -90, 360*progress/100, false, paint); } public void start(){ handler.sendEmptyMessageDelayed(0, 30); } }
自定义View模拟下载/加载动态progress
最新推荐文章于 2021-05-25 17:54:35 发布