Android实现简单计时器功能

作者:Red&&Black 时间:2021-11-22 03:30:00 

本文实例为大家分享了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);
 }
 }
);

}
}

测试

Android实现简单计时器功能

完成

来源:https://blog.csdn.net/m0_46267375/article/details/108777169

标签:Android,计时器
0
投稿

猜你喜欢

  • C#控制台进行文件读写的方法

    2022-02-13 22:03:27
  • Android程序开发中单选按钮(RadioGroup)的使用详解

    2023-09-18 03:43:39
  • Java Validation方法入参校验实现过程解析

    2021-08-04 03:31:50
  • JSONObject toJSONString错误的解决

    2021-09-14 07:17:32
  • MyBatis环境资源配置实现代码详解

    2023-08-05 08:59:02
  • .NET实现父窗体关闭而不影响子窗体的方法

    2022-10-06 20:56:04
  • java实现秒表功能

    2023-07-06 05:55:13
  • Java Arrays.sort和Collections.sort排序实现原理解析

    2022-11-01 01:53:57
  • SSH框架网上商城项目第1战之整合Struts2、Hibernate4.3和Spring4.2

    2023-04-19 15:01:55
  • 详解Mybatis注解写法(附10余个常用例子)

    2023-01-19 03:39:53
  • Kotlin协程的启动方式介绍

    2022-05-26 10:29:27
  • 详解IntelliJ IDEA创建spark项目的两种方式

    2023-12-05 05:48:21
  • 解决springmvc关于前台日期作为实体类对象参数类型转换错误的问题

    2023-11-28 20:53:42
  • Java数组越界问题实例解析

    2023-10-25 18:16:23
  • git自定义_动力节点Java学院整理

    2021-06-11 22:05:49
  • Android非XML形式动态生成、调用页面的方法

    2022-11-11 11:26:01
  • 基于jdk动态代理和cglib动态代理实现及区别说明

    2022-04-11 00:32:44
  • springboot中的静态资源加载顺序优先级

    2023-08-24 11:12:31
  • java对象和json的来回转换知识点总结

    2023-08-01 23:35:57
  • C# 显示、隐藏窗口对应的任务栏

    2023-06-13 03:57:32
  • asp之家 软件编程 m.aspxhome.com