2015-02-24 63 views
0

我在我的應用程序中有一個CountDownTimer。我正在爲我的學校項目開發一款遊戲。而我在如何自動恢復我的倒計時器方面遇到困難。AutoResume CountDownTimer

所以這是我多麼希望我的countdowntimer做: 點擊imageview的觸發countdowntimer開始(工作)>單擊imageview的停止/暫停countdowntimer> autoresume countdowntimer 10秒後(我的大問題T_T)。

我需要一個autoresume,因爲我正在開發一款遊戲,那麼,通常這是一款遊戲提供的功能,我認爲呢?在我使用的代碼上,點擊暫停圖像查看後,計時器暫停。但是當我再次點擊觸發開始的圖像按鈕時,它會回到59,而不是當我點擊暫停時的時間。

基本上,這是我的第一個應用程序。我現在正在使用Android Studio(我之前使用Eclipse Juno)。我非常需要這些幫助。 TIA :)

public class TimeAttack extends Activity { 
 

 
\t TextView timer; 
 
\t 
 
\t private CountDownTimer countDownTimer; 
 
\t private boolean timeHasStarted = false; 
 
    
 
\t @Override 
 
    protected void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     
 
     setContentView(R.layout.time_attack); 
 
     
 
    
 
\t \t timer = (TextView) this.findViewById(R.id.timer); 
 
\t \t timer.setText("00:01:00"); 
 
\t \t countDownTimer = new MyCountDownTimer(60000,1000); 
 
\t \t 
 
\t \t \t \t 
 
\t \t blizzard.setOnClickListener(new View.OnClickListener() { 
 
\t \t \t 
 
\t \t \t @Override 
 
\t \t \t public void onClick(View v) { 
 
\t \t \t \t 
 
\t \t \t // \t this button should pause the time, and its working YAY! 
 
\t \t \t \t countDownTimer.cancel(); 
 
\t \t \t \t \t timeHasStarted = false; \t 
 
\t \t \t \t 
 
\t \t \t } 
 
\t \t }); 
 
\t 
 
\t \t //CustomClickListener 
 
\t \t OnClickListener myCommoClickListner = new OnClickListener(){ 
 

 
\t \t \t @Override 
 
\t \t \t public void onClick(View arg0) { 
 

 
//if an imagebutton is clicked, it will trigger the countdowntimer to start its countdown 
 
\t \t \t \t \t if (!timeHasStarted) { 
 
     \t \t \t \t countDownTimer.start(); 
 
     \t \t \t \t timeHasStarted = true; 
 
     \t \t \t \t \t } 
 
       
 
       } 
 

 

 

 
    //COUNTDOWNTIMER 
 
    @TargetApi(Build.VERSION_CODES.GINGERBREAD) @SuppressLint("NewApi") public class MyCountDownTimer extends CountDownTimer{ 
 
\t \t public MyCountDownTimer(long millisInFuture, long countDownInterval){ 
 
\t \t \t super(millisInFuture, countDownInterval); 
 
\t \t } 
 

 
\t \t @TargetApi(Build.VERSION_CODES.GINGERBREAD) @SuppressLint("NewApi") @Override 
 
\t \t public void onTick(long millisUntilFinished) { 
 
\t \t \t // TODO Auto-generated method stub 
 
\t \t \t 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); 
 
      timer.setText(hms); 
 
\t \t \t 
 
\t \t } 
 

 
\t \t @Override 
 
\t \t public void onFinish() { 
 
\t \t \t // TODO Auto-generated method stub 
 
\t \t \t timer.setText("Time's Up!"); 
 
\t \t }

回答

1

有不同的方法來做到這一點。

  1. 您可以在UI線程中使用計時器本身。
  2. 你可以在單獨的線程中使用定時器(這是一個很好的做法)。它的東西就像。

    線程定時器=新的Thread(){ 公共無效的run(){ 嘗試 { 睡眠(10000); (InterruptedException e) { e.printStackTrace(); (!timeHasStarted){ countDownTimer.start(); timeHasStarted = true; } } }; timer.start();

  3. 使用Handler來完成這項工作。代碼如下

    new Handler().postDelayed(new Runnable() { 
    
        /* 
        * Showing splash screen with a timer. This will be useful when you 
        * want to show case your app logo/company 
        */ 
    
        @Override 
        public void run() { 
         // This method will be executed once the timer is over 
         // Start your app main activity 
         if (!timeHasStarted) { 
            countDownTimer.start(); 
            timeHasStarted = true; 
        } 
    }, 10000);     //10 seconds 
    

很抱歉的格式,但我認爲你可以管理。

+0

我應該在哪裏放這段代碼?我很抱歉,這是我的第一個應用程序,我並不擅長編碼。 @ user3735182 – 2015-02-24 07:00:53

+1

** blizzard.setOnClickListener()的** onClick()**方法** – rohanpro 2015-02-24 09:40:14

+0

嗨,先生/女士,請問我應該在哪裏放這些代碼? (2和3):) – 2015-02-24 12:52:03