| |||||||
Das Thema "Probleme Progressbar Farbe ändern" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Fortgeschrittenes Mitglied Modell: HTC Sensation Registriert seit: 31.08.2011
Beiträge: 390
Abgegebene Danke: 25
Erhielt 59 Danke für 57 Beiträge
| ich habe für meine Progressbar verschiedene Farb-Layouts angelegt (grün, rot, blau). Wenn ich mein Layout in der onCreate-Methode setze, dann funktioniert es auch einwandfrei. Versuch ich jetzt während des "Progresses" das Layout zu ändern (z.B. mit rot starten, ab 30% blau und ab 80% grün), dann verschwindet meine Progressbar und sich sehe nichts mehr. Beispielcode: color.xml Code: <?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="greenStart">#ff33dd44</color>
<color name="greenMid">#ff0A8815</color>
<color name="greenEnd">#ff1da130</color>
<color name="redStart">#ffdd3344</color>
<color name="redMid">#ff880A15</color>
<color name="redEnd">#ffa11d30</color>
<color name="blueStart">#ff3344dd</color>
<color name="blueMid">#ff0A1588</color>
<color name="blueEnd">#ff1A30a1</color>
</resources> Code: <?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<corners android:radius="5dip" />
<gradient
android:startColor="#ff9d9e9d"
android:centerColor="#ff5a5d5a"
android:centerY="0.75"
android:endColor="#ff747674"
android:angle="270"
/>
</shape>
</item>
<item android:id="@android:id/secondaryProgress">
<clip>
<shape>
<corners android:radius="5dip" />
<gradient
android:startColor="#80ffd300"
android:centerColor="#80ffb600"
android:centerY="0.75"
android:endColor="#a0ffcb00"
android:angle="270"
/>
</shape>
</clip>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<corners
android:radius="5dip" />
<gradient
android:startColor="@color/redStart"
android:centerColor="@color/redMid"
android:centerY="0.75"
android:endColor="@color/redEnd"
android:angle="270"
/>
</shape>
</clip>
</item>
</layer-list> in der onCreate-Methode: Code: progBar.setProgressDrawable(getResources().getDrawable(R.drawable.red_progress)); Code: private void checkProgressBarColor() {
if (progressCounter[3] >= 30) {
if (progressCounter[3] >= 80) {
progBar.setProgressDrawable(getResources().getDrawable(R.drawable.green_progress));
progBar.invalidate();
}
else {
runOnUiThread(new Runnable() {
@Override
public void run() {
progBar.setProgressDrawable(getResources().getDrawable(R.drawable.blue_progress));
progBar.invalidate();
}
});
}
}
} |
| | |
| | #2 (permalink) |
| Junior Mitglied Registriert seit: 06.09.2011
Beiträge: 38
Abgegebene Danke: 2
Erhielt 5 Danke für 5 Beiträge
|
Ich denke es liegt am UI Thread das der iwie Blockiert wird versuch es doch mal mit einem AsyncTask | Android Developers . wenn ich es ohne versuch wird bei mir nichtmal ne Progessbar angezeigt, hab dann nen leeres UI bis alles geladen ist. MfG nijoX |
| | |
| | #3 (permalink) |
| Fortgeschrittenes Mitglied Modell: HTC Sensation Registriert seit: 31.08.2011
Beiträge: 390
Abgegebene Danke: 25
Erhielt 59 Danke für 57 Beiträge
|
Naja, es gibt ja verschiedene Möglichkeiten, beim Threading: - runOnUiThread(new Runnable() { ... - progBar.post(new Runnable() { ... - AsyncTask - Handler Also daran sollte es nicht liegen, wobei ich den Progress selbst ja auch mit der 1. Methode iteriere: Code: Button buttonStart = (Button)findViewById(R.id.id_button_start);
buttonStart.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
initProgressCounterArray();
final Thread progressThread = new Thread(new Runnable() {
@Override
public void run() {
try {
while (getMaxProgressCount() <= 100) {
Thread.sleep(30);
int random = (int)(Math.random()*6);
progressCounter[random]++;
runOnUiThread(new Runnable() {
@Override
public void run() {
progressBar1.setProgress(progressCounter[0]);
progressBar1.setText(progressCounter[0] + "/" + progressBar1.getMax());
progressBar2.setProgress(progressCounter[1]);
progressBar2.setText(progressCounter[1] + "/" + progressBar2.getMax());
progressBar3.setProgress(progressCounter[2]);
progressBar3.setText(progressCounter[2] + "/" + progressBar3.getMax());
progressBar4.setProgress(progressCounter[3]);
progressBar4.setText(progressCounter[3] + "/" + progressBar4.getMax());
progBar.setProgress(progressCounter[3]);
progressBar5.setProgress(progressCounter[4]);
progressBar5.setText(progressCounter[4] + "/" + progressBar5.getMax());
progressBar6.setProgress(progressCounter[5]);
progressBar6.setText(progressCounter[5] + "/" + progressBar6.getMax());
checkProgressBarColor();
}
});
}
}
catch (InterruptedException ie) {
ie.printStackTrace();
}
}
});
progressThread.start();
}
}); |
| | |
| | #4 (permalink) |
| Junior Mitglied Registriert seit: 06.09.2011
Beiträge: 38
Abgegebene Danke: 2
Erhielt 5 Danke für 5 Beiträge
| Code: new AsyncTask<Void, Void, Void>(){
public void onPreExecute(){
//create und show ProgressBar
}
@Override
protected Void doInBackground(Void... params) {
//do das was die Progressbar verdecken soll
publishProgress();
return null;
}
protected void onProgressUpdate(Void... voi){
//check und change Color
}
protected void onPostExecute(Void z){
//UI elemente ändern falls nötig und ProgressBar wieder ausblenden
}
}.execute(); ![]() MfG nijoX |
| | |
| | #5 (permalink) |
| Fortgeschrittenes Mitglied Modell: HTC Sensation Registriert seit: 31.08.2011
Beiträge: 390
Abgegebene Danke: 25
Erhielt 59 Danke für 57 Beiträge
|
wie schon gesagt, es hängt nicht am Threading bei mir ... ein Problem ist, daß das neue Drawable, wenn man es setzt, seine Größe nicht kennt und size 0 genommen wird -> ProgressBar verschwindet. nun gibts im Inet Vorschläge, wie man das ändern kann. ich bekomm es dann zwar soweit hin, daß die ProgressBar an sich nicht mehr verschwindet, aber der "inhalt" wir nicht dargestellt. nur wenn ich das gleiche Drawable benutze, wird der Progress weiter fortgesetzt. also wenn ich grünen progressbar habe und den grünen nochmal setze, dann läuft der progress weiter, setze ich aber rot oder blau, ist die progressbar "leer" und man hat nur den grauen hintergrund. link dazu z.b. hier: seekbar - Android ProgressBar.setProgressDrawable only works once? - Stack Overflow hab aber gerade noch einen interessanten link mit verschiedenen vorschlägen gefunden, das muß ich aber erst mal selbst testen: ProgressBar.setProgressDrawable bug - Android Developers | Google Groups |
| | |
| | #6 (permalink) |
| Fortgeschrittenes Mitglied Modell: HTC Sensation Registriert seit: 31.08.2011
Beiträge: 390
Abgegebene Danke: 25
Erhielt 59 Danke für 57 Beiträge
|
ok ich habs hinbekommen, fall es jemand interessiert: Code: LayerDrawable layer = (LayerDrawable)progBar.getProgressDrawable();
Drawable overlay = (Drawable)layer.findDrawableByLayerId(R.id.id_red_progress);
Rect bounds = overlay.getBounds();
overlay = getResources().getDrawable(R.drawable.green_progress);
overlay.setBounds(bounds);
layer.setDrawableByLayerId(R.id.id_red_progress, overlay); |
| | |
| Folgender Benutzer bedankt sich bei Tom299 für diesen Beitrag: | Dreamweaver (26.04.2012) |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Ui Farbe ändern | Xion | Sony Ericsson Xperia Arc Forum | 4 | 12.08.2011 15:47 |
| LED Farbe ändern? | tyson | HTC Desire S Forum | 2 | 02.06.2011 21:50 |
| "Rote" Farbe ändern und lockscreen ändern à la optimus speed? | Bärry | Motorola Defy Forum | 2 | 15.04.2011 02:46 |
| Uhr Farbe ändern? | -Mico- | Motorola Milestone 2 Forum | 2 | 09.01.2011 18:20 |
| Infoleiste - Farbe ändern | Reindl | Root / Hacking / Modding für Motorola Milestone | 76 | 06.02.2010 21:43 |