Опубліковано, щоб додати інформацію про відповідь PaulieG , оскільки ateiob попросив мене щось пояснити ...
Я можу сказати, що є (або, принаймні, був на момент написання, коли я переглянув цю поточну версію вихідного коду Android) помилка / проблема / оптимізація в ProgressBar
коді, який ігнорує спробу встановити прогрес на значення вже в.
- тобто якщо прогрес = 45, а ви спробуєте встановити його на 45, код нічого не зробить і не перемальовує прогрес .
Після дзвінка ProgressBar.setProgressDrawable()
панель прогресу буде порожньою (оскільки ви змінили чергову частину).
Це означає, що вам потрібно встановити хід і перемалювати його. Але якщо ви просто встановите прогрес на збережене значення, це нічого не зробить.
Спочатку потрібно встановити його на 0, потім знову на "старе" значення, і панель перемальовується.
Отже, підсумовуючи:
- зберегти "старе" значення прогресу
- оновити графічний / кольоровий (робить смугу порожньою)
- скинути прогрес до 0 (інакше наступний рядок нічого не робить)
- скинути прогрес до "старого" значення (панель виправлень)
- визнати недійсним
Нижче наведено метод, який у мене є:
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, я думаю, це було подібне рішення, щоб вручну встановити "прогрес" зміщення. У будь-якому випадку вищевказаний код повинен працювати для вас.