【转】Android - 带暂停,继续,重置功能的简易倒计时器-附jpg源码

带暂停功能的Android倒计时器TimeCountDown实现详解 本文还有配套的精品资源,点击获取 简介:本压缩包详细介绍了在Android开发中实现一个自定义的倒计时器,该倒计时器具备暂停和恢复功能。用户可以通过 start() , pause() , resume() 方法控制倒计时的进行,同时提供UI更新机制和用户交互按钮的支持。倒计时器在各种场景下如游戏、广告、网络请求等均具有实际应用价值... 阅读详情

来源:http://www.javaask.com/mobile/android/2011/0406/5961.html

摘要:这个倒计时器,可以有暂停,继续,重置的功能,并能自动更新剩余时间。

            源码是个人根据网上的方法,做的。

             老样子,工程文件打成包传上来的,请右击保存成CountDownTimer.zip ,解压缩后即可用Eclipse导入工程。

保存成CountDownTimer.zip


------------------------------------------------------------------------------------------------------------------------------

下面附上网页的拷贝

这是一个android平台的简易倒计时器,可以实现设置时间的倒计时以及时间到后的提醒功能。

android sdk提供的CountdownTimer 类已经实现的倒计时功能,但却没有暂停,继续等功能,在这个类的基础上可以实现一个自己的计时类。

package com.util;

Java代码 
import android.os.Handler; 
import android.os.Message; 
//在android自带的CountdownTimer类基础上实现定时功能 
public abstract class AdvancedCountdownTimer { 
private static final int MSG_RUN = 1; 

private final long mCountdownInterval;// 定时间隔,以毫秒计 
private long mTotalTime;// 定时时间 
private long mRemainTime;// 剩余时间 

// 构造函数 
public AdvancedCountdownTimer(long millisInFuture, long countDownInterval) { 
mTotalTime = millisInFuture; 
mCountdownInterval = countDownInterval; 
mRemainTime = millisInFuture; 
} 

// 取消计时 
public final void cancel() { 
mHandler.removeMessages(MSG_RUN); 
} 

// 重新开始计时 
public final void resume() { 
mHandler.sendMessageAtFrontOfQueue(mHandler.obtainMessage(MSG_RUN)); 
} 

// 暂停计时 
public final void pause() { 
mHandler.removeMessages(MSG_RUN); 
} 

// 开始计时 
public synchronized final AdvancedCountdownTimer start() { 
if (mRemainTime <= 0) {// 计时结束后返回 
onFinish(); 
return this; 
} 
// 设置计时间隔 
mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_RUN), 
mCountdownInterval); 
return this; 
} 

public abstract void onTick(long millisUntilFinished, int percent);// 计时中 

public abstract void onFinish();// 计时结束 

// 通过handler更新android UI,显示定时时间 
private Handler mHandler = new Handler() { 

@Override 
public void handleMessage(Message msg) { 

synchronized (AdvancedCountdownTimer.this) { 
if (msg.what == MSG_RUN) { 
mRemainTime = mRemainTime - mCountdownInterval; 

if (mRemainTime <= 0) { 
onFinish(); 
} else if (mRemainTime < mCountdownInterval) { 
sendMessageDelayed(obtainMessage(MSG_RUN), mRemainTime); 
} else { 

onTick(mRemainTime, new Long(100 
* (mTotalTime - mRemainTime) / mTotalTime) 
.intValue()); 

sendMessageDelayed(obtainMessage(MSG_RUN), 
mCountdownInterval); 
} 
} 
} 
} 
}; 
}

