- 论坛徽章:
- 0
|
android中在progressBar上添加文字显示百分比进度
工作中遇到ProgressBar上加文字显示的问题,在网上查了下,发现好多都说可以用TextProgressBar来实现,但具体的使用方法却没有。后来在一个黑客网站发现了一个方法。觉得还不错,所以拿来用了,效果也还行。在此分享一下:
一般的ProgressBar都只是一个光光的条(这里说的都是水平进度条),虽然比不用进度条时给用户的感觉要好,但是如果在形像化的东西上面再加上点文字,将进度描述量化,就可以让用户更加明白当前进度是多少了。
有了需求,就可以开始实现了。
这里的原理就是继承一个ProgressBar,然后重写里面的onDraw()方法。
Java代码- 1.public class MyProgressBar extends ProgressBar {
- 2. String text;
- 3. Paint mPaint;
- 4.
- 5. public MyProgressBar (Context context) {
- 6. super(context);
- 7. System.out.println("1");
- 8. initText();
- 9. }
- 10.
- 11. public MyProgressBar (Context context, AttributeSet attrs, int defStyle) {
- 12. super(context, attrs, defStyle);
- 13. System.out.println("2");
- 14. initText();
- 15. }
- 16.
- 17. public MyProgressBar (Context context, AttributeSet attrs) {
- 18. super(context, attrs);
- 19. System.out.println("3");
- 20. initText();
- 21. }
- 22.
- 23. @Override
- 24. public synchronized void setProgress(int progress) {
- 25. setText(progress);
- 26. super.setProgress(progress);
- 27. }
- 28.
- 29. @Override
- 30. protected synchronized void onDraw(Canvas canvas) {
- 31. super.onDraw(canvas);
- 32.//this.setText();
- 33. Rect rect = new Rect();
- 34. this.mPaint.getTextBounds(this.text, 0, this.text.length(), rect);
- 35. int x = (getWidth() / 2) - rect.centerX();
- 36.
- 37. int y = (getHeight() / 2) - rect.centerY();
- 38. canvas.drawText(this.text, x, y, this.mPaint);
- 39. }
- 40.
- 41.//初始化,画笔
- 42. private void initText() {
- 43. this.mPaint = new Paint();
- 44. this.mPaint.setColor(Color.WHITE);
- 45. }
- 46.
- 47.// private void setText() {
- 48.// setText(this.getProgress());
- 49.// }
- 50.
- 51.//设置文字内容
- 52. private void setText(int progress) {
- 53. int i = (progress * 1) / this.getMax();
- 54. this.text = String.valueOf(i) + "%";
- 55. }
- 56.}
- public class MyProgressBar extends ProgressBar {
- String text;
- Paint mPaint;
- public MyProgressBar (Context context) {
- super(context);
- System.out.println("1");
- initText();
- }
- public MyProgressBar (Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- System.out.println("2");
- initText();
- }
- public MyProgressBar (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);
- //this.setText();
- 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 * 1) / this.getMax();
- this.text = String.valueOf(i) + "%";
- }
- }
复制代码 这样写后,在xml布局文件中使用时,可能会因为命名空间改变,下面属性无法用代码提示。一个简单的做法就是,先写一个正常的ProgressBar的标记,把属性写完后,再将ProgressBar替换为我们自定义的进度条的完整类名。还有使用自定义的控件后,android的布局预览是看不到效果的,运行到模拟器上就行了。
最后,使用方法就和普通的ProgressBar差不多。
本篇文章来源于 黑软基地-中国最大的黑客软件安全教程下载站!(手机资讯) 原文链接:http://www.hackvip.com/mobiwen/html/Mobile_250548.html |
|