lyccsu 2011-11-23
工作中遇到ProgressBar上加文字显示的问题,在网上查了下,发现好多都说可以用TextProgressBar来实现,但具体的使用方法却没有。后来在一个黑客网站发现了一个方法。觉得还不错,所以拿来用了,效果也还行。在此分享一下:
一般的ProgressBar都只是一个光光的条(这里说的都是水平进度条),虽然比不用进度条时给用户的感觉要好,但是如果在形像化的东西上面再加上点文字,将进度描述量化,就可以让用户更加明白当前进度是多少了。
有了需求,就可以开始实现了。
这里的原理就是继承一个ProgressBar,然后重写里面的onDraw()方法。
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