博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android自定义文本的进度条
阅读量:6903 次
发布时间:2019-06-27

本文共 3514 字,大约阅读时间需要 11 分钟。

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

   

 

整体思路: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     @Override30     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     @Override51     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         }else60         {61             Log.i("luqh","mPaint or text is null");62         }63     }64     @Override65     public synchronized void setProgress(int progress) {66         super.setProgress(progress);67     }68 }
MyProgress.java

 

2、布局文件activity_main.xml

1 
7 8
16
17
activity_main.xml

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

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

1 
2
3
4
5
6
7
10
11
12
13
14
15
16
17
20 21
22
23
24 25
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、运行效果:

 

 

 

转载于:https://www.cnblogs.com/luqh/p/5273159.html

你可能感兴趣的文章
linux命令6--touch命令
查看>>
我的友情链接
查看>>
且谈布局适配和日志框架
查看>>
在论坛中出现的比较难的sql问题:15(行转列2)
查看>>
springboot中的5种通知小例子
查看>>
mysql数据通过jdbc操作作为Spark数据源案例
查看>>
Sersync实现触发式文件同步
查看>>
shell练习题
查看>>
大型网站压力测试及优化方案
查看>>
云计算的特性有这4点
查看>>
IT兄弟连 JavaWeb教程 jQuery对AJAX的支持
查看>>
Windows SqlServer 2008服务1433端口不监听问题排查
查看>>
oracle 11g rac安装之oracle database报错解决
查看>>
linux固定用户访问ip限制
查看>>
华为SSH配置
查看>>
比较好用的dns列表
查看>>
linux下mysql的root密码忘记解决方法
查看>>
多机调度问题-贪心算法
查看>>
sql_trace的使用
查看>>
我的友情链接
查看>>