Почему ProgressBar останавливает анимацию при замене макета в Android?

Я использую линейную компоновку. Это включает в себя progressbar.xml, который показывает пользователю индикатор ожидания. Есть две кнопки с надписью «abc» и «xyz». Когда в настоящее время кнопка «abc» находится в нажатом состоянии. Когда действие начинается, оно показывает пользователю индикатор прогресса (индикатор прогресса находится в анимации с помощью этого свойства android:indeterminate="true"). Пользователь нажимает кнопку «xyz». Я сохраняю ссылку на макет индикатора выполнения с помощью findViewById (int id); А затем INFLATE с помощью LayoutInflater другой макет формы data.xml. Я удаляю mainLinearview.removeAllView(); Затем добавьте mainLinearview.addView(dataview); И он отображает другие данные. Еще раз, когда пользователь нажимает кнопку «abc», тот же шаг применяется к mainLinearview.addView (прогрессбар).

Основная проблема в том, что на этот раз полоса прогресса не анимируется. Не могли бы вы помочь? Еще 1 вещь, которую я ищу, как изменить цвет индикатора выполнения. Но я не нашел ничего хорошего. Заранее спасибо.


person Arslan Anwar    schedule 28.12.2010    source источник


Ответы (3)


Вызовите это, когда снова появится индикатор выполнения, и он должен снова анимироваться.

public static void resumeProgressBarAnimation(ProgressBar pb) {
    if (pb.getVisibility() == View.VISIBLE) {
        pb.setVisibility(View.INVISIBLE);
        pb.setVisibility(View.VISIBLE);
    }
}
person Randy Sugianto 'Yuku'    schedule 13.02.2011

У меня была та же проблема, но я меняю кнопку на неопределенный ProgressBar, поэтому я взглянул на исходный код ProgressBar, и они используют startAnimation() и stopAnimation() для неопределенного ProgressBar, но методы не видны для действия, поэтому быстрый обходной путь, который я использую, - это setVisibility(int), когда они запускают и останавливают анимацию в зависимости от состояния видимости ProgressBar, но ключевой момент в этом заключается в том, что вы должны остановить анимацию перед изменением макета и запустить ее, когда Родительский макет ProgressBar возвращается... так что, наконец, я сделал следующее:

/**
 * Replace a button with the specified view. The view will be set
 * with the button layout parameters. Use {@link #revert(HeaderButton, View)}
 * to rollback this operation
 * @param button
 * @param with
 */
public void replace(HeaderButton button, View with){
    with.setVisibility(View.VISIBLE);
    mHeaderView.replace(button, with);
}

/**
 * Restores a button that was previously replaced
 * @param button
 * @param with
 */
public void revert(HeaderButton button, View with){
    with.setVisibility(View.GONE);
    mHeaderView.revert(button, with);
}

Переданный with View в настоящее время является неопределенным ProgressBar, и кнопка заменяется OnClick и возвращается после завершения фонового процесса.

Надеюсь, поможет

person eveliotc    schedule 04.02.2011

Во-первых, публикация кода поможет вам ПОЛУЧИТЬ помощь. Похоже, вы неправильно отредактировали файл манифеста, чтобы фактически отобразить ProgressBar, поэтому начните с публикации того, как это выглядит. Это довольно просто.

Проверьте свой класс Activity... вы установили видимость в true?

person Dorian06    schedule 28.12.2010