import android.os.Handler;
import android.os.Message;
//在android自带的CountdownTimer类基础上实现定时功能
public abstract class AdvancedCountdownTimer {
private static final int MSG_RUN = 1;

private final long mCountdownInterval;// 定时间隔,以毫秒计
private long mTotalTime;// 定时时间
private long mRemainTime;// 剩余时间

// 构造函数
public AdvancedCountdownTimer(long millisInFuture, long countDownInterval) {
mTotalTime = millisInFuture;
mCountdownInterval = countDownInterval;
mRemainTime = millisInFuture;
}

// 取消计时
public final void cancel() {
mHandler.removeMessages(MSG_RUN);
}

// 重新开始计时
public final void resume() {
mHandler.sendMessageAtFrontOfQueue(mHandler.obtainMessage(MSG_RUN));
}

// 暂停计时
public final void pause() {
mHandler.removeMessages(MSG_RUN);
}

// 开始计时
public synchronized final AdvancedCountdownTimer start() {
if (mRemainTime <= 0) {// 计时结束后返回
onFinish();
return this;
}
// 设置计时间隔
mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_RUN),
mCountdownInterval);
return this;
}

public abstract void onTick(long millisUntilFinished, int percent);// 计时中

public abstract void onFinish();// 计时结束

// 通过handler更新android UI,显示定时时间
private Handler mHandler = new Handler() {

@Override
public void handleMessage(Message msg) {

synchronized (AdvancedCountdownTimer.this) {
if (msg.what == MSG_RUN) {
mRemainTime = mRemainTime - mCountdownInterval;

if (mRemainTime <= 0) {
onFinish();
} else if (mRemainTime < mCountdownInterval) {
sendMessageDelayed(obtainMessage(MSG_RUN), mRemainTime);
} else {

onTick(mRemainTime, new Long(100
* (mTotalTime - mRemainTime) / mTotalTime)
.intValue());

sendMessageDelayed(obtainMessage(MSG_RUN),
mCountdownInterval);
}
} 
}
}
};
}
这是一个抽象工具类,在主程序中编写一个类继承它就可以实现相应的计时功能。

 

Java代码 
package com.timer; 

import java.io.IOException; 
import com.util.AdvancedCountdownTimer; 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.media.MediaPlayer; 
import android.media.MediaPlayer.OnCompletionListener; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Button; 
import android.widget.Toast; 

