标签:
1.activity_main.xml:
1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" > 5 <Button 6 android:id="@+id/btn_time" 7 android:layout_width="wrap_content" 8 android:layout_height="wrap_content" 9 android:text="获取验证码" /> 10 </RelativeLayout>
2.MainActivity.java:
1 public class MainActivity extends Activity { 2 private Button mTimeButton; 3 private TimeCount time; 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 requestWindowFeature(Window.FEATURE_NO_TITLE); 8 setContentView(R.layout.activity_main); 9 mTimeButton = (Button) findViewById(R.id.btn_time); 10 time = new TimeCount(60000, 1000); 11 mTimeButton.setOnClickListener(new OnClickListener() { 12 @Override 13 public void onClick(View v) { 14 time.start(); 15 } 16 }); 17 } 18 /** 19 * 继承倒计时类 20 * @author 21 */ 22 class TimeCount extends CountDownTimer { 23 /** 24 * 构造方法 25 * @param millisInFuture 26 * 总倒计时长 毫秒 27 * @param countDownInterval 28 * 倒计时间隔 29 */ 30 public TimeCount(long millisInFuture, long countDownInterval) { 31 super(millisInFuture, countDownInterval); 32 } 33 @Override 34 public void onTick(long millisUntilFinished) { 35 mTimeButton.setEnabled(false); 36 mTimeButton.setText(millisUntilFinished / 1000 + "秒");//millisUntilFinished 表示当前已完成时间 37 } 38 @Override 39 public void onFinish() {// 计时结束 40 mTimeButton.setEnabled(true); 41 mTimeButton.setText("重新获取"); 42 } 43 } 44 }
这里用到了TimeCount类,初始化时传入两个参数millisInFuture和countDownInterval,millisInFuture表示从开始调用start()
到倒计时完成并onFinish()
方法被调用的毫秒数,即一个周期;countDownInterval表示接收onTick(long)回调的间隔时间。本实例中采用60秒周期,1秒间隔。TimeCount 继承自CountDownTimer 类,覆写了里面的onTick方法,此方法是在计数过程中执行,借用setEnabled方法,将button变成不可点击的状态,同时更新button上显示的时间。覆写的onFinish方法,在计时结束后触发,将button设置成可点击的状态,并将button上的文字变成“重新获取”。
标签:
原文地址:http://www.cnblogs.com/littlewriter/p/5757941.html