2014-07-20 8 views
0

간격 카운트 다운 타이머 앱을 만들려고합니다. 저는 이미 3 분을 카운트하는 정상적인 타이머를 만들었습니다. 물론 시간을 변경할 수 있습니다.하지만 20 초 카운트 다운 카운트 다운 타이머를 갖고 싶습니다. 그리고 10 초가 지나면 더 많이 시작해야합니다. 나는 진지하게 그것을 만드는 법을 모른다. 그래서 나는 도움이 필요한 것이다. 누군가가 나를 고칠 수 있다면, 나는 매우 감사 할 것이다.간격 카운트 다운 타이머가 작동하지 않습니다.

미리 감사드립니다.

여기 내 코드, 그것은 체크 아웃 :

import android.annotation.SuppressLint; 
import android.annotation.TargetApi; 
import android.app.Activity; 
import android.os.Build; 
import android.os.Bundle; 
import android.os.CountDownTimer; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 
import java.util.concurrent.TimeUnit; 


@TargetApi(Build.VERSION_CODES.GINGERBREAD) 
@SuppressLint("NewApi") 
public class MainActivity extends Activity { 
    Button btnStart, btnStop; 
    TextView textViewTime; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     btnStart = (Button)findViewById(R.id.btnStart); 
     btnStop = (Button)findViewById(R.id.btnStop); 
     textViewTime = (TextView)findViewById(R.id.textViewTime); 
     textViewTime.setText("00:03:00"); 
     final CounterClass timer = new CounterClass(180000,1000); 
     btnStart.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       timer.start(); 
      } 
     }); 
     btnStop.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       timer.cancel(); 
      } 
     }); 
    } 
    @TargetApi(Build.VERSION_CODES.GINGERBREAD) 
    @SuppressLint("NewApi") 
    public class CounterClass extends CountDownTimer { 
     public CounterClass(long millisInFuture, long countDownInterval) { 
      super(millisInFuture, countDownInterval); 
     } 
     @Override 
     public void onFinish() { 
      textViewTime.setText("Completed."); 
     } 
     @SuppressLint("NewApi") 
     @TargetApi(Build.VERSION_CODES.GINGERBREAD) 
     @Override 
     public void onTick(long millisUntilFinished) { 
      long millis = millisUntilFinished; 
      String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis), 
        TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)), 
        TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))); 
      System.out.println(hms); 
      textViewTime.setText(hms); 
     } 
    } 
} 

을 다시 즉시 00:00에 도달으로, 10 초 이상 자동 카운트 다운한다.

답변

0

당신이해야 할 일은 Threads이라고 생각합니다. 어떻게 작동하는지 예를 들어 보겠습니다. 귀하의 방법에이 스레드를 추가하십시오 :

Thread thread = new Thread(new Runnable(){ 
@Override // only add this if required 
public void run(){ 
     try{ 
       // code here 
       Thread.sleep(AmountOfTimeInMilliSeconds); 
     catch(Exception e){ 
       e.printStackTrace(); 
     } 
}); 
thread.start(); 

반복하려는 경우, while (true) 문을 추가하면 루프가 계속됩니다.

+0

정확히 어디에 붙여 넣어야할지 알려주실 수 있습니까? :) –

+0

클래스 외부에서 메서드 외부에 스레드를 만듭니다. 그럼 언제든지 (onClickEvent) 시작하려면이 thread.start(); 이 thread.stop을 넣지 않으려 고 할 때. 위의 모든 것을 붙여 넣으십시오 (마지막 thread.start() 제외). 그리고 클래스에 붙여 넣으십시오. – DaBaws

+0

당신은 onTick Method를 의미합니까? –

관련 문제