android 万能倒计时,时分秒倒计时

1、工具类

/*** 作者:created by meixi* 邮箱:15913707499@163.com* 日期:2018/12/28 15*/public class TimerUtil {private static final int nHandlerMsg = 23566124;private int nStartDelayTime;private int nIntervalTime;private Timer mTimer;private TimerTask mTimeTask;private Handler mHandler;private OnTimerChangeListener onTimerChangeListener;public TimerUtil(int nStartDelayTime, int nIntervalTime, OnTimerChangeListener onTimerChangeListener) {this.nStartDelayTime = nStartDelayTime;this.nIntervalTime = nIntervalTime;this.onTimerChangeListener = onTimerChangeListener;}/*** 计时器开始*/public void timeStart() {timeStop();mHandler = new TimeHandler(this);mTimeTask = new TimerTask() {@Overridepublic void run() {if (mHandler != null)mHandler.obtainMessage(nHandlerMsg).sendToTarget();}};mTimer = new Timer();mTimer.schedule(mTimeTask, nStartDelayTime, nIntervalTime);}/*** 停止计时器*/public void timeStop() {if (mTimer != null)mTimer.cancel();if (mTimeTask != null)mTimeTask.cancel();mTimeTask = null;mHandler = null;mTimer = null;}private void doTimeChange() {if (onTimerChangeListener != null)onTimerChangeListener.doChange();}private static class TimeHandler extends Handler {WeakReference<TimerUtil> weakReference;public TimeHandler(TimerUtil timerUtil) {weakReference = new WeakReference<>(timerUtil);}@Overridepublic void handleMessage(Message msg) {TimerUtil timerUtil = weakReference.get();if (msg.what == nHandlerMsg)timerUtil.doTimeChange();super.handleMessage(msg);}}public interface OnTimerChangeListener {void doChange();}
}

2、实例化

