Написал, чтобы добавить информацию об ответе PaulieG , так как ateiob попросил меня кое-что объяснить ...
Я могу сказать, что существует (или, по крайней мере, было, во время написания, когда я смотрел на эту текущую версию исходного кода Android) ошибка / проблема / оптимизация в ProgressBar
коде, которая игнорирует попытку установить прогресс в значение, которое он уже в.
- т. е. если progress = 45, и вы пытаетесь установить его на 45, код ничего не будет делать и не будет перерисовывать прогресс .
После вызова ProgressBar.setProgressDrawable()
ваш индикатор выполнения будет пустым (потому что вы изменили рисованную часть).
Это означает, что вам нужно установить прогресс и перерисовать его. Но если вы просто установите прогресс в сохраненное значение, это ничего не изменит.
Сначала необходимо установить значение 0, затем снова «старое» значение, и полоса будет перерисована.
Итак, подведем итог:
- сохранить «старое» значение прогресса
- обновить рисование / цвет (делает панель пустой)
- сбросить прогресс до 0 (иначе следующая строка ничего не делает)
- сбросить прогресс до «старого» значения (панель исправлений)
- Invalidate
Ниже у меня есть метод, который делает это:
protected void onResume()
{
super.onResume();
progBar = (ProgressBar) findViewById(R.id.progress_base);
int oldProgress = progBar.getProgress();
// define new drawable/colour
final float[] roundedCorners = new float[]
{ 5, 5, 5, 5, 5, 5, 5, 5 };
ShapeDrawable shape = new ShapeDrawable(new RoundRectShape(
roundedCorners, null, null));
String MyColor = "#FF00FF";
shape.getPaint().setColor(Color.parseColor(MyColor));
ClipDrawable clip = new ClipDrawable(shape, Gravity.LEFT,
ClipDrawable.HORIZONTAL);
progBar.setProgressDrawable(clip);
progBar.setBackgroundDrawable(getResources().getDrawable(
android.R.drawable.progress_horizontal));
// work around: setProgress() ignores a change to the same value
progBar.setProgress(0);
progBar.setProgress(oldProgress);
progBar.invalidate();
}
Что касается решения HappyEngineer, я думаю, что это был похожий обходной путь, чтобы вручную установить смещение «прогресса». В любом случае приведенный выше код должен работать на вас.