любой способ сделать индикатор выполнения, который, когда значение равно 0, это 100%? - PullRequest
1 голос
/ 01 октября 2011

Я работаю над приложением для отслеживания долга, и мне нужен индикатор выполнения, который по мере уменьшения текущего долга будет увеличиваться. Единственный способ, которым я могу думать об этом, состоит в том, чтобы выдумать числа вокруг так, чтобы индикатор выполнения MAX был установлен в 0, а затем изменить начальный долг на отрицательное число, как показано ниже

ProgressBar.setMax(0);

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

поэтому вы начинаете с -1000 и добавляете к ней 500 $, если заплатили. Я не знаю, будет ли это работать, потому что я уверен, что для элемента управления прогрессом уже установлен минимум 0, поэтому вы не можете установить максимум таким же ... есть ли способ сделать это?

Редактировать: Спасибо за ответы, ребята, но я нашел более простой способ: чтобы поделиться с другими, вот мой последний блок кода:

    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 ]

4 голосов
/ 01 октября 2011

Хотя это может и не быть идеальным (я не использую Android и избегаю кодирования пользовательского интерфейса ;-), цифры и проценты можно вычислить с небольшой математикой - это может быть проблематично, если исходное значение само отображается на индикатор выполнения.

Процент, идущий от 0 ... 100:

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

(Когда min = 0, это тривиально percent = current / max.)

А процент от 100 до 0:

percentReverse = 100 - percent

или, расширен:

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

Пример, ток = -800, макс = 0, мин = -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)

Удачного кодирования.

2 голосов
/ 01 октября 2011

Вероятно, проще всего отследить долг как положительное целое число и вычесть платежи, но в случае, если вам нужно оставить его отрицательным, возможно, попробуйте что-то вроде этого:

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

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