Android实现简单计时器功能

本文实例为大家分享了Android实现简单计时器的具体代码,供大家参考,具体内容如下

布局

在res/layout 下进行布局

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context=".MainActivity">

 <LinearLayout
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent" tools:layout_editor_absoluteY="0dp"
  tools:layout_editor_absoluteX="0dp">
 <TextView
  android:text="00:00:00"
  android:textSize="60sp"
  android:gravity="center"
  android:layout_width="match_parent"
  android:layout_height="wrap_content" android:id="@+id/timeView"/>
 <Button
  android:text="start"
  android:onClick="onClickStart"
  android:layout_width="match_parent"
  android:layout_height="wrap_content" android:id="@+id/start"/>
 <Button
  android:text="stop"
  android:onClick="onClickStop"
  android:layout_width="match_parent"
  android:layout_height="wrap_content" android:id="@+id/stop"/>
 <Button
  android:text="reset"
  android:onClick="onClickReset"
  android:layout_width="match_parent"
  android:layout_height="wrap_content" android:id="@+id/reset"/>
 </LinearLayout>

</android.support.constraint.ConstraintLayout>

MainActivity

package com.test;

import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

 private int seconds = 0;
 private boolean running = false; //计时状态
 private boolean wasRunning = false; //保存running的状态

 //app进入后台,暂停计时
 @Override
 protected void onStop() {
 super.onStop();
 wasRunning = running;
 running = false;
 }

 //重新进入app,开始计时
 @Override
 protected void onStart() {
 super.onStart();
 if(wasRunning) running = true;
 }

 //失去焦点(如分屏),暂停计时
 @Override
 protected void onPause() {
 super.onPause();
 wasRunning = running;
 running = false;
 }

 //获得焦点,重新开始计时
 @Override
 protected void onResume() {
 super.onResume();
 if(wasRunning) running = true;
 }

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 //获取保存的状态
 if(savedInstanceState!=null){
  seconds = savedInstanceState.getInt("seconds");
  running = savedInstanceState.getBoolean("running");
  wasRunning = savedInstanceState.getBoolean("wasRunning");
 }
 runTime();
 }

 /**
 *保存状态
 */
 @Override
 public void onSaveInstanceState(Bundle saveInstanceState) {

 super.onSaveInstanceState(saveInstanceState);
 saveInstanceState.putInt("seconds",seconds);
 saveInstanceState.putBoolean("running",running);
 saveInstanceState.putBoolean("wasRunning",wasRunning);
 }
 /**
 * 响应button的onClick事件
 * 方法名和onClick的值一致
 */
 public void onClickStart(View button){
 running = true;
 }
 public void onClickStop(View button){
 running = false;
 }
 public void onClickReset(View button){
 running = false;
 seconds = 0;
 }

 /**
 * 注意 ui线程不能被堵塞,因此不能在ui线程中调用sleep方法
 * 只允许ui线程更新界面,不能在后台线程更新界面
 *
 * ** 使用ui线程的Handler定时更新 **
 * 将任务封装到 Runnable的run方法中 ,通过Handler的
 * post(立即提交任务)或postDelayed(实现定时调度)方法提交到ui线程
 */
 private void runTime(){
 final Handler handler = new Handler();
 handler.post(new Runnable() {
  @Override
  public void run() {
  final TextView textView = findViewById(R.id.timeView);
  int hour = seconds /3600%24;
  int minute = seconds%3600/60;
  String time = String.format("%02d:%02d:%02d",hour,minute,seconds%60);
  textView.setText(time);
  if(running) seconds++;
  handler.postDelayed(this,1000);
  }
  }
 );

 }
}

测试

完成

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • android计时器,时间计算器的实现方法

    需求:默认为"00:00:00",点击开始按钮时清零后开始计时,出现如10:28:34.点击停止的时候停止计时.问题:使用Calendar DateFormat的方法,不设置时区获取到的小时是本地时区的(东八区的就是8),设置成GMT标准时区获取到的时间是12小时(12:00:00),设置24小时制无效.在开始时间加减各种小时都无效,而且计时只能到12小时就自动跳上去了,始终无法出现默认状态00:00:00开始计时的效果.尝试各种时间设置方法无效后只能自己写一个根据秒数转换时间格式字符

  • android之计时器(Chronometer)的使用以及常用的方法

    在Android的SDK中,为我们提供了一个计时器,这个计时器称为Chronometer,我们可以成它为Android的一个组件,同时它也具备自己独有的方法.下面我们举例介绍下这个计时器的使用以及常用的方法. 跟其他UI组件一样,当我们要使用它的时候,在布局文件中对应的位置声明定义计时器的位置与属性. 复制代码 代码如下: <Chronometer android:id="@+id/chronometer" android:layout_width="wrap_cont

  • android开发教程之间隔执行程序(android计时器)

    下面是每隔一段时间就执行某个操作,直到关闭定时操作: 复制代码 代码如下: final Handler handler = new Handler();     Runnable runnable = new Runnable(){         @Override         public void run() {             // TODO Auto-generated method stub             // 在此处添加执行的代码             ha

  • Android计时器的三种实现方式(Chronometer、Timer、handler)

    本文实例为大家分享了Android计时器的三种方法,具体内容如下 目录: 1.借助Timer实现 2.调用handler.sendMessagedely(Message msg, long delayMillis) 3.借助布局Chronometer 1.借助Timer实现 (1) 布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http:/

  • Android时分秒计时器的两种实现方法

    可能我们在开发中会时常用到计时器这玩意儿,比如在录像的时候,我们可能需要在右上角显示一个计时器.这个东西其实实现起来非常简单. 只需要用一个控件Chronometer,是的,就这么简单,我都不好意思讲述一下了. <Chronometer android:layout_width="wrap_content" android:layout_height="wrap_content" android:format="%s" android:id

  • Android 编程下的计时器代码

    同样,为了防止用户恶意的频繁发送激活码,应用中需要对用户发送激活码的时间间隔进行限制,这时就需要用到倒计时器了,大概流程是这样的:页面初始化的时候,按钮为可点击状态,用户在点击"发送激活码"后按钮变为不可点击状态,同时按钮上的文字变为倒计时状态,倒计时结束后,按钮变为可点击状态,文字变为"发送激活码".具体逻辑看下面的代码: 复制代码 代码如下: package cn.sunzn.countdown; import android.app.Activity;impo

  • Android中CountDownTimer倒计时器用法实例

    本文实例讲述了Android中CountDownTimer倒计时器用法.分享给大家供大家参考,具体如下: 在平时我们编程的时候,经常会用到倒计时这个功能,很多人不知道Android已经帮封装好了一个类,往往都自己写.现在发现了这个类,大家共享一下: 在一个TextView不断显示剩下的时间,代码如下: private TextView vertifyView; private CountDownTimer timer = new CountDownTimer(10000, 1000) { @Ov

  • Android编程之简单计时器实现方法

    本文实例讲述了Android编程之简单计时器实现方法.分享给大家供大家参考,具体如下: 这里利用ContextMenu(上下文菜单),Chronometer实现简单计数器. Main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android

  • Android开发实现的计时器功能示例

    本文实例讲述了Android开发实现的计时器功能.分享给大家供大家参考,具体如下: 效果图: 布局: 三个按钮 加上一个Chronometer <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.a

  • Android实现的秒表计时器示例

    本文实例讲述了Android实现的秒表计时器.分享给大家供大家参考,具体如下: package com.liu.time; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; imp

随机推荐