android自己定义渐变进度条

Posted llguanli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android自己定义渐变进度条相关的知识,希望对你有一定的参考价值。

项目中须要用到一个弧形渐变的进度条,通过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

以上是关于android自己定义渐变进度条的主要内容,如果未能解决你的问题,请参考以下文章

Android界面设计,下面图的那个圆形进度条怎么设计??

长按如何使进度条变化Android

Android自己定义控件:进度条的四种实现方式

LabVIEW如何设计渐变色的进度条

Android 高手进阶,自己定义圆形进度条

自定义对话框片段内的进度条 - 如何从 AsyncTask 传递进度?