Android自定义文本的进度条

工作中要求实现如下图中进度条(进度条上面是带比例数的文本,进度条颜色与比例数对应),写下自己的实现过程。

整体思路:Android中ProgressBar控件不支持自定义文本,所以需要写自定义progressBar。

1、progressBar上要自定义文本,需要重写onDraw()方法;

2、为实现进度是红色,底色是灰色效果,需要自定义progressBar样式

代码实现:

1、自定义的ProgressBar实现代码:

 1 package com.example.myprogressbar;
 2
 3 import android.content.Context;
 4 import android.graphics.Canvas;
 5 import android.graphics.Color;
 6 import android.graphics.Paint;
 7 import android.graphics.Rect;
 8 import android.text.TextUtils;
 9 import android.util.AttributeSet;
10 import android.util.Log;
11 import android.widget.ProgressBar;
12
13 public class MyProgress extends ProgressBar {
14
15     private Paint mPaint;
16     private String text;
17     public MyProgress(Context context) {
18         super(context);
19     }
20
21     public MyProgress(Context context, AttributeSet attrs, int defStyle) {
22         super(context, attrs, defStyle);
23     }
24
25     public MyProgress(Context context, AttributeSet attrs) {
26         super(context, attrs);
27     }
28     //加载完布局文件,对自定义的MyProgressBar进行初始化
29     @Override
30     protected void onFinishInflate() {
31         super.onFinishInflate();
32         init();
33     }
34     //初始化画笔
35     private void init() {
36         this.mPaint = new Paint();
37         this.mPaint.setColor(Color.BLACK);//画笔的颜色
38         this.mPaint.setTextSize(20);//画笔字体大小
39     }
40     //暴露方法,用来指定进度条上的自定义文本
41     public void setText(String text)
42     {
43         if(TextUtils.isEmpty(text))
44         {
45             text = "";
46         }
47         this.text = text;
48         invalidate();//指定文本后需要调用onDraw重绘进度条
49     }
50     @Override
51     protected synchronized void onDraw(Canvas canvas) {
52         super.onDraw(canvas);
53         Rect rect = new Rect();
54         if(mPaint != null && this.text != null)
55         {
56             this.mPaint.getTextBounds(this.text, 0, this.text.length(), rect);
57             int y = (getHeight() /2) - rect.centerY();
58             canvas.drawText(this.text, 5, y, this.mPaint);//在进度条上画上自定义文本
59         }else
60         {
61             Log.i("luqh","mPaint or text is null");
62         }
63     }
64     @Override
65     public synchronized void setProgress(int progress) {
66         super.setProgress(progress);
67     }
68 }

MyProgress.java

2、布局文件activity_main.xml

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     tools:context="com.example.myprogressbar.MainActivity"
 6     android:background="#000000">
 7
 8     <com.example.myprogressbar.MyProgress
 9         android:id="@+id/progress"
10         style="@android:style/Widget.ProgressBar.Horizontal"
11         android:layout_width="400dp"
12         android:layout_height="40dp"
13         android:layout_centerInParent="true"
14         android:progressDrawable="@drawable/myprocess_bar_style"
15         android:max="100" >
16     </com.example.myprogressbar.MyProgress>
17 </RelativeLayout>

activity_main.xml

3、上述布局文件@drawable/myprocess_bar_style中自定义了进度条样式。

在drawable文件下新建myprocess_bar_style.xml文件,内容如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
 3     <item android:id="@android:id/background"><!-- 为进度条背景设置样式 -->
 4         <shape>
 5             <corners android:radius="8dp" /><!-- 进度条圆角程度 -->
 6             <!-- 进度条开始颜色、结束颜色。如果两个值设置不一样将出现渐变效果 ,下同-->
 7             <gradient
 8                 android:endColor="#ffffff"
 9                 android:startColor="#ffffff" >
10             </gradient>
11         </shape>
12     </item>
13     <item android:id="@android:id/progress"><!-- 为进度条  进度条部分 设置样式 -->
14         <clip>
15             <shape>
16                 <corners android:radius="8dp" />
17                 <gradient
18                     android:endColor="#FF0000"
19                     android:startColor="#FF0000" >
20                 </gradient>
21             </shape>
22         </clip>
23     </item>
24
25 </layer-list>

myprocess_bar_style.xml

4、至此,自定义ProgressBar完成。在应用中使用方法如下:

 1 public class MainActivity extends Activity {
 2
 3     private MyProgress progress;
 4     @Override
 5     protected void onCreate(Bundle savedInstanceState) {
 6         super.onCreate(savedInstanceState);
 7         setContentView(R.layout.activity_main);
 8         progress = (MyProgress) findViewById(R.id.progress);
 9         //设置自定义的文本
10         progress.setText("一共50笔收益,成功的占比例20%");
11         //为保证进度与上述自定义文本中的20%一致,还需要设置增加如下代码
12         progress.setProgress(20);
13     }
14 }

MainActivity.java

5、运行效果:

点击下载源码 

时间: 2024-11-08 19:06:16

Android自定义文本的进度条的相关文章

Android 自定义对话框,进度条,下拉刷新等

