Android - плавный рост индикатора прогресса, а не прыжки большими шагами. - PullRequest
3 голосов
/ 12 сентября 2011

У меня есть последовательность ситуаций, скажем, 5 ситуаций. Дело в том, что я не знаю, как долго продлится каждый из них. Я просто знаю, когда закончится каждая из этих ситуаций.

поэтому представьте, что этот метод вызывается случайно, а не случайно, но я не мог знать, когда будет вызван.

public void refresh(int i){

}

знаю, что я могу обновлять индикатор выполнения, увеличивая его каждый раз, когда будет вызываться обновление, но пользовательский опыт будет «видеть, что планка увеличена на 20%, чем ждать, и ничего не движется, затем снова скачок на 20% и стек снова», и так далее ...

То, чего я хочу достичь, - это иметь что-то более спокойное. Я знаю, что это нелегкая задача, но я знаю, что кто-то сталкивался с этой проблемой раньше, так каковы обходные пути?

Ответы [ 3 ]

3 голосов
/ 12 сентября 2011

Если обновления будут поступать в основном случайным образом, вы можете рассмотреть возможность использования «счетчика» вместо индикатора выполнения.Конечный результат почти тот же: пользователь имеет представление о том, что процесс идет полным ходом.Если вы хотите дать немного больше информации, вы можете обновить текстовую метку рядом со счетчиком, чтобы указать, какая часть последовательности выполняется:

spinning progress indicator with text label

1 голос
/ 12 сентября 2011

Быстрый вопрос, вам нужен индикатор выполнения?

Из того, что я прочитал, вы не имеете ни малейшего представления о предполагаемом времени, только то, что каждый кусок равен 20%, и вы не знаете, как долго каждыйкуски или их время для прохождения, но вы хотите, чтобы планка двигалась более плавно, чем большие 20% завершенных кусков.

Поскольку у вас есть только 5 точек измерения, если вы не можете добавить еще один уровень прогресса для каждой задачичтобы сообщить, иначе вы застряли в догадках.

Если вы хотите угадать, вы можете сделать приблизительную оценку времени, которое займет задание.Опять же, основываясь на поставленной задаче, вы можете сделать хорошую или плохую оценку путем жесткого кодирования ожидаемого времени.Трюк, о котором вы просите, выглядит как прогресс (скрыть тот факт, что вы находитесь в неопределенной точке операции 1/5)

Теперь счетчик медленно поднимается к следующей отметке в течение заданного времени (скажем, 1минут), но по мере приближения времени уменьшайте прогресс, это будет означать, что вы будете видеть, как полоса движется быстрее или медленнее, когда вы приближаетесь к ожидаемой следующей точке.У вас будет прогресс, но это будет чисто случайное предположение.Если задание завершается раньше, у вас есть «пропущенный»%, чтобы увеличить следующий пробел в прогрессе, если медленный, то полоса замедляется все больше и больше.

Это много дополнительной работы, чтобы показать что-то, что вводит в заблуждениев лучшем случае, чтобы показать, что прогресс не застрял, вы можете поискать другие варианты вместе с индикатором выполнения.

1 голос
/ 12 сентября 2011

Я сталкивался с этим раньше.Что я сделал, так это оценил каждую из моих «ситуаций» относительно того, сколько из 100% прогресса им потребуется.Таким образом, задача 1 может подняться до 15%, а задача 2 - до 50% и т. Д. Имейте в виду, что это только общая оценка.Затем в каждой ситуации я бы рассчитал индивидуальное задание на 100% полноту и увеличил его соответственно.Затем я делаю математику, чтобы вычислить фактический прогресс, основываясь на задании, в котором я находился. Итак, если бы я был в задании 2, я бы рассчитывал на основании 100% прогресса конкретной задачи, рассчитанного по сравнению с 35%общий прогресс, который я оценил задачу 2 на самом деле.Я надеюсь, что это поможет вам.

...