public class Timer extends Activity implements OnClickListener { 

private TextView txt_time = null;//显示剩余时间 
private EditText edt_hour = null;//定时时间编辑框 
private EditText edt_minute = null; 
private EditText edt_second = null; 
private Button btn_start = null;//各个按钮 
private Button btn_pause = null; 
private Button btn_con = null; 
private Button btn_reset = null; 
private Button btn_exit = null; 

private long hour = 0;//时间变量 
private long minute = 0; 
private long second = 0; 
private long time = 0; 

private MyCount count = null;//定时类对象 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
findViews(); 
setListener(); 
} 
//识别各个控件并设置按钮状态 
private void findViews() { 
txt_time = (TextView) findViewById(R.id.text); 
edt_hour = (EditText) findViewById(R.id.hour); 
edt_minute = (EditText) findViewById(R.id.minute); 
edt_second = (EditText) findViewById(R.id.second); 
btn_start = (Button) findViewById(R.id.start); 
btn_pause = (Button) findViewById(R.id.pause); 
btn_con = (Button) findViewById(R.id.con); 
btn_reset = (Button) findViewById(R.id.reset); 
btn_exit = (Button) findViewById(R.id.exit); 
btn_pause.setEnabled(false); 
btn_con.setEnabled(false); 

} 
//绑定监听器 
private void setListener() { 
btn_start.setOnClickListener(this); 
btn_pause.setOnClickListener(this); 
btn_con.setOnClickListener(this); 
btn_reset.setOnClickListener(this); 
btn_exit.setOnClickListener(this); 

} 
//获取设置的时间并判断输入是否为空 
private boolean setTime() { 
String strHour = edt_hour.getText().toString();//取控件的值 
String strMinute = edt_minute.getText().toString(); 
String strSecond = edt_second.getText().toString(); 
if (strHour.equals("") || strMinute.equals("") || strSecond.equals("")) { 
return false; 
} else { 
hour = Long.parseLong(strHour); 
minute = Long.parseLong(strMinute); 
second = Long.parseLong(strSecond); 
time = (hour * 3600 + minute * 60 + second) * 1000; 
count = new MyCount(time, 1000); 
return true; 
} 

} 
//设置监听器 
@Override 
public void onClick(View v) { 
switch (v.getId()) { 
//点击开始计时按钮 
case R.id.start: 
if (setTime() == false) { 
Toast.makeText(Timer.this, "请输入完整定时时间", Toast.LENGTH_LONG) 
.show(); 
} else { 
count.start();//开始计时 
btn_start.setEnabled(false); 
btn_pause.setEnabled(true); 
} 
break; 
//点击暂停按钮 
case R.id.pause: 
count.pause();//暂停 
btn_pause.setEnabled(false); 
btn_con.setEnabled(true); 
break; 
//点击继续按钮 
case R.id.con: 
count.resume();//继续 
btn_pause.setEnabled(true); 
btn_con.setEnabled(false); 
break; 
//点击重置按钮 
case R.id.reset: 
count.cancel();//取消及时,重置界面状态 
txt_time.setText(""); 
edt_hour.setText("0"); 
edt_hour.setText("0"); 
edt_second.setText("30"); 
btn_pause.setEnabled(false); 
btn_con.setEnabled(false); 
btn_start.setEnabled(true); 
break; 
//点击退出按钮 
case R.id.exit: 
android.os.Process.killProcess(android.os.Process.myPid());//退出 
break; 
default: 
break; 

} 

} 
//实现计时功能的类 
class MyCount extends AdvancedCountdownTimer { 

public MyCount(long millisInFuture, long countDownInterval) { 
super(millisInFuture, countDownInterval); 
} 

@Override 
public void onFinish() { 
//媒体对象 
final MediaPlayer media = MediaPlayer.create(Timer.this, R.raw.alarm); 
//对话框对象 
final AlertDialog mydialog = new AlertDialog.Builder(Timer.this).setMessage( 
"时间到!").setPositiveButton("确定", new DialogInterface.OnClickListener(){ 

@Override 
public void onClick(DialogInterface dialog, int which) { 
media.stop(); 
media.release(); 
btn_pause.setEnabled(false); 
btn_con.setEnabled(false); 
btn_start.setEnabled(true); 
} 

}).create(); 
mydialog.show();//播放结束后显示对话框 
txt_time.setText(""); 
try { 
media.prepare(); //准备播放音乐 
} catch (IllegalStateException e) { 
e.printStackTrace(); 
} catch (IOException e) { 
e.printStackTrace(); 
} 
media.start();//播放音乐 
media.setOnCompletionListener(new OnCompletionListener() {//播放结束后会话框消失,重置按钮状态 
@Override 
public void onCompletion(MediaPlayer mp) { 
mydialog.hide(); 
btn_pause.setEnabled(false); 
btn_con.setEnabled(false); 
btn_start.setEnabled(true); 

} 
}); 

} 
//更新剩余时间 
@Override 
public void onTick(long millisUntilFinished, int percent) { 
long myhour = (millisUntilFinished / 1000) / 3600; 
long myminute = ((millisUntilFinished / 1000) - myhour * 3600) / 60; 
long mysecond = millisUntilFinished / 1000 - myhour * 3600 
- myminute * 60; 
txt_time.setText("剩余时间" + myhour + ":" + myminute + ":" + mysecond); 

} 

} 

}


Android-CountDownTimer:CountDownTimer具有暂停和恢复功能,该方法在Java中也可用 Android-CountDownTimer CountDownTimer具有暂停和恢复功能,该方法在Java中也可用也可以与服务一起使用 立即下载

相关推荐

android开发——分秒计时器(可暂停/继续)

android计时器(可开始/暂停/播放/停止),简单的计时器工具类;

