Я использую LinearProgressIndicator с WebView, чтобы показать прогресс рендеринга веб-страницы, как скрыть его, когда анимация прогресса достигает 100?

Я использую LinearProgressIndicator с WebView, чтобы показать ход рендеринга веб-страницы. Я использую onProgressChanged (представление WebView, int newProgress) WebChromeClient для этой цели, как показано ниже:

            @Override
            public void onProgressChanged(WebView view, final int newProgress) {
                super.onProgressChanged(view, newProgress);
                   if (newProgress == 100) {
                   indicator.setProgressCompat(100,true);
                   //todo implement listener to hide progress indicator

                   } else {
                   indicator.setProgressCompat(newProgress,true);
                  }
                        
            }

Теперь рассмотрим следующий сценарий: индикатор прогресса имеет текущий прогресс = 70, а новый прогресс, который мы должны установить, равен 100. Итак, я хочу скрыть индикатор прогресса после завершения его анимации. Если я скрою это с помощью progressBar.hide(); после индикатора.setProgressCompat(100,true); затем он становится скрытым, но есть одна проблема, он быстро скрывается, даже если в данный момент выполняется его анимация, которая меняет его прогресс с 70 на 100. Я не хочу, чтобы это произошло, я хочу скрыть индикатор прогресса, когда его анимация, которая анимирует его прогресс от 70 до 100, заканчивается. Есть ли слушатель, чтобы достичь этого?


person Chaitanya Karmarkar    schedule 13.03.2021    source источник


Ответы (1)


Самый простой способ — просто отложить действие скрытия через определенное время.

int delayTime = 2000;
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
      @Override
      public void run() {
        indicator.hide();
      }
    }, delayTime);

Протестируйте с лучшим значением delayTime.

person Lankaka    schedule 13.03.2021
comment
Да, это может быть полезно. Но есть ли слушатель, чтобы послушать конец анимации? - person Chaitanya Karmarkar; 13.03.2021
comment
Как я понял, это не так. Вы можете попробовать запустить проверку потока ((Animatable)indicator.getProgressDrawable()).isRunning() имеет значение true. Но я не знаю, работает ли это или нет - person Lankaka; 13.03.2021
comment
Я сделал это по-другому, я анимировал прогресс-бар с помощью ObjectAnimator. И прослушал обновления прогресса, подключив прослушиватель к ObjectAnimator. - person Chaitanya Karmarkar; 17.03.2021