Android自定义圆形渐变进度条

来源:互联网 发布:2017淘宝发货时间规定 编辑:程序博客网 时间:2024/05/18 03:23

作为一个自学入门android的人来说,刚接触自定义view时完全处于懵逼状态,不过还好,大神们已经铺好了路,尔等只需稍加钻研即可小有成就的,废话不多说了,先上效果图!

这里写图片描述

理清下此view的思路:

1.此view由圆和文字组成 


a)背景圆的颜色是白色 
b)进度条值所在的圆的颜色是渐变的 
c)进度值 
d)等级

这里写图片描述

2.因为等级是服务器直接返回的V等级,所以此处直接显示即可

首先,我们来画个背景的白色圆

这里写图片描述

圆画好之后,就该显示进度条了,进度条传入了两个值,分别是当前进度mProgress和最大进度mMaxProgress,我们就可以根据这两个值给drawArc方法设置要旋转的角度(sweepAngle
public void drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)

        

这里写图片描述

这样就完成了进度条的显示工作,但项目的实际需求是颜色渐变,就在这里犯了难,刚开始的想法是根据进度旋转的角度,让rgb的颜色值在一个范围内变动,效果确实可以实现,但是却发现了另外一个简单方法,那就是颜色渲染. 
在Android中,提供了Shader类专门用来渲染图像以及一些几何图形。 
Shader类包括了5个直接子类,分别为:

BitmapShader 
ComposeShader 
LinearGradient 
RadialGradient 
SweepGradient

其中,BitmapShader用于图像渲染;ComposeShader用于混合渲染;LinearGradient用于线性渲染;RadialGradient用于环形渲染;而SweepGradient则用于梯度渲染。这里使用的是LinearGradient,线性渲染.

LinearGradient的作用是实现某一区域内颜色的线性渐变效果。 
LinearGradient的函数原型为:

public LinearGradient (float x0, float y0, float x1, float y1, int[] colors, float[] positions, Shader.TileMode tile);

  其中,参数x0表示渐变的起始点x坐标;参数y0表示渐变的起始点y坐标;参数x1表示渐变的终点x坐标;参数y1表示渐变的终点y坐标;参数colors表示渐变的颜色数组;参数positions用来指定颜色数组的相对位置;参数tile表示平铺方式。 
  通常,参数positions设为null,表示颜色数组以斜坡线的形式均匀分布。 
  OK,所以现在需要给圆的画笔设置Shader 
  

LinearGradient gradient = new LinearGradient(mWidth /2,0, mWidth /2, mHeight,RATE_COLORS,null, Shader.TileMode.MIRROR);mPaint.setShader(gradient);mPaint.setMaskFilter(new BlurMaskFilter(15, BlurMaskFilter.Blur.SOLID));//设置发光

这里写图片描述

这基本就完成了,至于省下的进度值和V等级就简单许多了

       

最后的效果图 

这里写图片描述

在使用控件的地方直接传入三个值即可,当前进度,最大进度,当前等级,最后附上源码

点击下载

0 0
原创粉丝点击