android实现可暂停/继续的计时器

代码 使用控件Chronometer即可实现,很简单 xml布局 先看xml布局,有两个button,一个Chronometer控件和一个提示录制状态的TextView空间 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" andr

dsaaf21的博客 2605

android应用源码-闹钟+秒表+倒计时+时钟四合一源代码.zip

android应用源码-闹钟+秒表+倒计时+时钟四合一源代码,可供学习设计参考。

handler倒计时

package com.example.kanghuwei20181214; import android.content.Intent; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; ...

橘子丶 166

Windows非分页缓冲池内存泄漏实战:PoolMon与RAMMap高效排查指南

本文详细介绍了Windows系统中非分页缓冲池内存泄漏的实战排查方法。当系统出现卡顿且内存占用异常增长时,通过RAMMap工具快速定位非分页缓冲池异常,并利用PoolMon监控内核内存分配标签,精准锁定泄漏源。文章提供了从确认症状、安装工具到使用findstr命令溯源驱动文件的完整五步排查流程,并总结了常见泄漏标签与解决方案,帮助用户高效解决深层系统内存问题。

weixin_28455801的博客 1011

BERT之提取特征向量 及 bert-as-server的使用

本文内容列表提取句向量1、句向量简介1-1传统句向量1-2、BERT句向量2、 extract_features.py源码分析2-1 main函数 前一篇文章 BERT介绍及中文文本相似度任务实践 简单介绍了使用BERT进行中文文本相似度计算的方法,这篇文章着重对特征提取方法进行讲述。 提取句向量 1、句向量简介 1-1传统句向量 更多采用word embedding的方式取加权平均,该方法的一大...

ling620的专栏 1万+

android 重置倒计时,Android计时器跟倒计时的实现(含开始,暂停,和复位)

倒计时和计时在比赛中经常用到,由于涉及到子线程和主线程的通信问题,同学们在制作的时候总有点畏手畏脚的,今天会有两个神器出现,帮助大家攻克这两道难关!神器一:chronometer --andrdoid 控件的一种,自带监听方法,使用前需要将该控件设置在xml配置文件里神奇二:CountDownTimer---代码控制的倒计时,只需要调用textview显示即可===================...

weixin_34382844的博客 1063

手把手教你用Arduino IDE玩转ESP32-S3-wroom(附串口调试技巧)

本文详细介绍了如何在Arduino IDE环境下配置和使用ESP32-S3-WROOM模块,包括开发环境搭建、硬件连接、程序烧录及高级调试技巧。通过实战步骤和常见问题解决方案,帮助开发者快速上手这一高性能Wi-Fi/蓝牙双模模组,提升物联网开发效率。

weixin_30487201的博客 292

android简单计时器源码,Android 实现一个计时器

【实例简介】Android实现一个计时器。功能:计时,可以暂停计时。主要利用handler的postdelay()函数。【实例截图】【核心代码】calTimer└── calTimer├── AndroidManifest.xml├── bin│ ├── AndroidManifest.xml│ ├── calTimer.apk│ ├── classes│ │ └── com│...

weixin_39767322的博客 479

eNSP-交换机VLAN配置

VLAN

乌托托的博客 8807

基于微信小程序的智能门禁管理系统的设计与实现(文章+源码)

基于微信小程序门禁管理小程序,该系统支持用户注册登录、查阅新闻动态、提交开门申请和发布留言等功能,同时管理员可以进行用户管理、新闻信息管理、门禁审批管理和留言管理等操作。该系统将采用IDEA开发工具、SSM框架和MYSQL数据库等相关技术,实现用户登录注册、个人信息管理、门禁申请提交、管理员审核等功能。该系统的实现,可以有效提高门禁管理的效率和便利性,同时也具有较强的可扩展性和可维护性。本研究对于智能门禁管理系统的设计和实现具有一定的参考价值。

u011779145的博客 1399

