在ProgressBar上加文字----显示百分比的进度条



import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.ProgressBar;


public class MyProgress extends ProgressBar{
    String text;
    Paint mPaint;
     
    public MyProgress(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        System.out.println("1");
        initText(); 
    }
     
    public MyProgress(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // TODO Auto-generated constructor stub
        System.out.println("2");
        initText();
    }
 
 
    public MyProgress(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
        System.out.println("3");
        initText();
    }
     
    @Override
    public synchronized void setProgress(int progress) {
        // TODO Auto-generated method stub
        setText(progress);
        super.setProgress(progress);
         
    }
 
    @Override
    protected synchronized void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        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);
        this.mPaint.setTextSize(18);
        //去掉锯齿
        this.mPaint.setFlags(Paint.ANTI_ALIAS_FLAG);
         
    }
     
    private void setText(){
        setText(this.getProgress());
    }
     
    //设置文字内容
    private void setText(int progress){
        int i = (progress * 100)/this.getMax();
        this.text = String.valueOf(i) + "%";
    }
     
     
}



----------------------------------------------------------

package com.xxxxxxapplaction.ui;


import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;


public class TestOntimeStartTestActivity extends Activity{





   private ProgressBar progressBar;
   private Button startButton;
 
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.test_start_test);
 
       progressBar = (ProgressBar) findViewById(R.id.progress_horizontal);
       progressBar.setVisibility(View.VISIBLE);
            // 添加updataThread到消息队列
            handler.post(updateThread);
     
       
   }

   
   // 使用匿名内部类来复写Handler当中的handlerMessage()方法
   // 这个handler是需要反复执行的,直到消息队列中没有Message为止。
   // 执行过程中把进度条就刷新了。
   Handler handler = new Handler() {
    @Override
       public void handleMessage(Message msg) {
           System.out.println("----------start handle");
           progressBar.setProgress(msg.arg1);
           handler.post(updateThread); // 将要执行的线程放入到队列当中
       }
   };
 
   // 线程类,该类使用匿名内部类的方式进行声明
   Runnable updateThread = new Runnable() {
       int i = 0;
 
       public void run() {
           // TODO Auto-generated method stub
           System.out.println("----------Begin Thread");
           i += 5;
           // 得到一个消息对象,Message类是android系统提供的
           Message msg = handler.obtainMessage();
           // 将Message对象的arg1参数的值设置为i
           msg.arg1 = i; // 用arg1、arg2这两个成员变量传递消息,优点是系统性能消耗较少
           try {
               Thread.sleep(1000); // 让当前线程休眠1000毫秒
           } catch (InterruptedException ex) {
               ex.printStackTrace();
           }
           // 将Message对象加入到消息队列当中,等下次looper调用消息队列时,使用这个message显示进度条
           // 或者说,把增加了10%的进度信息Message放到updateBarHandler的队列中。
           if (i < 101){
            handler.sendMessage(msg);
           }
           // 如果i的值等于100
           if (i == 100) {
               // 将线程对象从队列中移除
            handler.removeCallbacks(updateThread);
           }
       }
   };
}




    <com.xxxxx.applaction.pub.MyProgress
        android:id="@+id/progress_horizontal"
        android:layout_below="@id/proccesstext"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="200dip"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:max="100"
        android:progress="0"
        android:layout_centerHorizontal="true"
        android:background="@drawable/progress_bg"
        android:secondaryProgress="0" />


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
如果想要在进度条末端显示百分比,可以通过自定义 ProgressBar 的绘制方式来实现。具体做法如下: 1. 在窗体上添一个 ProgressBar 控件和一个 Label 控件,设置 ProgressBar 的 Style 属性为 ProgressBarStyle.Continuous,Label 控件用于显示进度百分比。 2. 在窗体的 Load 事件中添以下代码: ```csharp private void Form1_Load(object sender, EventArgs e) { // 设置 ProgressBar 的最大值和初始值 progressBar1.Maximum = 100; progressBar1.Value = 0; // 设置 ProgressBar 的 Style 为 Continuous progressBar1.Style = ProgressBarStyle.Continuous; } ``` 3. 重写 ProgressBar 的 Paint 方法,绘制进度条末端的百分比。代码如下: ```csharp private void progressBar1_Paint(object sender, PaintEventArgs e) { // 获取 ProgressBar 上下文 var g = e.Graphics; // 获取 ProgressBar 客户区域 var rect = progressBar1.ClientRectangle; // 计算进度条的宽度 var progressBarWidth = (int)(rect.Width * ((double)progressBar1.Value / progressBar1.Maximum)); // 绘制进度条 var progressBarRect = new Rectangle(rect.X, rect.Y, progressBarWidth, rect.Height); g.FillRectangle(Brushes.Green, progressBarRect); // 绘制进度百分比 var percent = (int)(((double)progressBar1.Value / progressBar1.Maximum) * 100); var percentText = $"{percent}%"; var textSize = g.MeasureString(percentText, progressBar1.Font); var textX = rect.X + progressBarWidth - (int)textSize.Width; var textY = rect.Y + (rect.Height - (int)textSize.Height) / 2; var textPoint = new PointF(textX, textY); g.DrawString(percentText, progressBar1.Font, Brushes.White, textPoint); } ``` 在上面的代码中,我们首先获取 ProgressBar 的客户区域和当前进度条的宽度,然后绘制进度条。接着计算进度百分比并绘制在进度条末端。最后在窗体的 Load 事件中将 Paint 事件和 ProgressBar 控件关联即可。 这样就可以实现在进度条末端显示百分比的效果了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值