Wagied Davids1.14.1 问题你打算开发一个简单的倒计时定时器,该程序将倒数给定的秒数,直到计数为0。1.14.2 解决方案Android自带一个用于构建CountDownTimer的类。该类很易用、高效并且能够正常工作(这是不言而喻的!)。1.14.3 讨论提供倒计时定时器的步骤如下:1 . 创建CountDownTimer的子类。该类的构造器有两个参数:CountDownTimer(long millisInFuture, long countDownInterval)。第一个参数是从现在开始到计时结束相隔的毫秒数,计时结束时将调用子类的onFinish()方法。第二个参数代表你希望定时器仍然运行时发出通知的频率,以毫秒表示,通常用于更新进度监视器或者与用户的通信,每经过该参数指定的毫秒数,将调用子类的onTick()方法。2 . 覆盖onTick() 和onFinish()方法。3 . 在Android Activity中实例化新的实例。4 . 调用新创建实例的start()方法!这个倒计时定时器程序由XML 布局(如例1-4所示)和一些Java代码(如例1-5所示)组成。运行效果如图1-38所示,但是显示的时间可能不同。
例1-4:main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:id="@+id/button" android:text="Start" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <TableLayout android:padding="10dip" android:layout_gravity="center" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TableRow> <TextView android:id="@+id/timer" android:text="Time: " android:paddingRight="10dip" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/timeElapsed" android:text="Time elapsed: " android:paddingRight="10dip" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </TableRow> </TableLayout> </LinearLayout>例1-5:Main.java
package com.examples; import android.app.Activity; 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; public class Main extends Activity implements OnClickListener { private MalibuCountDownTimer countDownTimer; private long timeElapsed; private boolean timerHasStarted = false; private Button startB; private TextView text; private TextView timeElapsedView; private final long startTime = 50 * 1000; private final long interval = 1 * 1000; /** 在活动第一次创建时调用 */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); startB = (Button) this.findViewById(R.id.button); startB.setOnClickListener(this); text = (TextView) this.findViewById(R.id.timer); timeElapsedView = (TextView) this.findViewById(R.id.timeElapsed); countDownTimer = new MalibuCountDownTimer(startTime, interval); text.setText(text.getText() + String.valueOf(startTime)); } @Override public void onClick(View v) { if (!timerHasStarted) { countDownTimer.start(); timerHasStarted = true; startB.setText("Start"); } else { countDownTimer.cancel(); timerHasStarted = false; startB.setText("RESET"); } } // CountDownTimer class public class MalibuCountDownTimer extends CountDownTimer { public MalibuCountDownTimer(long startTime, long interval) { super(startTime, interval); } @Override public void onFinish() { text.setText("Time's up!"); timeElapsedView.setText("Time Elapsed: " + String.valueOf(startTime)); } @Override public void onTick(long millisUntilFinished) { text.setText("Time remain:" + millisUntilFinished); timeElapsed = startTime - millisUntilFinished; timeElapsedView.setText("Time Elapsed: " + String.valueOf(timeElapsed)); } } }1.14.4 源代码下载URL定时器示例的源代码在Android Cookbook存储库中的CountDownTimerExample子目录(参见前言中的“代码示例的获取和使用”)。
相关资源:七夕情人节表白HTML源码(两款)