Autore Topic: ProgressBar animata non si ferma in una determinato momento  (Letto 546 volte)

Offline MasterChief

  • Utente junior
  • **
  • Post: 83
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    OnePlus X
  • Sistema operativo:
    windows 10
ProgressBar animata non si ferma in una determinato momento
« il: 27 Marzo 2014, 16:59:14 CET »
0
Ciao ragazzi, ho iniziato da poco l'uso dei thread in android, e ho fatto un thread che "anima" il riempimento e svuotamento di una progressBar. Ho un bottone che deve gestire degli stati che cambiano ogni volta che lo si preme; ad ogni sua pressione cambia il valore di una variabile (set_mst) e se il suo valore è 3 allora deve stoppare il thread e svuotare completamente la progressBar. Il problema è che mentre la barra si sta "riempiendo" diventa come la foto in allegato con un 1/2% di riempimento e lampeggiante come se tornasse a 0 e poi sempre a 1 continuamente; però se si sta "svuotando" non si sono problemi, la barra rimane a 0 finché non riparte il thread.

Ecco il codice che uso per il thread
Codice (Java): [Seleziona]
th_chargeBar = new Thread() {
         @Override
         public void run() {
            do {
               if (progressVal == 0) {
                  while (progressVal < 100) {
                     if ( (progressVal > 0 && progressVal < 100) && set_mst==3){//if per lo stop thread
                        progressVal = 0;
                        chargeBar.setProgress(progressVal);
                        th_chargeBar.interrupt();
                     }else {
                        progressVal += 1;
                        handler.post(new Runnable() {
                           public void run() {
                              chargeBar.setProgress(progressVal);
                           }
                        });
                        try {
                           Thread.sleep(50);
                        } catch (InterruptedException e) {
                           e.printStackTrace();
                        }//fine try-catch
                     }//else per controllo di stop
                  }//fine while incremento / fine if CARICAMENTO
               } else if (progressVal == 100) {
                  while (progressVal > 0) {
                     if ( (progressVal >= 0 && progressVal <= 100) && set_mst==3){//if per lo stop thread
                        progressVal = 0;
                        chargeBar.setProgress(progressVal);
                        th_chargeBar.interrupt();
                     }else {
                        progressVal -= 1;
                        handler.post(new Runnable() {
                           public void run() {
                              chargeBar.setProgress(progressVal);
                           }
                        });
                        try {
                           Thread.sleep(10);
                        } catch (InterruptedException e) {
                           e.printStackTrace();
                        }//fine try-catch
                     }//fine else controllo stop
                  }//fine while decremento
               }//fine if SCARICAMENTO
            } while ( set_mst != 3 );
         }//fine run()
      };
      th_chargeBar.start();
Sapete come potrei risolvere il problema che si vede dalla foto?
Grazie mille in anticipo  :-)

Offline MasterChief

  • Utente junior
  • **
  • Post: 83
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    OnePlus X
  • Sistema operativo:
    windows 10
Re:ProgressBar animata non si ferma in una determinato momento
« Risposta #1 il: 23 Aprile 2014, 18:01:25 CEST »
0
Ciao a tutti, dato che il mio vecchio post è stato letto almeno 60 volte ho pensato di condividere la mia soluzione in caso di bisogno in futuro per altri utenti  :-) come potete vedere avevo la progress bar (gestita da un thread) che si caricava/scaricava, ma avevo bisogno di gestire la pausa (con svuotamento totale in qualsiasi istante)... finora mai funzionante. Ora però trovato la soluzione ed eccola qui... in pratica ho aggiunto un try-catch nel seguente if
Codice (Java): [Seleziona]
if ((progressVal > 0 && progressVal < 100) && set_mst == 3)
codice del try-catch
Codice (Java): [Seleziona]
try {
                             progressVal = 0;
                             chargeBar.setProgress(progressVal);
                             th_chargeBar.join();
                         } catch (InterruptedException e) {
                             e.printStackTrace();
                         }

dunque il codice funzionante e definitivo è questo
Codice (Java): [Seleziona]
th_chargeBar = new Thread() {
         @Override
         public void run() {
            do {
               if (progressVal == 0) {
                  while (progressVal < 100) {
                     if ((progressVal > 0 && progressVal < 100) && set_mst == 3) {
                         try {
                             progressVal = 0;
                             chargeBar.setProgress(progressVal);
                             th_chargeBar.join();
                         } catch (InterruptedException e) {
                             e.printStackTrace();
                         }
                     } else {
                        progressVal += 1;
                        handler.post(new Runnable() {
                           public void run() {
                              chargeBar.setProgress(progressVal);
                           }
                        });
                        try {
                           Thread.sleep(50);
                        } catch (InterruptedException e) {
                           e.printStackTrace();
                        }//fine try-catch
                     }//else per controllo di stop
                  }//fine while incremento / fine if CARICAMENTO
               } else if (progressVal == 100) {
                  while (progressVal > 0) {
                     if ((progressVal >= 0 && progressVal <= 100) && set_mst == 3) {
                         try {
                             progressVal = 0;
                             chargeBar.setProgress(progressVal);
                             th_chargeBar.join();
                         } catch (InterruptedException e) {
                             e.printStackTrace();
                         }
                     } else {
                        progressVal -= 1;
                        handler.post(new Runnable() {
                           public void run() {
                              chargeBar.setProgress(progressVal);
                           }
                        });
                        try {
                           Thread.sleep(10);
                        } catch (InterruptedException e) {
                           e.printStackTrace();
                        }//fine try-catch
                     }//fine else controllo stop
                  }//fine while decremento
               }//fine if SCARICAMENTO
            } while (set_mst != 3);
         }//fine run()
      };
      th_chargeBar.start();

Spero possa tornare utile a qualcuno.. un saluto a tutti   :-)

iClaude

  • Visitatore
Re:ProgressBar animata non si ferma in una determinato momento
« Risposta #2 il: 23 Aprile 2014, 22:03:52 CEST »
0
Ciao, se può interessare esiste un modo molto più semplice per animare una ProgressBar: basta usare un ObjectAnimator: http://androidtechnicalblog.blogspot.it/2014/04/animating-progressbar-to-specific-value.html

Offline MasterChief

  • Utente junior
  • **
  • Post: 83
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    OnePlus X
  • Sistema operativo:
    windows 10
Re:ProgressBar animata non si ferma in una determinato momento
« Risposta #3 il: 23 Aprile 2014, 22:14:16 CEST »
0
È decisamente più semplice  :-) appena posso proverò come mostra il link, grazie mille  :-)