2016-06-12 3 views
1

私は自分のアプリケーションで成果の進捗バーを作成しようとしています。これらの進行状況バーは、アクティビティが開かれると進行状況を示すはずです。私はプログレスバーのリストのステータスとsetprogressを更新する通常のプログレスバーに精通していますが、何とかこのタスクを完了することができませんでした。下のコードでは、「達成進捗状況」が30だったかのように、30/100までのプログレスバーを作成して停止しました。わかりやすくするために、私は単純な整数で作業しています。プログレスバーが進捗状況の更新なしで回転しているだけなので、現在の動作は近いものではありません。進捗状況は、単純整数以外の他のコンポーネントには関係しないことに注意してください。"achievemenet progress"バーを作成する

編集:これは私が欲しいの動作です: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

例えば、進捗ステップをカウントするタイマーを使って1/2秒ごとに(500ms)。ここでは、Android用のAsyncTaskに変換することができます楽しい基本的なJavaのタイマーです! AsyncTaskを実行し、タイマーが1/2秒ごとにプログレスバーを更新します。

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

関連する問題