项目中须要用到一个弧形渐变的进度条,通过android自带是不能实现的。我是没有找到实现的方法,有大神知道的能够指点。效果图是以下这种
这是通过继承VIew来绘制出来的,网上也有相似的,可是代码那是相当的累赘,并且创建了非常多没用的对象,给内存管理带来负担
我在这把自己定义的View代码贴出来了,用到的话能够加以參考
public class SpringProgressView extends View {
/**
* 分段颜色
*/
private static final int[] SECTION_COLORS = {Color.RED, Color.parseColor("#ffa000"), Color.YELLOW};
/**
* 进度条最大值
*/
private float maxCount;
/**
* 进度条当前值
*/
private float currentCount;
/**
* 画笔
*/
private Paint mPaint;
private int mWidth, mHeight;
private RectF rectBg = new RectF();
private RectF rectProgressBg = new RectF();
private LinearGradient shader;
public SpringProgressView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView(context);
}
public SpringProgressView(Context context, AttributeSet attrs) {
super(context, attrs);
initView(context);
}
public SpringProgressView(Context context) {
super(context);
initView(context);
}
private void initView(Context context) {
mPaint = new Paint();
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
mHeight = bottom - top;
mWidth = right - left;
rectBg.set(0, 0,mWidth, mHeight);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
float section = currentCount / maxCount;
if (shader == null) {
shader = new LinearGradient(0, 0, mWidth, mHeight, SECTION_COLORS, null, Shader.TileMode.CLAMP);
}
mPaint.setShader(shader);
mPaint.setAntiAlias(true);
mPaint.setStyle(Paint.Style.STROKE);
//绘制进度条外側边框
int round = mHeight*2/3;
canvas.drawRoundRect(rectBg, round, round, mPaint);
//绘制进度条
mPaint.setStyle(Paint.Style.FILL);
int pl=(int)(mWidth*(1-section));
rectProgressBg.set(pl, 0, mWidth, mHeight);
canvas.drawRoundRect(rectProgressBg, round, round, mPaint);
}
/*
* 设置最大的进度值
*/
public void setMaxCount(float maxCount) {
this.maxCount = maxCount;
}
/**
* 设置当前的进度值
*/
public void setCurrentCount(float currentCount) {
this.currentCount = currentCount > maxCount ?
maxCount : currentCount; invalidate(); } public float getMaxCount() { return maxCount; } public float getCurrentCount() { return currentCount; } }
以上就是自己定义的view部分,直接在布局文件里引用就能够了。在Activity中设置该进度条的最大值和和当前进度值,就能够完美实现了
我也把代码地址粘下来,能够下载http://download.csdn.net/detail/u013122144/9495668