这个demo集合了自定义对话框,进度条,下拉刷新以及popup弹出框等.是学习了网上开源项目后,抽取集合了常用对话框,进度条,下拉刷新以及popup弹出框等.现在结构目录简单,更易于学习和扩展使用.注释都卸载代码.下面进行简单的介绍以及部分代码展示. 本文demo下载:点击 1.整体实现的效果图 2.项目结构图 这上面项目结构图也是一目了然,有什么功能展示.大家也看到了,这上面类有点多,如果全部贴出来,不大可能,有兴趣下载本文源码. 3.看看基础类BaseActivity 我就贴一下基础类,还有

Android自定义圆角矩形进度条2

效果图: 或 方法讲解: (1)invalidate()方法 invalidate()是用来刷新View的,必须是在UI线程中进行工作.比如在修改某个view的显示时, 调用invalidate()才能看到重新绘制的界面.invalidate()的调用是把之前的旧的view从主UI线程队列中pop掉.一般在自定义控件中会用到这个方法. (2)RectF方法的应用 RectF是用来绘画矩形的方法. RectF(left,top,right,bottom),四个参数的含义分别是父控件距离矩形左上右下

Android 自定义View——动态进度条

效果图: 这个是看了梁肖的demo,根据他的思路自己写了一个,但是我写的这个貌似计算还是有些问题,从上面的图就可以看出来,左侧.顶部.右侧的线会有被截掉的部分,有懂得希望能给说一下,改进一下,这个过程还是有点曲折的,不过还是觉得收获挺多的.比如通动画来进行动态的展示(之前做的都是通过Handler进行更新的所以现在换一种思路觉得特别好),还有圆弧的起止角度,矩形区域的计算等!关于绘制我们可以循序渐进,比如最开始先画圆,然后再画周围的线,最后设置动画部分就可以了.不多说了,上代码了. 代码 自定义

Android自定义View——圆形进度条式按钮

介绍 今天上班的时候有个哥们问我怎么去实现一个按钮式的进度条,先来看看他需要实现的效果图. 和普通的圆形进度条类似,只是中间的地方有两个状态表示,未开始,暂停状态.而且他说圆形进度的功能已经实现了.那么我们只需要对中间的两个状态做处理就行了. 先来看看实现的效果图: 上面说了我们只需要处理中间状态的变化就可以了,对于进度的处理直接使用了弘洋文章中实现: http://blog.csdn.net/lmj623565791/article/details/43371299 下面开始具体实现. 具体实

android自定义渐变圆环进度条

先看下效果: 分析:比较常见于扫描结果.进度条等场景 利用canvas.drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)绘制圆弧 Paint的一些属性定义粗细.颜色.样式等 LinearGradient实现颜色的线型渐变 同样的道理,可以画出长条进度条,扇图饼图等,感兴趣可以试下.. package com.liujing.progressviewdemo; /*** *

Android简易实战教程--第十七话《自定义彩色环形进度条》

转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/52203533   点击打开链接 在Android初级教程里面,介绍了shape用法的理论知识,再来完成这个小案例将会变得非常简单哦.(欢迎学习阅读):http://blog.csdn.net/qq_32059827/article/details/52203347 点击打开链接 这一篇就针对这个知识点,完成一个自定义的彩色进度条.系统自带的环形进度条是黑白相间的,如果你不是色盲,

Andorid自定义圆形渐变色进度条的从实现到开源

信自己也是一种信仰. 写在前面的话 3月初我在自定义控件概述中挖下的几个坑,前一段时间已经基本填完了,自定义控件的几种实现方式也分别写了demo来进行说明.今天我们来聊一聊如何把自己封装一个圆形渐变色进度条控件开源到github,并且上传到jcenter方便别人远程依赖.先看下效果图: 连接github并提交新项目 前提条件: 安装Git客户端(下载地址) 有GitHub账号 创建新项目并提交到Github: 在AndroidStudio中新建一个项目 配置Git:Settings -> Ver

Android 打造形形色色的进度条 实现可以如此简单

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/43371299 ,本文出自:[张鸿洋的博客] 1.概述 最近需要用进度条,秉着不重复造轮子的原则,上github上搜索了一番,看了几个觉得比较好看的ProgressBar,比如:daimajia的等.简单看了下代码,基本都是继承自View,彻彻底底的自定义了一个进度条.盯着那绚丽滚动条,忽然觉得,为什么要通过View去写一个滚动条,系统已经提供了ProgressBar以及属于它的

(六十六)Android打造形形色色的进度条 (转载自:http://blog.csdn.net/lmj623565791/article/details/43371299)

转载自:http://blog.csdn.net/lmj623565791/article/details/43371299 ,本文出自:[张鸿洋的博客] 1.概述 最近需要用进度条,秉着不重复造轮子的原则,上github上搜索了一番,看了几个觉得比较好看的ProgressBar,比如:daimajia的等.简单看了下代码,基本都是继承自View,彻彻底底的自定义了一个进度条.盯着那绚丽滚动条,忽然觉得,为什么要通过View去写一个滚动条,系统已经提供了ProgressBar以及属于它的特性,我