这是一个android平台的简易倒计时器,可以实现设置时间的倒计时以及时间到后的提醒功能。

android sdk提供的CountdownTimer 类已经实现的倒计时功能,但却没有暂停,继续等功能,在这个类的基础上可以实现一个自己的计时类。

package com.util;

import android.os.Handler;import android.os.Message;//在android自带的CountdownTimer类基础上实现定时功能public abstract class AdvancedCountdownTimer {private static final int MSG_RUN = 1;private final long mCountdownInterval;// 定时间隔,以毫秒计private long mTotalTime;// 定时时间private long mRemainTime;// 剩余时间// 构造函数public AdvancedCountdownTimer(long millisInFuture, long countDownInterval) {mTotalTime = millisInFuture;mCountdownInterval = countDownInterval;mRemainTime = millisInFuture;}// 取消计时public final void cancel() {mHandler.removeMessages(MSG_RUN);}// 重新开始计时public final void resume() {mHandler.sendMessageAtFrontOfQueue(mHandler.obtainMessage(MSG_RUN));}// 暂停计时public final void pause() {mHandler.removeMessages(MSG_RUN);}// 开始计时public synchronized final AdvancedCountdownTimer start() {if (mRemainTime <= 0) {// 计时结束后返回onFinish();return this;}// 设置计时间隔mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_RUN),mCountdownInterval);return this;}public abstract void onTick(long millisUntilFinished, int percent);// 计时中public abstract void onFinish();// 计时结束// 通过handler更新android UI,显示定时时间private Handler mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {synchronized (AdvancedCountdownTimer.this) {if (msg.what == MSG_RUN) {mRemainTime = mRemainTime - mCountdownInterval;if (mRemainTime <= 0) {onFinish();} else if (mRemainTime < mCountdownInterval) {sendMessageDelayed(obtainMessage(MSG_RUN), mRemainTime);} else {onTick(mRemainTime, new Long(100* (mTotalTime - mRemainTime) / mTotalTime).intValue());sendMessageDelayed(obtainMessage(MSG_RUN),mCountdownInterval);}} }}};}

这是一个抽象工具类,在主程序中编写一个类继承它就可以实现相应的计时功能。

