Autore Topic: ProgressBar DecimalFormat  (Letto 1581 volte)

Offline JCC

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
ProgressBar DecimalFormat
« il: 12 Dicembre 2013, 22:30:56 CET »
0
La ProgressBar non supporta valori percentuali con la virgola.

Esiste un modo per aggirare questa cosa e visualizzare i valori con la virgola??
ho provato ad utilizzare DecimaFormat ma ovviamente non và
Codice (Java): [Seleziona]
 DecimalFormat decimalFormat = new DecimalFormat("0.#");
String perc = decimalFormat.format(value );  
come posso fare??
questa è il run della mia ProgressBar
Codice (Java): [Seleziona]
new Thread(new Runnable() {
int progressStatus = 0;
Handler handler = new Handler();
public void run() {
while (progressStatus < progresso) {
progressStatus += 1;
// Update the progress bar and display the current value
handler.post(new Runnable() {
public void run() {
mProgress.setProgress(progressStatus);
tvPercentuale.setText(progressStatus+"%");

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:ProgressBar DecimalFormat
« Risposta #1 il: 13 Dicembre 2013, 06:27:34 CET »
0
Primo approccio molto semplice: non ti serve veramente che la progressbar supporti numeri decimali, perchè dal punto di vista grafico la differenza tra 40% e 40.1% è inapprezzabile (la barra della progress è sostanzialmente identica nei due casi). Però capisco che in una TextView sia significativo avere il numero vero.

Quindi potresti usare un numero con la virgola per la TextView e castarlo a int per la progress.

In pseudo-codice:
Codice (Java): [Seleziona]
float progressStatus = 40.1;
mProgress.setProgress((int)progressStatus);
tvPercentuale.setText(progressStatus+"%");


Se per assurdo ti serve assolutamente la precisione grafica di una percentuale con una cifra decimale nella progress bar, allora basta cambiare scala moltiplicando tutto per 10. Fai in modo che la progressBar vada da 0 a 1000, considerando che 1000 corrisponde al 100% e 401 a 40.1%.

In pseudo-codice:
Codice (Java): [Seleziona]
int progressStatus = 401;
mProgress.setProgress(progressStatus);
float progressFloat = (float)progressStatus/10;
tvPercentuale.setText(progressFloat +"%");
[/code]


NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline JCC

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
Re:ProgressBar DecimalFormat
« Risposta #2 il: 13 Dicembre 2013, 18:17:48 CET »
0
Dunque, ottengo il valore da calcolo percentuale
Codice (Java): [Seleziona]
double value = Double.valueOf(dato);
value = numero_a / numero_b *100;

e lo converto in float per la ProgressBar.
Codice (Java): [Seleziona]
final float numero_float = (float) value;però anche così mi esce un valore arrotondato e non con la virgola.

Codice (Java): [Seleziona]
// inizio progresso
new Thread(new Runnable() {
float progressStatus = 0;
                                                       
        Handler handler = new Handler();
            public void run() {
        while (progressStatus < numero_float) {
        progressStatus += 1;
// Update the progress bar and display the current value
        handler.post(new Runnable() {
                public void run() {
                tvPercentuale.setText(progressStatus+"%");
                mProgress.setProgress((int)progressStatus);

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:ProgressBar DecimalFormat
« Risposta #3 il: 13 Dicembre 2013, 18:41:48 CET »
0
Non ho ben capito cosa intendi. La parte di codice sopra sembra non legata alla parte sotto.

E comunque i due approcci che avevo suggerito sono alternativi, non da usare insieme.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline JCC

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
Re:ProgressBar DecimalFormat
« Risposta #4 il: 13 Dicembre 2013, 18:56:16 CET »
0
si si so che sono alternativi, tutto il mio codice è inserito nel metodo getView.

Ho fatto il cast per la ProgressBar ma, nella TextView viene visualizzata la percentuale arrotondata per eccesso o per difetto e non con il calcolo preciso, cioè con la virgola.
Forse non supporta i decimali???
Codice (Java): [Seleziona]
double value = Double.valueOf(dato);
value = numero_a / numero_b *100;
final float numero_float = (float) value;
// inizio progresso
new Thread(new Runnable() {
         float progressStatus = 0;
                Handler handler = new Handler();
public void run() {
        while (progressStatus < numero_float) {
                progressStatus += 1;
// Update the progress bar and display the current value
        handler.post(new Runnable() {
public void run() {
                tvPercentuale.setText(progressStatus+"%");
                mProgress.setProgress((int)progressStatus);
                                                               
« Ultima modifica: 16 Dicembre 2013, 12:44:06 CET da GenG »