2016-06-12 2 views
1

Итак, я пытаюсь создать индикатор выполнения достижений в своем приложении. Эти индикаторы прогресса должны показывать свое продвижение после открытия активности. Я знаком с регулярными индикаторами выполнения, в которых вы обновляете свой статус списка и устанавливаетепрогресс на индикатор выполнения, но каким-то образом я не смог выполнить эту задачу. В приведенном ниже коде я попытался создать индикатор выполнения, который заполняется до 30/100, а затем останавливается, как будто «достижение прогресса» равнялось 30. Для удобства понимания я работаю с простыми целыми числами. Текущее поведение даже не близко, поскольку индикатор выполнения просто вращается без какого-либо обновления. Обратите внимание, что прогресс не связан ни с каким другим компонентом, кроме простых целых чисел.Создание бар «achievemenet progress»

Edit: Это поведение я хочу: 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); 
    } 
} 

Планировка:

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

ответ

1

enter image description here

Используйте таймер для подсчета шагов прогресса, например, каждые пол секунды (500 мс). Вот основной таймер java, который вы можете повеселиться, превратившись в AsyncTask для Android! Выполните AsyncTask, и каждые полторы секунды таймер обновит индикатор выполнения.

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

О, это имеет смысл. Я понял код, но не понимаю, где и как я могу назвать этот класс таймера? И я сохраняю свою AsyncTask как есть, кроме части невидимости? –

+0

О, ладно. Поэтому вы говорите, что я удаляю свой код и заменяю его на этот код. И я также должен преобразовать класс TimedProgress в класс AsyncTask и вызвать его в onCreate для выполнения. Правильно? –

+0

новый TimedProgress(); – usajnf

Смежные вопросы