Gepostet , um Informationen über die Antwort von PaulieG hinzuzufügen , da ateiob mich gebeten hat, etwas zu erklären ...
Ich kann sagen, dass es (oder zumindest zum Zeitpunkt des Schreibens, als ich mir diese aktuelle Version des Android-Quellcodes ansah) einen Fehler / ein Problem / eine Optimierung im ProgressBar
Code gibt, der den Versuch ignoriert, den Fortschritt auf einen Wert zu setzen ist schon bei.
- Wenn also progress = 45 ist und Sie versuchen, ihn auf 45 zu setzen, führt der Code nichts aus und zeichnet den Fortschritt nicht neu .
Nach dem Aufruf ProgressBar.setProgressDrawable()
ist Ihr Fortschrittsbalken leer (weil Sie den zeichnbaren Teil geändert haben).
Dies bedeutet, dass Sie den Fortschritt festlegen und neu zeichnen müssen. Wenn Sie den Fortschritt jedoch nur auf einen beibehaltenen Wert setzen, wird nichts unternommen.
Sie müssen es zuerst auf 0 und dann wieder auf den "alten" Wert setzen, und der Balken wird neu gezeichnet.
Um es zusammenzufassen:
- Behalten Sie den "alten" Fortschrittswert bei
- Aktualisiere das Zeichen / die Farbe (macht den Balken leer)
- Setzen Sie den Fortschritt auf 0 zurück (andernfalls führt die nächste Zeile nichts aus)
- Setzen Sie den Fortschritt auf den "alten" Wert zurück (Korrekturleiste)
- ungültig machen
Unten ist eine Methode, die ich habe, die dies tut:
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();
}
Was die Lösung von HappyEngineer angeht, war es meiner Meinung nach eine ähnliche Problemumgehung, den Versatz "Fortschritt" manuell festzulegen. In beiden Fällen sollte der obige Code für Sie funktionieren.