本文为大家演示了如何使用Chronometer控件实现Android计时器的实例。

先贴上最终的实现效果图:

Android炫酷计时器

Android炫酷计时器-时间到的提示

Android计时器实现思路

使用Chronometer控件实现计器的操作。通过设置setBase(long base)来设置初始时间,然后为其添加一个 setOnChronometerTickListener(Chronometer.OnChronometerTickListener l)事件来判断时间是否到了,然后再调用其stop()方法实现停止计时。

Android计时器实现代码

main.xml:

XML/HTML代码
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:background="@drawable/back"
  6. android:gravity="center"
  7. android:orientation="vertical">
  8. <LinearLayout
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. android:layout_margin="10dip"
  12. android:orientation="horizontal">
  13. <TextView
  14. android:layout_width="fill_parent"
  15. android:layout_height="wrap_content"
  16. android:layout_weight="4"
  17. android:gravity="center"
  18. android:text="设置时间:"/>
  19. <EditText
  20. android:id="@+id/edt_settime"
  21. android:layout_width="fill_parent"
  22. android:layout_height="wrap_content"
  23. android:layout_weight="1"
  24. android:inputType="number"/>
  25. </LinearLayout>
  26. <Chronometer
  27. android:id="@+id/chronometer"
  28. android:layout_width="fill_parent"
  29. android:layout_height="wrap_content"
  30. android:gravity="center"
  31. android:textColor="#ff0000"
  32. android:textSize="60dip"/>
  33. <LinearLayout
  34. android:layout_width="fill_parent"
  35. android:layout_height="wrap_content"
  36. android:layout_margin="10dip"
  37. android:orientation="horizontal">
  38. <Button
  39. android:id="@+id/btnStart"
  40. android:layout_width="fill_parent"
  41. android:layout_height="wrap_content"
  42. android:layout_weight="1"
  43. android:text="开始记时"/>
  44. <Button
  45. android:id="@+id/btnStop"
  46. android:layout_width="fill_parent"
  47. android:layout_height="wrap_content"
  48. android:layout_weight="1"
  49. android:text="停止记时"/>
  50. <Button
  51. android:id="@+id/btnReset"
  52. android:layout_width="fill_parent"
  53. android:layout_height="wrap_content"
  54. android:layout_weight="1"
  55. android:text="重置"/>
  56. </LinearLayout>
  57. </LinearLayout>

Activity代码:

Java代码
  1. packagecom.jiahui.chronometer;
  2. importandroid.app.Activity;
  3. importandroid.app.AlertDialog;
  4. importandroid.app.Dialog;
  5. importandroid.content.DialogInterface;
  6. importandroid.os.Bundle;
  7. importandroid.os.SystemClock;
  8. importandroid.text.format.Time;
  9. importandroid.view.View;
  10. importandroid.widget.Button;
  11. importandroid.widget.Chronometer;
  12. importandroid.widget.EditText;
  13. publicclassChronometerDemoActivityextendsActivity{
  14. privateintstartTime=0;
  15. publicvoidonCreate(BundlesavedInstanceState){
  16. super.onCreate(savedInstanceState);
  17. setContentView(R.layout.main);
  18. finalChronometerchronometer=(Chronometer)findViewById(R.id.chronometer);
  19. ButtonbtnStart=(Button)findViewById(R.id.btnStart);
  20. ButtonbtnStop=(Button)findViewById(R.id.btnStop);
  21. ButtonbtnRest=(Button)findViewById(R.id.btnReset);
  22. finalEditTextedtSetTime=(EditText)findViewById(R.id.edt_settime);
  23. btnStart.setOnClickListener(newView.OnClickListener(){
  24. @Override
  25. publicvoidonClick(Viewv){
  26. System.out.println("--开始记时---");
  27. Stringss=edtSetTime.getText().toString();
  28. if(!(ss.equals("")&&ss!=null)){
  29. startTime=Integer.parseInt(edtSetTime.getText()
  30. .toString());
  31. }
  32. //设置开始讲时时间
  33. chronometer.setBase(SystemClock.elapsedRealtime());
  34. //开始记时
  35. chronometer.start();
  36. }
  37. });
  38. btnStop.setOnClickListener(newView.OnClickListener(){
  39. @Override
  40. publicvoidonClick(Viewv){
  41. //停止
  42. chronometer.stop();
  43. }
  44. });
  45. //重置
  46. btnRest.setOnClickListener(newView.OnClickListener(){
  47. @Override
  48. publicvoidonClick(Viewv){
  49. chronometer.setBase(SystemClock.elapsedRealtime());
  50. }
  51. });
  52. chronometer
  53. .setOnChronometerTickListener(newChronometer.OnChronometerTickListener(){
  54. @Override
  55. publicvoidonChronometerTick(Chronometerchronometer){
  56. //如果开始计时到现在超过了startime秒
  57. if(SystemClock.elapsedRealtime()
  58. -chronometer.getBase()>startTime*1000){
  59. chronometer.stop();
  60. //给用户提示
  61. showDialog();
  62. }
  63. }
  64. });
  65. }
  66. protectedvoidshowDialog(){
  67. AlertDialog.Builderbuilder=newAlertDialog.Builder(this);
  68. builder.setIcon(R.drawable.eb28d25);
  69. builder.setTitle("警告").setMessage("时间到")
  70. .setPositiveButton("确定",newDialogInterface.OnClickListener(){
  71. @Override
  72. publicvoidonClick(DialogInterfacedialog,intwhich){
  73. }
  74. });
  75. AlertDialogdialog=builder.create();
  76. dialog.show();
  77. }
  78. }

更多相关文章

  1. Android 日志系统logcat内核代码分析
  2. 编写android jni代码时遇到的问题
  3. Android 代码自动提示功能
  4. android两种方式实现发送短信的功能代码
  5. 原始Android的目标机代码结构
  6. 在Ubuntu上下载、编译和安装Android最新内核源代码(Linux Kernel)
  7. Android如何获取APP启动时间
  8. 第一行代码笔记1
  9. Android中的网络时间同步

随机推荐

  1. 安卓-编译过程简述
  2. Android多媒体学习一:Android中Image的简
  3. Android:实现TabWidget选项卡按钮在屏幕下
  4. Android高手进阶教程(三)之----Android(
  5. Android与后端(javaweb)数据交互,包含文件(流
  6. Rootzwiki 采访 CM 创始人 Steve Kondik
  7. Android(安卓)系统基础
  8. Android用户界面设计:基本按钮
  9. 一个Android登陆/注册XML布局文件代码
  10. Android(安卓)res/raw文件以及raw与res/a