Как правильно задать прогрессБар?

При нажатии на кнопку, растет количество очков и увеличивается прогрессБар. Доходя, например, до 30, максимальное значение становится 60, минимальное 30. - Это повышение срабатывает. Второе - при достижении 60, минималка становится 60, максимальное - 80. А вот тут и проблема, не изменяются значения.

В чем я ошибаюсь?

Начальные значения прогрессБара.

protected int exp_up = 0;
    public int getExp_up() {
        return exp_up;
    }
    public void setExp_up(int exp_up) {
        this.exp_up = exp_up;
    }
   progressBar.setMin(0);
   progressBar.setMax(30);


Срабатывание при нажатии на кнопку.

@RequiresApi(api = Build.VERSION_CODES.O)
    @SuppressLint("SetTextI18n")
    public void ClickMe(View v){
      setExp_up(getExp_up()+10);
      progressBar.setProgress(getExp_up());
        exp.setText(""+getExp_up());
        lvl.setText(""+getLvl_up());
          setLvl();
        }

Процесс обработки прогрессБара.

@RequiresApi(api = Build.VERSION_CODES.O)
    public void setLvl() {
        if (progressBar.getProgress() < 30) {
            setLvl_up(0);
            progressBar.setMin(0);
            progressBar.setMax(30);
        } else if (progressBar.getProgress() >= 30 || progressBar.getProgress() <= 60) {
            setLvl_up(1);
            progressBar.setMin(30);
            progressBar.setMax(60);
        } else if (progressBar.getProgress() >= 60 || progressBar.getProgress() <= 80) {
            setLvl_up(2);
            progressBar.setMin(60);
            progressBar.setMax(80);
        }
    }
  • Вопрос задан
  • 195 просмотров
Решения вопроса 1
alekseyHunter
@alekseyHunter
Android developer
Ох, зачем такие велосипеды?? А если вы решите еще 100 уровней добавить, будете для каждого новый блок кода писать?

Используйте не абсолютную шкалу, а относительную. У вас система уровней, для каждой следующей нужно N-опыта + 30. Храните в отдельном массиве/HashMap пары значений "уровень/требуемый опыт, считая от 0", в отдельной переменной храните текущий опыт, и еще в одной локальной переменной текущий уровень, чтобы не пересчитывать по несколько раз.

Плавно переходим к прогресс бару. Установите минимальное значение - 0, максимальное - 100. А для увеличения значения прогресс бара используйте формулу: текущее значение += полученный_опыт / (требуемый_опыт_на_текущем_уровне / 100). Требуемый_опыт_на_текущем_уровне считается как разница между предыдущем уровнем и текущим. Если текущее значение прогресса >= 100, устанавливаем значение 100 и запускаем метод по повышению уровня "Поздравляем, вы повысили лвл..." (в нем обнуляем прогресс бар). После этого потребуется повторная инициализация прогресс-бара - берем текущий уровень опыта, вычитаем из него макс. значение предыдущего уровня и передаем получившееся значение в метод по увеличению прогресса.

Как-то так.
P.S. О том, как определить текущий уровень - обращаемся к HashMap, фильтруем значения, отбрасывая те, которые меньше текущего опыта. Из найденных выбираем минимальное. Это и будет текущий уровень.
P.P.S. А теперь ответ на ваш вопрос. У вас знаки неправильно стоят, постоянно выполняется второе условие (progress <= 60). Уберите для верхних ограничений знак равно. Вот в первом условии правильно (progress < 30).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы