可以显示百分比和文件大小的Progressbar

public class MyProgressBar extends ProgressBar {
    String text; //文件大小
    String percent; //百分比
    Paint mPaint;
    Paint mPaintPercent;  //新建Paint在完成时隐藏进度百分比

    public MyProgressBar(Context context) {
        super(context);
        initText();
    }

    public MyProgressBar(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        initText();
    }

    public MyProgressBar(Context context, AttributeSet attrs) {
        super(context, attrs);
        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()) - (rect.centerX() * 2 +10);
        int y = (getHeight() / 2) - rect.centerY();
        canvas.drawText(this.text, x, y, this.mPaint);

        this.mPaintPercent.getTextBounds(this.percent, 0, this.percent.length(), rect);
        int x2 = (getWidth() / 2) - rect.centerX();
        int y2 = (getHeight() / 2) - rect.centerY();
        canvas.drawText(this.percent, x2, y2, this.mPaintPercent);
    }

    private void initText() {
        this.mPaint = new Paint();
        this.mPaint.setStrokeWidth(10f);
        this.mPaint.setTextSize(DisplayUtil.sp2px(getContext(), 13));//setTextSize参数是px
        this.mPaint.setColor(Color.WHITE);

        this.mPaintPercent = new Paint();
        this.mPaintPercent.setStrokeWidth(10f);
        this.mPaintPercent.setTextSize(DisplayUtil.sp2px(getContext(), 13));//setTextSize参数是px
        this.mPaintPercent.setColor(Color.WHITE);

    }

    public void setText(int progress) {
        //    int i = (progress * 100) / this.getMax();
        //    this.text = String.valueOf(i) + "%";
        String current = null;
        String total = null;
        DecimalFormat df = null;
        if (this.getMax() < 1024 * 100) {
            df = new DecimalFormat("##########0.0");
            current = df.format((double) progress / 1024);
            total = df.format((double) this.getMax() / 1024);
            this.text = current + "K/" + total + "K";
            if (total.equals("0.0")){
                this.percent = "0.00%";
            }else {
                this.percent = df.format( ((double) progress / 1024) / ((double) this.getMax() / 1024) * 100 ) + "%";
            }
        } else {
            df = new DecimalFormat("##########0.00");
            current = df.format((double) progress / 1024 / 1024);
            total = df.format((double) this.getMax() / 1024 / 1024);
            this.text = current + "M/" + total + "M";
            if (total.equals("0.00")){
                this.percent = "0.00%";
            }else {
                this.percent = df.format(((double) progress / 1024 / 1024) / ((double) this.getMax() / 1024 / 1024) * 100) + "%";
            }
        }
    }

    public void setText(String progress) {
        this.percent = progress;
    }

    public void setPercentGone(){
        mPaint.setColor(Color.TRANSPARENT);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: ProgressBar是一种用来显示进度的控件,常见于各种软件和应用程序中。在C语言中,我们可以使用相关的库或者函数来实现ProgressBar的功能。 一种实现方式是使用Windows API中的ProgressBar控件。首先,我们需要包含Windows.h头文件,并初始化相关的变量。然后,我们可以创建一个窗口和ProgressBar控件,并设置其位置、大小和风格等属性。接着,我们可以使用SetProgressBarPos函数来设置ProgressBar的当前进度,以及设置其最小值和最大值。最后,我们需要通过消息循环来处理ProgressBar的更新和显示。 另一种实现方式是使用字符界面来显示ProgressBar。我们可以使用光标控制函数来实现进度的更新和显示。首先,我们需要打开终端窗口,并设置光标的初始位置。然后,我们可以通过循环来控制ProgressBar的更新,每次更新时通过光标控制函数来移动光标并输出进度信息。最后,我们可以通过休眠函数来控制刷新的速度,实现ProgressBar的动态效果。 无论是使用Windows API还是字符界面,实现ProgressBar的关键是控制进度的更新和显示。我们可以根据具体的需求和应用场景,选择合适的方式来实现ProgressBar的功能。无论是用于文件的复制、下载进度的显示,还是其他涉及到进度的场景,ProgressBar都是一种非常实用的工具。 ### 回答2: ProgressBar 是一个用于显示进度的控件,可以在程序运行过程中实时展示操作的进度。 在 C 语言中,可以使用 WinAPI 或者使用第三方库来创建并使用 ProgressBar 控件。 使用 WinAPI,首先需要创建一个进度条窗口: HWND hwndProgressBar = CreateWindowEx( 0, PROGRESS_CLASS, (LPCTSTR)NULL, WS_CHILD | WS_VISIBLE | PBS_SMOOTH, x, y, width, height, hwndParent, (HMENU)ID_PROGRESSBAR, hInstance, NULL); 其中 hwndParent 是父窗口的句柄,x, y 是进度条在父窗口中的坐标,width, height 是进度条的宽度和高度。 接下来,可以使用 SendMessage 函数设置进度条的进度: SendMessage(hwndProgressBar, PBM_SETPOS, (WPARAM)progress, (LPARAM)0); 其中 progress 是一个代表进度的数值,可以是一个百分比或者其他自定义的进度单位。 最后,当程序运行过程中有进度变化时,可以通过重新发送 SendMessage 函数来更新进度条的显示。 除了使用 WinAPI,还可以使用第三方库,如 GTK 或者 Qt。这些库提供了更高级的界面功能,包括进度条的显示和更新,使用起来更加方便。在使用这些库时,可以参考它们的文档或者示例代码来了解具体的使用方法。 总之,使用 ProgressBar 可以在程序运行过程中实时显示操作的进度,提升用户体验。在 C 语言中,可以使用 WinAPI 或者第三方库来创建和使用进度条控件。 ### 回答3: 在C语言中,要实现以进度条的形式显示进度,可以通过控制台输出字符的方式来实现。 首先,确定进度条显示的长度。可以通过预设一个固定的长度,例如50个字符,来表示进度条的总长度。 接着,计算当前进度所占的比例。假设进度的范围是从0到100,进度为50%,则进度条的长度应为50% * 50 = 25个字符。 然后,使用循环来输出进度条。在每次循环中,按照当前进度计算出应该输出的字符数量,并输出对应数量的字符。例如,若当前进度为25%,则应输出25个字符,表示进度条已经完成了25%。 最后,根据需要,可以在进度条两端添加一些特殊字符,如"|","-","/>","\"等,使进度条更加美观。 以下是一个简单示例代码来实现进度条显示: ``` #include <stdio.h> void showProgressBar(int progress) { int barLength = 50; // 进度条的长度 int completedLength = progress * barLength / 100; // 计算当前进度所占的长度 printf("["); for (int i = 0; i < barLength; i++) { if (i < completedLength) { printf("="); // 已完成的部分用"="字符表示 } else { printf(" "); // 未完成的部分用空格表示 } } printf("] %d%%\r", progress); // 输出当前进度百分比 fflush(stdout); } int main() { for (int i = 0; i <= 100; i += 10) { // 模拟进度从0%到100% showProgressBar(i); Sleep(1000); // 模拟耗时操作 } return 0; } ``` 在上述代码中,`showProgressBar`函数用于显示进度条,`main`函数中的循环控制进度从0%到100%的变化,并通过`Sleep`函数模拟耗时操作。 运行上述代码,便可以在控制台中看到一个简单的进度条在不断更新。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值