package com.teemmo.networkupdate.view; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.View; import androidx.annotation.Nullable; public class ProgressView extends View { private int[] colors = {Color.MAGENTA, Color.GREEN, Color.BLUE, Color.YELLOW, Color.RED}; private Paint[] paints; private int currProgress; private int maxProgress = 100; private int progressCount = 1; private int currIndex; private int progreses[]; public ProgressView(Context context) { this(context, null); } public ProgressView(Context context, @Nullable AttributeSet attrs) { this(context, attrs, 0); } public ProgressView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); paints = new Paint[colors.length]; progreses = new int[colors.length]; for (int i = 0; i < colors.length; i++) { paints[i] = new Paint(); paints[i].setColor(colors[i]); paints[i].setStyle(Paint.Style.FILL); paints[i].setAntiAlias(true); paints[i].setStrokeWidth(5); } } public void setProgress(int index, int progress) { this.currProgress = progress; this.currIndex = index; progreses[index] = currProgress; postInvalidate(); } public void setProgress(int progress) { this.currProgress = progress; postInvalidate(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); for (int i = 0; i < paints.length; i++) { if(currIndex==i) { paints[currIndex].setAlpha((int) (200 * (progressCount - currIndex) / ((float) progressCount))); canvas.drawRoundRect(0, 0, getWidth() * (float) currProgress / ((float) maxProgress), getHeight(), 10, 10, paints[currIndex]); }else { canvas.save(); paints[i].setAlpha((int) (200 * (progressCount - i) / ((float) progressCount))); canvas.drawRoundRect(0, 0, getWidth() * (float) progreses[i] / ((float) maxProgress), getHeight(), 10, 10, paints[i]); canvas.restore(); } } } public void setMax(int progressMax) { this.maxProgress = progressMax; } public void setProgressCount(int count) { progressCount = count; } }
简单的多线程下载进度条
最新推荐文章于 2020-12-17 15:07:06 发布