Android如何实现多段颜色进度条效果

  介绍

小编给大家分享一下安卓如何实现多段颜色进度条效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

具体内容如下

这个进度条其实相对简单。
这里可以把需要绘制的简单分为两个部分

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

最后看看实现的效果图

 Android如何实现多段颜色进度条效果

完整代码

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   null

Android如何实现多段颜色进度条效果