android 怎么在progressbar中添加文字

android 怎么在progressbar中添加文字,第1张

在progressbar中添加文字

01 public class MyProgress extends ProgressBar{

02 String text

03 Paint mPaint

04

05 public MyProgress(Context context) {

06 super(context)

07 // TODO Auto-generated constructor stub

08 System.out.println("1")

09 initText()

10 }

11

12 public MyProgress(Context context, AttributeSet attrs, int defStyle) {

13 super(context, attrs, defStyle)

14 // TODO Auto-generated constructor stub

15 System.out.println("2")

16 initText()

17 }

18

19

20 public MyProgress(Context context, AttributeSet attrs) {

21 super(context, attrs)

22 // TODO Auto-generated constructor stub

23 System.out.println("3")

24 initText()

25 }

26

27 @Override

28 public synchronized void setProgress(int progress) {

29 // TODO Auto-generated method stub

30 setText(progress)

31 super.setProgress(progress)

32

33 }

34

35 @Override

36 protected synchronized void onDraw(Canvas canvas) {

37 // TODO Auto-generated method stub

38 super.onDraw(canvas)

39 //this.setText()

40 Rect rect = new Rect()

41 this.mPaint.getTextBounds(this.text, 0, this.text.length(), rect)

42 int x = (getWidth() / 2) - rect.centerX()

43 int y = (getHeight() / 2) - rect.centerY()

44 canvas.drawText(this.text, x, y, this.mPaint)

45 }

46

47 //初始化,画笔

48 private void initText(){

49 this.mPaint = new Paint()

50 this.mPaint.setColor(Color.WHITE)

51

52 }

53

54 private void setText(){

55 setText(this.getProgress())

56 }

57

58 //设置文字内容

59 private void setText(int progress){

60 int i = (progress * 100)/this.getMax()

61 this.text = String.valueOf(i) + "%"

62 }

63

64

65 }

这样一个可以满足我们基本需求的进度条就写好了。

用的时候就可以直接在layout的XML里面加了,不过添加的写法稍微有点不同。标记名要写成这个自定义进度条的完整类名,就像下面这样。

1 <hol.test.MyProgress

2android:id="@+id/pgsBar"

3android:max="100"

4android:layout_width="fill_parent"

5android:layout_height="wrap_content"

6style="?android:attr/progressBarStyleHorizontal"

7android:visibility="visible"

8/>

这样写后,可能会因为命名空间改变,下面属性无法用代码提示。一个简单的做法就是,先写一个正常的ProgressBar的标记,把属性写完后,再将ProgressBar替换为我们自定义的进度条的完整类名。

最后,使用方法就和普通的ProgressBar差不多了。

01 public class ProgressTest extends Activity {

02

03 private Button btn_go = null

04 private MyProgress myProgress = null

05 private Handler mHandler

06

07 /** Called when the activity is first created. */

08 @Override

09 public void onCreate(Bundle savedInstanceState) {

10 super.onCreate(savedInstanceState)

11 setContentView(R.layout.main)

12 findView()

13 setParam()

14 addListener()

15

16 mHandler = new Handler(new Callback() {

17

18 @Override

19 public boolean handleMessage(Message msg) {

20 // TODO Auto-generated method stub

21 myProgress.setProgress(msg.what)

22 return false

23 }

24 })

25

26 }

27

28 private void findView(){

29 btn_go = (Button) findViewById(R.id.btn_go)

30 myProgress = (MyProgress) findViewById(R.id.pgsBar)

31 }

32

33 private void setParam(){

34 btn_go.setText("开始")

35 }

36 private void addListener(){

37 btn_go.setOnClickListener(new OnClickListener() {

38

39 @Override

40 public void onClick(View v) {

41 // TODO Auto-generated method stub

42 new Thread(new Runnable() {

43 @Override

44 public void run() {

45 // TODO Auto-generated method stub

46 for(int i = 0i <=50i++){

47 mHandler.sendEmptyMessage(i * 2)

48 try {

49 Thread.sleep(80)

50 } catch (InterruptedException e) {

51 // TODO Auto-generated catch block

52 e.printStackTrace()

53 }

54 }

55 }

56 }).start()

57 }

58 })

59 }

60 }

你可以尝试使用 CreateGraphics()方法为 ProgressBar 创建一个Graphics实例,当进度条发生更改时,如PerformStep(),你可以使用 Graphics实例为其增加进度条文字.

例如 像这样

Graphics g = progressBar1.CreateGraphics()

Font mf = new System.Drawing.Font("宋体", 10)

Brush mb = System.Drawing.Brushes.White

Point mp = new System.Drawing.Point(10, 0)

this.progressBar1.Value = 1

while (this.progressBar1.Value <this.progressBar1.Maximum)

{

this.progressBar1.PerformStep()

g.DrawString(string.Format("已处理....{0}%", this.progressBar1.Value), mf, mb, mp)

System.Threading.Thread.Sleep(50)

Application.DoEvents()

}

你可以使用这段代码 在程序需要的部分

打开Microsoft Visual Studio 2010, 新建名字为【进度条】的程序。

在新程序界面上放置合适的控件:包括,

日志输出文本框控件;

用于输入进度条长度的输入框;

3个进度条的控制按钮,可以分别开始、暂停或者停止进度条的进度;

添加一个timer控件。

设置timer控件属性为间隔100毫秒,启用状态为停止。

添加按钮【开始】的代码

设置进度条的最小值是0,最大值是用户输入的数值,当前进度为0;

设置timer开始运行。

添加按钮【暂停/继续】的代码

如果timer状态为启用,则停止timer;

如果timer状态为停止,则重新开始timer。

添加按钮【停止】的代码

停止timer的运行,并把进度条的当前值归零。

设置timer的代码

如果当前的进度小于进度条的长度,则自动加一。

如果当前的进度等于进度条的最大值,则停止timer的运行。

设置日志输出类

可以在文本框中输入过程日志。

生成exe文件进行测试

在进度条长度框中输入100,点击【开始】,进度条会持续前进。

点击【暂停】,进度条会停止前进,【暂停】按钮上的文字会显示为【继续】。

再点击【继续】,进度条会继续进行。

当进度条前进到最大值后,会自动停止。

点击按钮【停止】,会重启进度条


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11543662.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存