任何方法来制作一个进度条,当值为0时,它是100%?

时间:2011-09-30 20:57:20

标签: android progress-bar reverse

我正在研究债务追踪应用程序,并且需要一个进度条,当前债务下降时,进度会上升。我能想到的唯一方法就是捏造数字,以便将进度条MAX设置为0,然后将起始债务更改为负数,如下所示

ProgressBar.setMax(0);

Integer startingdebt = -1000;  // 1000$ owed
ProgressBar.setProgress(currentlyowed);  //say, -500

所以你从-1000开始,如果付了它就加500 $。我不知道这是否会起作用,因为我确定进度条控件已经设置了最小值0,所以你不能设置max相同...有没有办法做到这一点?

编辑:谢谢你的回答,但我找到了一个更简单的方法:  与他人分享,这是我的最终代码块:

    double startingamount = (this.c.getDouble(this.c.getColumnIndex(DbAdapter.KEY_STARTINGAMOUNT)));
    double currentamount = (this.c.getDouble(this.c.getColumnIndex(DbAdapter.KEY_CURRENTAMOUNT)));
    currentdebt.setText(formatter.format(currentamount));
    double progresspaid = new Double(startingamount-currentamount);
    double progresspercentage = new Double((progresspaid / startingamount)*100);
    int progresspercent = (int)progresspercentage;
    progressbar.setText(Integer.toString(progresspercent)+"%");
    progressbar.setMax(100);
    progressbar.setProgress(progresspercent);

关键是获取一个变量,从起始金额中减去当前金额,然后将其除以起始金额。

double progresspaid = new Double(startingamount-currentamount);
double progresspercentage = new Double((progresspaid / startingamount)*100);

再次感谢,我非常感谢有人帮助我学习Java和android开发,我是一名VB.net开发人员,所以其中一些对我来说仍然很陌生。

2 个答案:

答案 0 :(得分:4)

虽然这可能不太理想(我不使用Android并避免使用UI编码;-),数字和百分比可以通过一些数学计算 - 如果原始值本身显示在数字和百分比上可能会有问题进度条。

从0到100的百分比是:

percent = (current - min) / (max - min)

(当min = 0时,这很简单percent = current / max。)

百分比从100到0是:

percentReverse = 100 - percent

或,扩展:

percentReverse = 100 - ((current - min) / (max - min))

示例,current = -800,max = 0,min = -1000:

percent = (-800 - -1000) / (0 - -1000) = 200/1000 = 20 (% done)
percentReverse = 100 - 20 = 80 (% left)

另一个例子,current = 0,max = 2000,min = -1000:

percent = (0 - -1000) / (2000 - -1000) = 1000/3000 = 33 (% done)
percentReverse = 100 - 33 = 66 (% left)

快乐的编码。

答案 1 :(得分:2)

将债务追踪为正整数并减去付款可能最简单,但如果你必须保持负数,也许可以尝试这样的事情:

// initialize
int startingDebt = -1000;
int currentlyOwed = startingDebt;
ProgressBar.setMax(-startingDebt);

// make a payment
int payment = 500;
currentlyOwed += payment
ProgressBar.setProgress(-currentlyOwed);