介绍
小编给大家分享一下安卓如何实现多段颜色进度条效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
具体内容如下
这个进度条其实相对简单。
这里可以把需要绘制的简单分为两个部分
1。灰色背景部分
2。多段颜色的进度部分
考虑到实际绘制中,分段部分不太容易根据进度值进行动态绘制。
故把多段颜色部分作为背景进行绘制,实际的灰色部分根据进度值变化,达到多段颜色部分进度变化的效果。
<>强实现步骤
强>
1。自定义观点来绘制进度条
2。定义背景及进度条绘制所需的画笔
private Paint backgroundPaint,, progressPaint,, linePaint;//背景和进度条画笔
3。定义不同颜色区域的矩阵数组(这里将进度分为多个色块)
4。定义颜色数组,以及所占比例的数组。后面根据比例和颜色进行绘制
private Rect progressRect =, new 矩形();//进度条; private Rect  backgroundRects[];//背景矩形区域 private float 权重[];//每个区域的权重 private int 颜色[];//颜色
5。定义进度值,监听等杂项。
private float progress =, 10日,maxProgress =, 100;//进度和最大进度 private OnProgressChangeListener 侦听器;
6。在画方法中进行绘制
7。背景色块的绘制
,//绘制背景颜色块 int x =, 0,, y =,获得(); int progressX =, (int), getWidthForWeight(进步,maxProgress); for (int 小姐:=,0;,小姐:& lt;, colors.length;,我+ +),{ ,,Rect Rect =, backgroundRects[我]; ,,backgroundPaint.setColor(颜色[我]); ,,int width =, (int), (getWidthForWeight(权重(我),totalWeight)); ,,rect.set (x,, 0,, x +,宽度,,y); ,,x +=,宽度;//计算下一个的开始位置 ,,canvas.drawRect(矩形,backgroundPaint);//绘制矩形 以前,}>8。进度条及分割线的绘制
progressRect.set (0, 0, progressX,,获得());//设置进度条区域 canvas.drawRect (progressRect, progressPaint);//绘制进度条 for (int 小姐:=,0,,lineX =, 0;,小姐:& lt;, colors.length;,我+ +),{ ,,int width =, (int), (getWidthForWeight(权重(我),totalWeight)); ,,//绘制矩形块之间的分割线 ,,lineX =, lineX +,宽度; ,,if (lineX & lt;, progressX),{//给已经走过了的区域画上竖线 ,,,,,canvas.drawLine (lineX, 0, lineX,,获得(),,linePaint); ,,,} }最后看看实现的效果图
完整代码
package com.wq.widget; import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.util.AttributeSet; import android.util.Log; import android.view.View; import android.view.animation.LinearInterpolator;/* * ,*多段颜色的进度条 ,* Created by  WQ 提醒2017/7/11。 ,*/public class  MultistageProgress extends View  { private 才能Paint backgroundPaint, progressPaint,, linePaint;//背景和进度条画笔 private 才能Rect progressRect =, new 矩形();//进度条; private 才能;Rect  backgroundRects[];//背景矩形区域 private 才能;float 权重[];//每个区域的权重 private 才能;int 颜色[];//颜色 private 才能;float  totalWeight;//总的权重 public 才能static final  int DEF_COLORS[];//默认背景颜色数组 public 才能static final  float DEF_WEIGHTS[];//每段对应的权重 private 才能float progress =, 10日,maxProgress =, 100;//进度和最大进度 private 才能;OnProgressChangeListener 侦听器; static {才能 ,,,DEF_COLORS =, new int [] { ,,,,,,,Color.parseColor (“# 00 b6d0"), ,,,,,,,Color.parseColor (“# 0198 ae"), ,,,,,,,Color.parseColor (“# 008396“), ,,,,,,,Color.parseColor (“# 007196“), ,,,,,,,Color.parseColor (“# 005672“) ,,,}; ,,,DEF_WEIGHTS =, new 浮动[]{ ,,,,,,,,138,35岁,230年,230年,57 ,,,}; ,,} public 才能;float  getProgress (), { ,,,return 进展; ,,} public 才能;void  setProgress (float 进步),{ ,,,this.progress =,进步; ,,,invalidate (); ,,,onProgressChange (); null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null nullAndroid如何实现多段颜色进度条效果