private int mMin = 11;
private TimerUtil timerUtil;

    private void initTimerUtil() {TimerUtil.OnTimerChangeListener onTimerChangeListener = new TimerUtil.OnTimerChangeListener() {@Overridepublic void doChange() {doTimeChange();}};timerUtil = new TimerUtil(0, 1000, onTimerChangeListener);}private void doTimeChange() {mMin--;if (mMin < 0) {mMin = 11;
//            timeStop();//如是周期倒计时,不停。一次性倒计时则,stop
//            activityExchangePhoneSendCode.setText("获取验证码");Log.i("lgq","sss6666==ss="+mMin);return;}Log.i("lgq","sss6666==="+mMin);
//        activityExchangePhoneSendCode.setText(String.valueOf(mMin)+"秒后重发");//倒计时过程}/*** 停止计时器*/private void timeStop() {timerUtil.timeStop();}/*** 计时器开始*/private void timeStart() {timerUtil.timeStart();}

3、调用开始

onCreate方法调用初始化
initTimerUtil();随时开启倒计时timeStart();

时分秒倒计时

    int ms,fs,ss;public void daojishi(String shi,String fen,String mian){ss = Integer.parseInt(shi);fs = Integer.parseInt(fen);ms = Integer.parseInt(mian);//开始延时5秒,每次间隔12秒Observable.interval(1, 1, TimeUnit.SECONDS).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<Long>() {@Overridepublic void accept(Long aLong) {runOnUiThread(new Runnable() {@Overridepublic void run() {//                LgqLogPlus.e("倒计时。。。。"+ms);if (ms>0){ms--;if (ms<10){miaote.setText("0"+ms);}else {miaote.setText(ms+"");}}else if (ms==0){if (fs>0){if (ms==0){ms=60;miaote.setText(ms+"");}}if (fs>0){fs--;if (fs<10){fente.setText("0"+fs);}else {fente.setText(fs+"");}}else if (fs==0){if (ss>0){if (fs==0){fs=60;fente.setText(fs+"");}}if (ss>0){ss--;fs=60;ms=60;if (ss<10){shite.setText("0"+ss);}else {shite.setText(ss+"");}}else {shite.setText("00");}}}}});}});}

方法2-------------------------------------------

private Handler handler = new Handler(Looper.getMainLooper());private int CONNECT_INTERVAL = 300;
private int iCurrConnTimes = 0;//当前进度
private int CONNECT_TIMES = 100;//30秒 =CONNECT_INTERVAL*CONNECT_TIMESboolean ifrun;

 控制

handler.postDelayed(connectRunnable, CONNECT_INTERVAL);kaibt.setOnClickListener(v -> {ifrun=true;handler.postDelayed(connectRunnable, CONNECT_INTERVAL);
});
guanbt.setOnClickListener(v -> {ifrun = false;});

运行

private Runnable connectRunnable = new Runnable() {@Overridepublic void run() {iCurrConnTimes++;LgqLogPlus.d("倒计时==== "+iCurrConnTimes);tvProgress.setText(iCurrConnTimes+"%");if (iCurrConnTimes < CONNECT_TIMES){if (ifrun){handler.postDelayed(connectRunnable, CONNECT_INTERVAL);}}else {handler.removeCallbacks(connectRunnable);}}
};@Override
protected void onDestroy() {super.onDestroy();handler.removeCallbacksAndMessages(null);
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/415976.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

菜鸟必备的网络命令

对于菜鸟的我来讲很有保存价值开始菜单中的“运行”是通向程序的快捷途径&#xff0c;输入特定的命令后&#xff0c;即可快速的打开Windows的大部分程序&#xff0c;熟练的运用它&#xff0c;将给我们的操作带来诸多便捷。 winver 检查Windows版本 wmimgmt.msc 打开Windows管理…

实现瀑布流的核心代码

.warp {column-count: 2;column-gap: 10px;padding: 5px; }.item {height: 80px;margin-bottom: 10px;break-inside: avoid; }效果如下

Mac OS X Terminal 101:终端使用初级教程以及Xcode

转自 http://www.renfei.org/blog/mac-os-x-terminal-101.html 最近学习苹果认证的《Mac OS X Support Essentials》教程&#xff0c;看到 Command Line 一节有很多实用的知识&#xff0c;下面选取一部分翻译 笔记&#xff0c;整理成此文。 你可以整天驾驶汽车而不用知道如何修…

android studio 获取SHA1值 MD5值

运行CMD 输入 cd .android 回车 输入 keytool -list -v -keystore D:/yohoo.keystore -storepass android 回车 D:/yohoo.keystore------就是你的keystore的位置 &#xff0c; android------- 就是你的keystore的密码 如果提示keytool 不是内部命令或可运行程序。需先配…

修改远程端口

怎么更改远程桌面3389端口号才能使用服务器更加安全?一些黑客常常利用远程服务器桌面的3389端口进行入侵,因此我们有必要学会如何更改远程桌面的端口号来保护自己. 远程终端服务基于端口3389。入侵者一般先扫描主机开放端口&#xff0c;一旦发现其开放了3389端口&#xff0c;就…

MongoDB 常用运算符

$eq (等于) $gt > (大于) $gte > (大于等于) $lt < (小于) $lte < (小于等于) $ne ! (不等于) $in in (in) $nin !in (not in) 参考&#xff1a;https://docs.mongodb.com/manual/reference/operator/query/ $eq 语法&#xff1a; { <field>: { …

myeclipse使用git图文教程

Git介绍与使用 1、什么是Git Git是分布式版本控制系统 Git是一款免费、开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。 2、集中式版本控制系统&#xff08;CVS / SVN等&#xff09; 集中式版本控制系统&#xff0c;版本库是集中存放在中央服务器…

汇编64讲(搞免杀、破解必看)

希望大家喜欢!每个课程有1个小时 学完包你会免杀,免的出神入画.....-_-!http://219.144.186.220/hbywjjk/下载地址&#xff08;也可以在线观看&#xff09;mms://221.11.20.228/hbywjjk/1/000.asfmms://221.11.20.228/hbywjjk/2/000.asfmms://221.11.20.228/hbywjjk/3/000.asfm…

centos 安装pm2

npm install -g pm2whereis pm2 pm2: /opt/nodejs/bin/pm2sudo ln -s /opt/nodejs/bin/pm2 /usr/bin/pm2

android Animation 动画。淡出动画

淡出动画 protected void startHotelNearByIconAnim() {AlphaAnimation alphaAnimation new AlphaAnimation(1, 0);//初始化操作&#xff0c;参数传入0和1&#xff0c;即由透明度0变化到透明度为1alphaAnimation.setFillAfter(true);//动画结束后保持状态alphaAnimation.setD…

Java内存模型_基础

线程之间的通信机制有两种&#xff1a; 1、共享内存&#xff1a;线程之间共享程序的公共状态&#xff0c;通过写-读内存中的公共状态进行隐式的通信。 2、消息传递&#xff1a;线程之间没有公共状态&#xff0c;线程之间必须发送消息来显示的进行通信 同步&#xff1a;是指程序…

警惕Oracle DB操作高压线

在日常的数据库技术支持工作中&#xff0c;会发现相当部分的数据库事故和人为操作不当有直接的关系。每次的新员工培训&#xff0c;也会用真实案例来说明和强调正确操作习惯的重要性。在强调职业化&#xff0c;推行可服务性的大环境下&#xff0c;了解数据库操作的高压线&#…

centos 宝塔面板 mongodb 设置用户账号密码登录

挂在网上的mongodb测试数据库&#xff0c;默认的无密码&#xff0c;端口直接登录&#xff0c;本来想着不会有人盯上吧&#xff0c;结果&#xff0c;一个月后&#xff0c;被黑客删库了&#xff0c;所以不管是接口&#xff0c;还是数据库的安全性一定要保证&#xff01;&#xff…

android 日期选择器

//出生年月设置 private void birthSetting() {Calendar calendar Calendar.getInstance();calendar.add(Calendar.DAY_OF_YEAR, 1);new DatePickerDialog(mContext, new DatePickerDialog.OnDateSetListener() {Overridepublic void onDateSet(DatePicker view, int year, in…

启动activity的标准的action常量及对应的字符串

转载于:https://www.cnblogs.com/ouyangping/p/7481700.html