那就是颜色渲染.
在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等级就简单许多了
//绘制等级
mTxtPaint.setAntiAlias(true);
mTxtPaint.setStrokeWidth(mTxtStrokeWidth);
mTxtPaint.setTextSize(100);
mTxtPaint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD_ITALIC));
int strWidth = (int) mTxtPaint.measureText(mLevel,0,mLevel.length());
int strHeight = 200;
mTxtPaint.setStyle(Paint.Style.FILL);
mTxtPaint.setColor(Color.WHITE);
canvas.drawText(mLevel,mWidth/2 - strWidth/2,mHeight/2 + strHeight/2 + 50,mTxtPaint);
// 绘制进度文案显示
mTxtPaint.setAntiAlias(true);
mTxtPaint.setStrokeWidth(mTxtStrokeWidth);
mTxtPaint.setTypeface(Typeface.DEFAULT);
String text = (int) mProgress + "/" + (int) mMaxProgress;
float textHeight = mHeight / 8;
mTxtPaint.setTextSize(textHeight);
int textWidth = ((int) mTxtPaint.measureText(text, 0, text.length()));
mTxtPaint.setStyle(Paint.Style.FILL);
mTxtPaint.setColor(Color.YELLOW);
canvas.drawText(text, mWidth / 2 - textWidth / 2, mHeight / 2 + textHeight / 2, mTxtPaint);
Android环形渐变色进度条
https://www.cnblogs.com/androidsuperman/p/5021872.html
Android环形进度条颜色渐变效果
https://www.jianshu.com/p/0c7dca38207c
网友评论