android timer停止倒计时,Android倒计时功能(启动、暂停、停止)

【实例简介】Android利用Timer和Handler实现倒计时功能,包含暂停倒计时、停止倒计时【实例截图】【核心代码】TimerDemo.tar└── TimerDemo├── AndroidManifest.xml├── bin│ ├── classes│ │ └── com│ │ └── snowdream│ │ └── timerdem...

weixin_42608318的博客 1044

多标签图像分类:标签依赖关系建模的最新论文解读与实战应用

多标签图像分类:标签依赖关系建模的最新论文解读与实战应用 ,人工智能,计算机视觉,大模型,AI,本文解读了最新相关论文,包括基于图神经网络(GCN)的ML-GCN方法,通过构建标签相关矩阵建模依赖关系;区域潜在语义依赖的RLSD模型,定位关键区域并利用RNN建模语义依赖;以及语义图表示学习的SSGRL框架,结合语义解耦与交互模块。通过实战应用,展示了基于PyTorch的ML-GCN模型实现,包括图像特征提取、标签依赖建模及训练评估流程,为多标签图像分类提供了有效解决方案。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 18万+

Android11文件存储

try {if (!//保存到本地,格式为JPEG//刷新图库if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//高于22版本要手动授权// 检查该权限是否已经获取// 权限是否已经 授权 GRANTED—授权 DINIED—拒绝if (i!// 提示用户应该去应用设置界面手动开启权限} else {} else {//2021/4/15 功能描述:Android10及以上保存图片到相册。

2401_84519929的博客 1247

Arduino与Proteus仿真实例-LCD2004-I2C(PCF8574)驱动仿真

LCD2004-I2C(PCF8574)驱动仿真 PCF8574/74A 通过两线双向 I2C 总线(串行时钟 (SCL)、串行数据 (SDA))提供通用远程 I/O 扩展。 LCD2004,即2004字符型液晶显示器,是一种点阵模块,用于显示字母、数字、字符等。 它由 5x8 个点阵位置组成; 每个位置可以显示一个字符。 两个字符之间有一个点间距,行之间有一个空格,从而将字符和行分开。 模型 2004 表示它显示 4 行,每行 20 个字符。 在前面的实例中对PCF8574和LCD2004的已经做了详细介

视觉与物联智能 1165

【考研高数-高等数学-基础】第一章 函数、极限、连续

第一章 函数、极限、连续 第二章 导数与微分 第三章 微分中值定理及导数应用 第四章 不定积分 第五章 定积分与反常积分 第六章 定积分的应用 第七章 微分方程 第八章 多元函数微分学 第九章 二重积分 第十章 无穷级数 第十一章 向量代数与空间解析几何及多元微分学在几何上的应用 第十二章 多元积分学及其应用 难题: 极限的递推 微分中值定理的证明题 定积分的不等式和等式的证明 重积分的不等式和等式的证明 线面积分的不等式和等...

刘鑫磊 2034

android如何暂停倒计时,在Android中暂停和恢复倒计时器和进度条?

我正在制作一个简单的应用程序,它使用倒计时器,循环进度条和3个按钮启动,暂停和恢复 . 我想要做的是当特定活动开始时我按暂停它存储定时器的时间暂停并从那一点开始恢复 . 但问题是倒计时器没有停止,所以如果我在7秒暂停,进度条在7秒停止但是当我按下恢复它从任何倒数计时器值开始那一刻 . 这是我试图实现的代码 .btnPause.setOnClickListener(new View.OnClickL...

weixin_36041939的博客 894

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

安卓开发实现倒计时功能

在安卓开发中,实现倒计时功能通常涉及使用Handler类或者更现代的Coroutine(如果你在使用 Kotlin 及其协程库)等方法。

qq_43664361的博客 1261

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

安卓 倒计时的制作

我们创建了一个名为的内部类,继承自 Android 提供的类。这个类用于实现倒计时功能。@OverridemTextView.setText("距离活动结束还有 " + timeLeft);@OverridemTextView.setText("活动已经结束");// 添加此方法用于格式化剩余时间return String.format(Locale.getDefault(), "%d天%d小时%d分钟%d秒", days, hours, minutes, seconds);

weixin_73808899的博客 1261

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【错误笔记——Android】java.lang.IllegalStateException

这个问题是我给ListView绑定数据的时候出现的,根据docs显示说,如果找不到绑定的组件就会出现这个错误。 当需要手动绑定数据的时候会重写 public boolean setViewValue(View view, Object data,String textRepresentation) 这个方法会默认返回一个false. 当返回false的时候,系统除了会执行用户设置的绑定...

weixin_30467087的博客 218

已解决java.lang.IllegalStateException异常的正确解决方法,亲测有效!!!

通过认真的问题分析、细致的代码审查以及正确的问题修正方法,是可以被成功解决的。遵循良好的编程实践,如合理的状态管理和防御性编程,可以显著减少此类问题的发生。以上是此问题报错原因的解决方法,欢迎评论区留言讨论是否能解决,如果本文对你有帮助 欢迎关注、评论,博主才有动力持续记录遇到的问题!!!博主v:XiaoMing_Java嗨,大家好,我是小 明(小明java问道之路),

小明的Java问道之路 6万+

java timer暂停继续_Java/Android倒计时(开始,暂停,恢复,停止)

由于要做暂停和恢复,这里我就没有使用Android的CountDownTimer,而是用了Java的Timer。所以,这个方法在java肯定是通用。我也外加了Android独有的Service,有些计时器需要在Activiy关闭的情况下依然在计时,回到Activity时,显示当前的计时状态。Timer 这个Java的类,具体看Java的API说明,但是要注意一点:Timer 在cancel后,需要...

weixin_34659856的博客 2624

倒计时器类,三秒触发消息,接收到键值重置倒计时

直接上一个计时器线程类,见代码。package com.cultraview.ctvmenu.ui; import android.os.Handler; import android.util.Log;public class SelectedTimer implements Runnable { public final static int SELECTED_SUCCESS_MS

yql44137228的专栏 804

android倒计时停止,Android 使用 Timer 做倒计时。实现开始 (start),取消 (cancel),暂停 (pause),重开 (resume)功能...

在 Android 使用 Timer 做倒计时。实现开始 (start),取消 (cancel),暂停 (pause),恢复 (resume)功能在 Android 开发中,我们很多地方会使用到倒计时功能。可以使用 Timer 做倒计时(ps:虽然我不建议)。Step00. 初始化//初始化timerpublic void initTimer() {mTimerTask = new TimerTa...

weixin_33304896的博客 3109

Android计时器和倒计时的实现(含开始,暂停,和复位)

            倒计时和计时在比赛中经常用到,由于涉及到子线程和主线程的通信问题,同学们在制作的时候总有点畏手畏脚的,今天会有两个神器出现,帮助大家攻克这两道难关! 神器一:chronometer --andrdoid 控件的一种,自带监听方法,使用前需要将该控件设置在xml配置文件里 神奇二:CountDownTimer---代码控制的倒计时,只需要调用textview显示即可 ...

u012763405的博客 6661

android 倒计时控件,详解Android自带倒计时控件Chronometer使用方法

计数器通常用于Android开发。我们可以使用处理程序来实现间隔操作,下面就跟着爱站技术频道小编的步伐详解Android自带倒计时控件Chronometer使用方法吧。先看看效果:android:id="@+id/chronometer"android:layout_width="wrap_content"android:layout_height="30dp" />android:onCl...

weixin_28676289的博客 1313
上一篇: 【转】Android创建窗体底部菜单栏,有源码
下一篇: 【转】Android 拖动Layout上的图片-非Canvas
wangwangbinbin
博客等级 码龄20年 7粉丝 25原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值