本文为大家演示了如何使用Chronometer控件实现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(安卓)ImageView实现上一页,下一页图片切换
  2. 安卓第三天---ViewPager控件实现滑动切换图片
  3. Android使用FFmpeg(三)--ffmpeg实现视频播放
  4. [android] PhoneGap 在 android 下的实现原理
  5. Animator记录一次属性动画实现的逐渐出现和逐渐消失的动画
  6. Android(安卓)kotlin上传头像实现
  7. Android之UI学习篇七:ImageView实现适屏和裁剪图片的功能
  8. Android基于PinnedSectionListView实现联系人通讯录
  9. Android实现九宫格

随机推荐

  1. Android的ArrayAdapter
  2. Android(安卓)NDK之----- C调用Java [Get
  3. docker入门到进阶一
  4. 登录表单和iframe后台架构
  5. docker入门到进阶四
  6. 原生购物车 Vue 改写
  7. docker入门到进阶三
  8. docker入门到进阶二
  9. OpenStack部署
  10. 使用PHPExcel导出excell,出现身份证用科学