Android实现简单计时器功能
作者:Red&&Black 发布时间:2021-11-22 03:30:00
标签: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);
}
}
);
}
}
测试
完成
来源:https://blog.csdn.net/m0_46267375/article/details/108777169
0
投稿
猜你喜欢
- 原因分析@Anysc注解会开启一个新的线程,主线程的Request和子线程是不共享的,所以获取为null在使用springboot的自定带的
- 在上一讲中,我们对Spring的基本使用进行了一个简单的回顾,接下来,我们就来看一下Spring核心功能结构。Spring核心功能结构Spr
- 第一步:下载JDK地址:http://www.oracle.com/technetwork/java/javase/downloads/in
- 一、什么是单例模式?单例设计模式(Singleton Design Pattern)理解起来非常简单。一个类只允许创建一个对象(或者实例),
- 使用场景1、将用户信息导出为excel表格(导出数据....)2、将Excel表中的信息录入到网站数据库(习题上传....)大大减轻网站录入
- @Autowired注入static接口问题@Autowired自动注入普通service很方便如:@Componentpublic cla
- 第一节 JAVA条件语句之if语句1.单独的if语句,语法:if(条件){条件成立时执行的代码};如果if成立时执行的语句只有一条,可以省略
- Android 实现全屏显示的几种方法整理A、设置主题实现全屏直接在AndroidManifest.xml文件中设定Activity主题为全
- 前言在使用Mybatis-Plus新增的时候,我们往往想要id随着数据库自增,但是如果不是我们指定id为auto(自增)的话,会通过算法算出
- Feign调用中的两种Header传参方式在Spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,
- 本文实例讲述了C#将布尔类型转换成字节数组的方法。分享给大家供大家参考。具体如下:byte[] b = null;b = BitConver
- 下载gradle直接百度gradle,然后点击链接进去就可以找到,这里附上下载链接:gradle下载安装gradle##解压下载下来的zip
- 效果图如下所述:布局<?xml version="1.0" encoding="utf-8"?
- 一、首先,我们来看一下效果图,这是新浪微博的Tab滑动效果。我们可以手势滑动,也可以点击上面的头标进行切换。与此同方式,白色横条会移动到相应
- 本文实例为大家分享了JAVA实现人脸识别的具体代码,供大家参考,具体内容如下官方下载 安装文件 ,以win7为例,下载opencv-2.4.
- 本文实例为大家分享了struts2和hibernate实现登录和注册功能,供大家参考,具体内容如下1、该项目使用MySQL数据库,数据库名为
- 前言说起Android进行间通信,大家第一时间会想到AIDL,但是由于Binder机制的限制,AIDL无法传输超大数据。那么我们如何在进程间
- Builder模式使用链式结构创建复杂对象,将过程与结果分开,创建过程中可以自行组合。使用场景一个对象,不同组合,不同顺序生成不同的结果优点
- 前言想使用ffmpeg打开摄像头,需要输入摄像头的名称,而ffmpeg本身的枚举摄像头列表功能不是接口,所以需要用其他方式获取到设备列表。C
- 学习初衷:在工作实际开发过程中,原有的安卓控件已不能满足实际的功能需求,而且有些应用还需要一些独特的展示效果,这时就需要自定义控件来定制控件