2014-10-02 76 views
1

我想在按下一個啓動按鈕時啓動2個倒計時定時器。 當按下啓動,maxTimer設置爲minTimer的價值,他們都倒計數以相同的值。 我該如何分開2?我需要minTimer和maxTimer的倒計時功能。android按鈕啓動2個定時器

package com.xpand.timer; 

import java.util.concurrent.TimeUnit; 

import android.support.v7.app.ActionBarActivity; 
import com.google.android.gms.ads.*; 

import android.annotation.SuppressLint; 
import android.annotation.TargetApi; 
import android.os.Build; 
import android.os.Bundle; 
import android.os.CountDownTimer; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.Window; 
import android.widget.Button; 
import android.widget.TextView; 

@TargetApi(Build.VERSION_CODES.GINGERBREAD) 
@SuppressLint("NewApi") 

public class MainActivity extends ActionBarActivity implements OnClickListener { 

    TextView minTimer, maxTimer, tv_start, tv_stop; 
    Button btn_Timer1, btn_Timer2; 
    int minTid, maxTid; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.activity_main); 


    minTimer = (TextView) findViewById(R.id.minTimer); 
    minTimer.setText("00:00:00"); 
    maxTimer = (TextView) findViewById(R.id.maxTimer); 
    maxTimer.setText("00:00:00"); 
    tv_start = (TextView) findViewById(R.id.tv_start); 
    tv_stop = (TextView) findViewById(R.id.tv_stop); 
    btn_Timer1 = (Button) findViewById(R.id.btn_Timer1); 
    btn_Timer2 = (Button) findViewById(R.id.btn_Timer2); 


    btn_Timer1.setOnClickListener(this); 
    btn_Timer2.setOnClickListener(this); 

    } 

    @TargetApi(Build.VERSION_CODES.GINGERBREAD) 
    @SuppressLint("NewApi") 

    public class CounterClass extends CountDownTimer { 

     public CounterClass(long millisInFuture, long countDownInterval){ 
      super (millisInFuture, countDownInterval); 
     } 
     @SuppressLint({ "NewApi", "DefaultLocale" }) 
     @TargetApi(Build.VERSION_CODES.GINGERBREAD) 

     @Override 
     public void onTick(long millisUntilFinished) { 
      // TODO Auto-generated method stub 
      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))); 
      String hms2 = 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); 
      System.out.println(hms2); 
      minTimer.setText(hms); 
      maxTimer.setText(hms2); 
     } 

     @Override 
     public void onFinish() { 
      // TODO Auto-generated method stub 
      minTimer.setText("Completed"); 
      maxTimer.setText("Completed"); 
     } 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 



    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     switch (v.getId()){ 

     case R.id.btn_Timer1: 
      minTid=10000; 
      maxTid=20000; 
      minTimer.setText("00:00:10"); 
      maxTimer.setText("00:00:20"); 
      break; 

     case R.id.btn_Timer2: 
      minTid=15000; 
      maxTid=30000; 
      minTimer.setText("00:00:15"); 
      maxTimer.setText("00:00:30"); 
      break; 


     } 

     final CounterClass timer = new CounterClass(minTid, 1000); 
     tv_start.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       timer.start(); 
      } 




    }); 
     tv_stop.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       timer.cancel(); 
      } 

     }); 
    } 
} 
+0

如果需要2個不同的倒計時,我建議你創建2 CountDownTimer – 2014-10-02 13:29:53

回答

1

你需要創建2個CounterClass定時器...

final CounterClass timer = new CounterClass(minTid, 1000); 
    final CounterClass timer2 = new CounterClass(maxTid, 1000); 
     tv_start.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       timer.start(); 
       timer2.start() 
      } 




    }); 
     tv_stop.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       timer.cancel(); 
       timer2.cancel() 

      } 

     }); 
    } 
+0

謝謝你 - 它現在:-) – 2014-10-03 07:10:21

+0

好,真好!嘿嘿:D – Rikkert09 2014-10-03 08:54:38