2016-06-12 11 views
1

Also ich versuche, eine Fortschrittsanzeige für Erfolge in meiner Anwendung zu erstellen. Diese Fortschrittsbalken sollten ihre Fortschritte anzeigen, sobald die Aktivität geöffnet wird. Ich bin vertraut mit regelmäßigen Fortschrittsbalken, in denen Sie Ihren Listenstatus aktualisieren und Fortschritt auf der Fortschrittsanzeige einstellen, aber irgendwie konnte ich es nicht schaffen, diese Aufgabe abzuschließen. Im unteren Code habe ich versucht, einen Fortschrittsbalken zu erstellen, der bis zu 30/100 füllt und dann stoppt, als ob der "Leistungsfortschritt" 30 wäre. Zum leichteren Verständnis arbeite ich mit einfachen ganzen Zahlen. Das aktuelle Verhalten ist nicht einmal knapp, da sich der Fortschrittsbalken nur dreht ohne Fortschritts-Update. Beachten Sie, dass sich der Fortschritt nicht auf andere Komponenten als einfache Ganzzahlen bezieht.Erstellen einer Fortschrittsmarke "achievenmenet"

Edit: Dies ist das Verhalten Ich möchte: https://dribbble.com/shots/2758323-Ring-Progress

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_my_points); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    progressBar = (ProgressBar) findViewById(R.id.progressBar); 
    progressBar.setIndeterminate(false); 
    new TimedProgress(); 
} 

class TimedProgress { 
    Timer timer; 

    public TimedProgress() { 
     timer = new Timer(); 
     timer.schedule(new ProgressTask(), 0, 500); 
    } 

    class ProgressTask extends TimerTask { 
     int progress = 0; 
     public void run() { 
      if (progress <30) { 
       updateProgress(progress); 
       progress++; 
      } else { 
       timer.cancel(); 
      } 
     } 
    } 
} 

public void updateProgress(final int progress) { 
    if (null != progressBar) { 
     progressBar.setVisibility(View.VISIBLE); 
     progressBar.setProgress((int) progress); 
    } 
} 

Layout:

<ProgressBar 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/progressBar" 
     android:layout_centerVertical="true" 
     android:layout_alignParentEnd="true"/> 

Antwort

1

enter image description here

Verwenden Sie einen Timer die Fortschritte Schritte zu zählen, z.B. alle 1/2 Sekunde (500 ms). Hier ist ein grundlegender Java-Timer, mit dem Sie Spaß haben können, in eine AsyncTask für Android zu konvertieren! Führen Sie die AsyncTask aus und alle 1/2 Sekunde aktualisiert der Timer den Fortschrittsbalken.

class TimedProgress { 
    Timer timer; 

    public TimedProgress() { 
     timer = new Timer(); 
     timer.schedule(new ProgressTask(), 0, 500); 
    } 

    class ProgressTask extends TimerTask { 
     int progress = 0; 
     public void run() { 
      if (progress <30) { 
       updateProgress(progress); 
       progress++; 
      } else { 
       timer.cancel(); 
      } 
     } 
    } 
} 

public void updateProgress(final int progress) { 
    if (null != progressBar) { 
     progressBar.setVisibility(View.VISIBLE); 
     progressBar.setProgress((int) progress); 
    } 
} 
+0

Oh, das macht Sinn. Ich habe den Code verstanden, verstehe aber nicht, wo und wie ich diese Timer-Klasse nenne? Und behalte ich meine AsyncTask so wie sie ist, außer dem Unsichtbarkeitsteil? –

+0

Oh, okay. Sie sagen also, dass ich meinen Code lösche und ihn durch diesen Code ersetze. Und ich sollte auch TimedProgress-Klasse in AsyncTask-Klasse konvertieren und es in OnCreate aufrufen, um auszuführen. Recht? –

+0

neues TimedProgress(); – usajnf