package com.timer;import java.io.IOException;import com.util.AdvancedCountdownTimer;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.media.MediaPlayer;import android.media.MediaPlayer.OnCompletionListener;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.EditText;import android.widget.TextView;import android.widget.Button;import android.widget.Toast;public class Timer extends Activity implements OnClickListener {private TextView txt_time = null;//显示剩余时间private EditText edt_hour = null;//定时时间编辑框private EditText edt_minute = null;private EditText edt_second = null;private Button btn_start = null;//各个按钮private Button btn_pause = null;private Button btn_con = null;private Button btn_reset = null;private Button btn_exit = null;private long hour = 0;//时间变量private long minute = 0;private long second = 0;private long time = 0;private MyCount count = null;//定时类对象/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);findViews();setListener();}    //识别各个控件并设置按钮状态private void findViews() {txt_time = (TextView) findViewById(R.id.text);edt_hour = (EditText) findViewById(R.id.hour);edt_minute = (EditText) findViewById(R.id.minute);edt_second = (EditText) findViewById(R.id.second);btn_start = (Button) findViewById(R.id.start);btn_pause = (Button) findViewById(R.id.pause);btn_con = (Button) findViewById(R.id.con);btn_reset = (Button) findViewById(R.id.reset);btn_exit = (Button) findViewById(R.id.exit);btn_pause.setEnabled(false);btn_con.setEnabled(false);}    //绑定监听器private void setListener() {btn_start.setOnClickListener(this);btn_pause.setOnClickListener(this);btn_con.setOnClickListener(this);btn_reset.setOnClickListener(this);btn_exit.setOnClickListener(this);}   //获取设置的时间并判断输入是否为空private boolean setTime() {String strHour = edt_hour.getText().toString();//取控件的值String strMinute = edt_minute.getText().toString();String strSecond = edt_second.getText().toString();if (strHour.equals("") || strMinute.equals("") || strSecond.equals("")) {return false;} else {hour = Long.parseLong(strHour);minute = Long.parseLong(strMinute);second = Long.parseLong(strSecond);time = (hour * 3600 + minute * 60 + second) * 1000;count = new MyCount(time, 1000);return true;}}    //设置监听器@Overridepublic void onClick(View v) {switch (v.getId()) {//点击开始计时按钮case R.id.start:if (setTime() == false) {Toast.makeText(Timer.this, "请输入完整定时时间", Toast.LENGTH_LONG).show();} else {count.start();//开始计时btn_start.setEnabled(false);btn_pause.setEnabled(true);}break;//点击暂停按钮case R.id.pause:count.pause();//暂停btn_pause.setEnabled(false);btn_con.setEnabled(true);break;//点击继续按钮case R.id.con:count.resume();//继续btn_pause.setEnabled(true);btn_con.setEnabled(false);break;//点击重置按钮case R.id.reset:count.cancel();//取消及时,重置界面状态txt_time.setText("");edt_hour.setText("0");edt_hour.setText("0");edt_second.setText("30");btn_pause.setEnabled(false);btn_con.setEnabled(false);btn_start.setEnabled(true);break;//点击退出按钮case R.id.exit:android.os.Process.killProcess(android.os.Process.myPid());//退出break;default:break;}}    //实现计时功能的类class MyCount extends AdvancedCountdownTimer {public MyCount(long millisInFuture, long countDownInterval) {super(millisInFuture, countDownInterval);}@Overridepublic void onFinish() {//媒体对象final MediaPlayer media = MediaPlayer.create(Timer.this, R.raw.alarm);//对话框对象final AlertDialog mydialog = new AlertDialog.Builder(Timer.this).setMessage("时间到!").setPositiveButton("确定", new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which) {media.stop();media.release();btn_pause.setEnabled(false);btn_con.setEnabled(false);btn_start.setEnabled(true);}}).create();mydialog.show();//播放结束后显示对话框txt_time.setText("");try {media.prepare();//准备播放音乐} catch (IllegalStateException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}media.start();//播放音乐media.setOnCompletionListener(new OnCompletionListener() {//播放结束后会话框消失,重置按钮状态@Overridepublic void onCompletion(MediaPlayer mp) {mydialog.hide();btn_pause.setEnabled(false);btn_con.setEnabled(false);btn_start.setEnabled(true);}});}        //更新剩余时间@Overridepublic void onTick(long millisUntilFinished, int percent) {long myhour = (millisUntilFinished / 1000) / 3600;long myminute = ((millisUntilFinished / 1000) - myhour * 3600) / 60;long mysecond = millisUntilFinished / 1000 - myhour * 3600- myminute * 60;txt_time.setText("剩余时间" + myhour + ":" + myminute + ":" + mysecond);}}}

运行效果如下:

初始界面:

计时中:

时间到:

这里我还要说一件事,上次我写的那篇音乐播放器的帖子由于我自身的一些原因,暂时不能将其发表,在此我决定将其删除,以后有时间再来发表。

更多相关文章

  1. android监听返回按钮事件
  2. Android(安卓)获取系统时间
  3. Android(安卓)MotionEvent的getX()和getRawX()方法的区别
  4. Android(安卓)App项目开发步骤小结
  5. android string xliff:g
  6. 几种开发UI界面的方式demo Android
  7. Android进阶之抢购倒计时功能
  8. android方便的自定义Dialog工厂类
  9. Android定时器AlarmManager

随机推荐

  1. 文本处理小工具SED用法
  2. Linux学习之文件系统权限及表示
  3. Linux daemon进程的应用、实现和原理
  4. Linux下Mycat安装配置
  5. 为什么别人一周搞定Linux,而你却做不到
  6. linux下《UNIX环境高级编程》(apue2)源码
  7. 编译linux内核前用make menuconfig设置时
  8. Linux/Unix下ODBC的安装
  9. 为什么Linux不需要磁盘碎片整理?——借以
  10. 使用Swoole加速Laravel(正式环境中)