一般的ProgressBar
都只是一个光光的条(这里说的都是水平进度条),虽然比不用进度条时给用户的感觉要好,但是如果在形像化的东西上面再加上点文字,将进度描述量化,就可以让用户更加明白当前进度是多少了。
有了需求,就可以开始实现了。
这里的原理就是继承一个ProgressBar,然后重写里面的onDraw()方法。
不多说,直接上码。(下面代码中的packagehol.test;,import就不写了)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
public
class MyProgress
extends ProgressBar{
String text;
Paint mPaint;
public
MyProgress(Context context) {
super (context);
System.out.println( "1" );
initText();
}
public
MyProgress(Context context, AttributeSet attrs, int
defStyle) {
super (context, attrs, defStyle);
System.out.println( "2" );
initText();
}
public
MyProgress(Context context, AttributeSet attrs) {
super (context, attrs);
System.out.println( "3" );
initText();
}
@Override
public
synchronized void
setProgress( int
progress) {
setText(progress);
super .setProgress(progress);
}
@Override
protected
synchronized void
onDraw(Canvas canvas) {
super .onDraw(canvas);
Rect rect =
new Rect();
this .mPaint.getTextBounds( this .text,
0 , this .text.length(), rect);
int
x = (getWidth() / 2 ) - rect.centerX();
int
y = (getHeight() / 2 ) - rect.centerY();
canvas.drawText( this .text, x, y,
this .mPaint);
}
private
void initText(){
this .mPaint =
new Paint();
this .mPaint.setColor(Color.WHITE);
}
private
void setText(){
setText( this .getProgress());
}
private
void setText( int
progress){
int
i = (progress * 100 )/ this .getMax();
this .text = String.valueOf(i) +
"%" ;
}
}
|
这样一个可以满足我们基本需求的进度条就写好了。
用的时候就可以直接在layout的XML里面加了,不过添加的写法稍微有点不同。标记名要写成这个自定义进度条的完整类名,就像下面这样。
1
2
3
4
5
6
7
8
|
< hol.test.MyProgress
android:id = "@+id/pgsBar"
android:max = "100"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
style = "?android:attr/progressBarStyleHorizontal"
android:visibility = "visible"
/>
|
这样写后,可能会因为命名空间改变,下面属性无法用代码提示。一个简单的做法就是,先写一个正常的ProgressBar的标记,把属性写完后,再将ProgressBar替换为我们自定义的进度条的完整类名。
最后,使用方法就和普通的ProgressBar差不多了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
public
class ProgressTest extends
Activity {
private
Button btn_go = null ;
private
MyProgress myProgress = null ;
private
Handler mHandler;
/** Called when the activity is first created. */
@Override
public
void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.main);
findView();
setParam();
addListener();
mHandler =
new Handler( new
Callback() {
@Override
public
boolean handleMessage(Message msg) {
myProgress.setProgress(msg.what);
return
false ;
}
});
}
private
void findView(){
btn_go = (Button) findViewById(R.id.btn_go);
myProgress = (MyProgress) findViewById(R.id.pgsBar);
}
private
void setParam(){
btn_go.setText( "开始" );
}
private
void addListener(){
btn_go.setOnClickListener( new
OnClickListener() {
@Override
public
void onClick(View v) {
new
Thread( new
Runnable() {
@Override
public
void run() {
for ( int
i = 0 ;i <= 50 ; i++){
mHandler.sendEmptyMessage(i *
2 );
try
{
Thread.sleep( 80 );
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
});
}
}
|
PS:刚开始本以为进度条的构造方法只需要重写那个最长参数的,也就是那个构造方法3,实际上我测试的时候基本都是运行的3方法。但有一次出错了,最后才找到系统居然用的1方法,所以没办法,直接把三个构造方法全重写了。如果有谁知道原因,麻烦告诉一下。
进度条上的文字信息,不一定非要百分比,可以自由发挥。比如类似“当前个数/总数”。
分享到:
相关推荐
C# progressBar进度条绘制文字显示百分比
里面有两个ProgressBar 第一个,继承ProgressBar,在此基础上添加添加了百分比文本显示 第二个,自定义的控件,显示文本,可修改文字颜色,进度条颜色,背景色等 都不存在闪烁问题
jQuery progressbar进度条插件提示进度条进度百分比数据
多种酷炫的自定义ProgressBar的圆形加载进度条源码,带百分比进度显示
android 自定义百分比显示进度条(改进版),在原作者的基础上修改,改进的地方就是百分比文字显示在不同手机分辨率下进行处理,大家还可以继续在此基础上继续改进,本人主要使用在项目的系统版本更新,使用语法与原...
使用WPF的ProgressBar实现百分比的进度条,颜色和背景都有设置
ProgressBar控件显示进度条的变化.rar
摘要:C#源码,数据库应用,ProgressBar,进度条 C#在ProgressBar控件中显示进度百分比,也就是添加一个进度条的应用,进度条大家应该都知道吧,很多需要用户等待的时候,一般都会使用进度条来显示进度,提升软件体验,...
进度条显示文字 进度条显示百分比 在进度条上显示百分比让进度信息更直观
Jquery实现进度条显示百分比 Jquery实现进度条显示百分比 Jquery实现进度条显示百分比
此为Android ProgressBar 简单进度条的实现及示例下载源码,基本思路是:将模拟任务分成大小为100个的数组,任务完成度--默认为0,状态完成度默认也为0,然后构造一个线程用于显示消息,然后定义dowork()函数,完成...
使用C#在ProgressBar控件中显示进度百分比的源码,非常实用
该源码实现了可以带文字的进度条progressbar效果,在进度条中可以有百分比的显示,可以让你更容易知道进度的快慢等,也是一款很不错的进度条效果的,大家可以了解一下吧。
progressbar带百分比提示的进度条插件
android 自定义百分比显示进度条(改进版),在原作者的基础上修改,改进的地方就是百分比文字显示在不同手机分辨率下进行处理,大家还可以继续在此基础上继续改进,本人主要使用在项目的系统版本更新,使用语法与原...
在源代码中,showmessage是弹出消息提示窗口,showprogress是显示进度条,为了更好的看到效果,本示例显示进度条正在运行的状态,进度条和弹出消息框,作者:周劲羽 该单元提供以下几个过程用于显示动态提示窗体:...
这是一个普普通通的水平进度条,写了个圆角的样式,写了进度条的两个颜色,在点击方法里面来控制这...这个是我在做一个显示空闲比例的地方用到的,当然也可以用于进度条的自动前进,加点内容就可以实现。适合于初学者。
可以自定义进度条颜色,在进度条上显示百分比的文字