Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf Android-Hilfe.de!
Zurück   Android-Hilfe.de > Android Developer > Android App Entwicklung

Probleme Progressbar Farbe ändern

Das Thema "Probleme Progressbar Farbe ändern" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 05.10.2011, 13:18   #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
Frage Probleme Progressbar Farbe ändern

Hallo,

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>
red_progress.xml
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>
green_progress.xml und blue_progress.xml sind fast identisch.


in der onCreate-Methode:
Code:
progBar.setProgressDrawable(getResources().getDrawable(R.drawable.red_progress));
und mein Update-Versuch sieht so aus (habs mit runOnUiThread und ohne versucht, mit und ohne invalidate(), doch es klappt nie ...
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();
                    }
                });
                
            }
        }
    }
jemand eine Idee woran es liegen könnte?
Tom299 ist offline   Mit Zitat antworten
Alt 05.10.2011, 13:37   #2 (permalink)
Junior Mitglied

Registriert seit: 06.09.2011
Beiträge: 38
Abgegebene Danke: 2
Erhielt 5 Danke für 5 Beiträge
Standard AW: Probleme Progressbar Farbe ändern

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
nijoX ist offline   Mit Zitat antworten
Alt 05.10.2011, 14:05   #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
Standard AW: Probleme Progressbar Farbe ändern

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();
            }
        });
also eigentlich liegt mein aufruf von checkProgressBarColor() ja im UIThread ...
Tom299 ist offline   Mit Zitat antworten
Alt 07.10.2011, 08:22   #4 (permalink)
Junior Mitglied

Registriert seit: 06.09.2011
Beiträge: 38
Abgegebene Danke: 2
Erhielt 5 Danke für 5 Beiträge
Standard AW: Probleme Progressbar Farbe ändern

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();
ob <Void, Void, Void> für dich passt oder ob du noch parameter brauchst weiß ich nicht hab es aber mal nachgebaut so in etwa und das gleiche Problem gehabt, das die Bar beim Layout ändern verschwindet. Mit AsyncTask gehts

MfG nijoX
nijoX ist offline   Mit Zitat antworten
Alt 07.10.2011, 09:34   #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
Standard AW: Probleme Progressbar Farbe ändern

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
Tom299 ist offline   Mit Zitat antworten
Alt 07.10.2011, 11:35   #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
Standard AW: Probleme Progressbar Farbe ändern

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);
Tom299 ist offline   Mit Zitat antworten
Folgender Benutzer bedankt sich bei Tom299 für diesen Beitrag:
Dreamweaver (26.04.2012)
Antwort

Stichworte
-

Themen-Optionen
Ansicht


Ähnliche Themen

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




Du liest gerade: "Probleme Progressbar Farbe ändern" unter "Android App Entwicklung" auf Android-Hilfe.de.


Powered by vBulletin®
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
© Android-Hilfe.de 2012 - All rights reserved.