项目中须要用到一个弧形渐变的进度条,通过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自己定义渐变进度条的更多相关文章

  1. 自定义控件之圆形颜色渐变进度条--SweepGradient

    前几天在群里面有人找圆形可颜色渐变进度条,其中主要的知识点是SweepGradient: mSweepGradient = new SweepGradient(240, 360, new int[] ...

  2. Android学习笔记- ProgressBar(进度条)

    本节引言: 本节给大家带来的是Android基本UI控件中的ProgressBar(进度条),ProgressBar的应用场景很多,比如 用户登录时,后台在发请求,以及等待服务器返回信息,这个时候会用 ...

  3. android 对话框中的进度条 (ProgressDialog)

    from:http://byandby.iteye.com/blog/817214 显然要定义对话框进度条就要用ProgressDialog,首先我们需要创建ProgressDialog对象,当然这里 ...

  4. iOS圆弧渐变进度条的实现

    由于项目需要一个环形渐变进度条显示课程,这方便网上的确有很多相关资料但是,都是比较零散的而且,大多数只是放一堆代码就算完了.这里我想详细写一篇我自己实现这个进度条的过程. 实现一个圆弧进度条主要分为三 ...

  5. 【iOS】环形渐变进度条实现

    之前有人在找渐变进度条的效果,闲来无事就顺手写了一个,然后画了视图层级,方便讲解. 环境信息: Mac OS X 10.10.3 Xcode 6.3.1 iOS 8.3 效果图: 源码下载地址: ht ...

  6. Android 使用ProgressBar实现进度条

    ProgressBar简介ProgressBar是进度条组件,通常用于向用户展示某个耗时操作完成的进度,而不让用户感觉是程序失去了响应,从而更好地提升用户界面的友好型. 课程目标(1)制定Progre ...

  7. Android学习笔记(24):进度条组件ProgressBar及其子类

    ProgressBar作为进度条组件使用,它还派生了SeekBar(拖动条)和RatingBar(星级评分条). ProgressBar支持的XML属性: Attribute Name Related ...

  8. android中SeekBar拖动进度条的使用及事件监听

    下面和大家分享一下android中SeekBar拖动进度条的使用,以及事件监听.拖动进度条的事件监听需要实现SeekBar.OnSeekBarChangeListener接口,调用SeekBar的se ...

  9. Android开发 PorgressBar(进度条)的使用

    圆环进度条(默认)和水平进度条: <?xml version="1.0" encoding="utf-8"?> <LinearLayout x ...

随机推荐

  1. eclipse中纯java配置log4j日志

    1.新建java项目log4Test 2.新建目录lib,把log4j-1.2.9.jar包放入lib目录 3.右键工程,选择Properties->Java Build Path->Li ...

  2. SHUoj 字符串进制转换

    字符串进制转换 发布时间: 2017年7月9日 18:17   最后更新: 2017年7月9日 21:17   时间限制: 1000ms   内存限制: 128M 描述 Claire Redfield ...

  3. ADO:DataSet存入缓存Cache中并使用

    原文发布时间为:2008-08-01 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...

  4. 【leetcode】Find All Anagrams in a String

    [leetcode]438. Find All Anagrams in a String Given a string s and a non-empty string p, find all the ...

  5. jq ajax之beforesend(XHR)

    用于在向服务器发送请求前添加一些处理函数.例如:搜寻附近店铺,未搜寻出来的时候显示:正在搜寻中... 常见的一种效果,在用ajax请求时,没有返回前会出现前出现一个转动的loading小图标或者“内容 ...

  6. LeetCode OJ-- Sqrt(x) *

    https://oj.leetcode.com/problems/sqrtx/ 求一个数的开方,二分查找一个数,直到这个数的平方 - target 小于 0.001. 但这道题出的不好,返回值竟然是 ...

  7. LeetCode OJ——Minimum Depth of Binary Tree

    http://oj.leetcode.com/problems/minimum-depth-of-binary-tree/ 贡献了一次runtime error,因为如果输入为{}即空的时候,出现了c ...

  8. 安装sass的艰难过程

    1.ruby安装 因为sass依赖于ruby环境,所以装sass之前先确认装了ruby.先导官网下载个ruby 在安装的时候,请勾选Add Ruby executables to your PATH这 ...

  9. AC日记——[SDOI2015]星际战争 洛谷 P3324

    题目描述 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战. 在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装甲值为Ai.当一个巨型机器人的装甲值 ...

  10. vsCode 开发微信小程序插件

    用 vsCode 开发微信小程序可以配置以下插件,让开发更美好: 1. vscode weapp api 2. vscode wxml 3. vscode-wechat 4. Easy WXLESS ...