• 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

  • 相关阅读:
    修改服务器时间及时区
    风情万种awk
    追忆似水流年sed
    lvm笔记
    正则不怎么会用
    在CentOS7.5的虚拟环境下新建你的django项目
    Django学习过程中的排错总结
    我一直记不住的vim用法
    关于自建yum源拾遗
    Djangp2.x版本报错找不到模版目录下的文件
  • 原文地址:https://www.cnblogs.com/llguanli/p/8602477.html
Copyright © 2020-2023  润新知