无聊中自己写的一个带数字的ProgressBar

最近在学值动画的时候,一直感觉学得差不多了,但自己感觉又下不了手,所以自己就从最简单的做起,写了个带数字的ProgressBar。

simple.gif

从图上面看,其实就几个部分组成的:最外层是一个圆,还有带进度的圆弧,中间带数字的进度。

思路解析:

这里的进度条按照两类来走,第一类是按照图上第一个进度条来显示的,圆弧的颜色是一成不变的,而且颜色的比例也是按照进度来绘制的。第二类是按照图上第二个进度条来显示的,圆弧的颜色是通过一个颜色集合来不断地变动的,而且这个弧度的差值永远是90度,不断改变弧度的起点和终点,所以看到的效果就是弧度一直在圈上跑步一样。中间的数字就是由颜色的值动画和缩放动画组成的,所以图一和图二看到的数字一直有颜色的改变和缩放的效果,是不是经过这么一说,更一目了然了呢。

使用:

<declare-styleable name="CircleProgressBarView">  
    <!--当前的进度-->
    <attr name="number_progress" format="integer" />   
    <!--外环的宽度-->
    <attr name="border_width" format="dimension" />
    <!--未达到进度的外环颜色-->
    <attr name="unreached_color" format="color" />  
    <!--达到进度的外环颜色-->
    <attr name="reached_color" format="color" />  
    <!--中间数字的颜色-->
    <attr name="number_corlor" format="color" />  
    <!--中间数字的大小-->
    <attr name="number_size" format="dimension" />  
    <!--如果这里是true的话,外环就用颜色数组来绘制了-->  
    <attr name="isColorful" format="boolean" />
</declare-styleable>

属性也就定义了那么多,如果你觉得还有需要添加那些属性或是有些改动可以直接回复我。可以在xml文件中定义这些属性的值,你也可以通过代码来设置这些属性:

/** 
*  给中间的数字进度设置颜色
* @param numberColor 
*/
public void setNumberColor(int numberColor) {  
   this.numberColor = numberColor;    
   numPaint.setColor(this.numberColor);  
   invalidate();
}
/**
 * 给中间的数字进度设置大小,这里还比较了先前设置的文字大小做了对比,如果大于之前设置的文本两倍,直接抛出异常,为了之前的控件测量有效
* @param numberColor 
*/
public void setCuNumScale(float numberSize) {  
   if (numberSize > 2 * this.numberSize) {       
       throw new RuntimeException("you do not set the number textSize twice as big as your before your setting");  
   }  
   this.numberSize = numberSize;    
   numPaint.setTextSize(this.numberSize);   
   invalidate();
}
public void setReachedColor(int reachedColor) {  
   this.reachedColor = reachedColor;    
   reachedPaint.setColor(this.reachedColor);  
   invalidate();
}

public void setProgress(int progress) {  
   if (this.progress != progress) {       
       this.progress = progress;     
       //这里每次进来的时候让那个中间数字进行放大一下        
       startNumAnimation();   
       if (listener != null) {      
           listener.onChange(this.progress);  
       }   
   }
}

public void setBorderWidth(float borderWidth) {   
   this.borderWidth = borderWidth;    
   unReachedPaint.setStrokeWidth(this.borderWidth);    
   reachedPaint.setStrokeWidth(this.borderWidth); 
   invalidate();
}

public void setUnReachedColor(int unReachedColor) {    
   this.unReachedColor = unReachedColor;    
   unReachedPaint.setColor(this.unReachedColor);  
   invalidate();
}

public void setNumberSize(float numberSize) {  
   this.numberSize = numberSize;    
   numPaint.setTextSize(this.numberSize);  
   invalidate();
}

public void setIsColorFul(boolean isColorFul) {  
   this.isColorFul = isColorFul;    
   invalidate();
}

后面的几个方法就不做介绍了,通过看属性的定义也能知道是啥意思了。

关于我:

email:a1002326270@163.com
github:enter

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,016评论 4 62
  • 他像往常那样早早回来,从不参加社交活动的他,住的也是一层一户的商品房,清静。 他住在14楼,电梯却在中途停了,他瞄...
    捍道阅读 214评论 0 1
  • 许诺了又做不到 只是让你空欢喜一场
    爱飞天的猫阅读 106评论 0 0