Android三种超简单办法,实现按钮倒计时

image.png

1、使用CountDownTimer

CountDownTimer是android中自带的倒计时类

需要两个参数,一个是总计时的时间,一般验证码是60秒,就是60*1000。第二个参数是设置计时的速度,1000就是每秒一次。

如果总长度是10秒,速度是1,那么就是10-9-8-7-6-5-4-3-2-1-0;

如果总长度是10秒,速度是2,那么就是10-8-6-4-2-0;

总时间是不变的,如果需要更精确的计时展现,就修改第二个参数。

在创建对象的时候,需要重写onTick和onFinish的方法。

onTick就是我们剩余的时间,需要将之转化成秒展示出来。

在倒计时的过程中把按钮禁用。

然后在onFinish倒计时结束的时候,按钮启用。

最后通过.start启动倒计时。

CountDownTimer timer =newCountDownTimer(10000,1000) {@OverridepublicvoidonTick(longmillisUntilFinished){                mTimer2.setEnabled(false);                mTimer2.setText("已发送("+ millisUntilFinished /1000+")");            }@OverridepublicvoidonFinish(){                mTimer2.setEnabled(true);                mTimer2.setText("重新获取验证码");            }        }.start();

2、使用线程

首先需要创建一个主线程,用来接收数据,改变UI

privateinttime=10;privateHandler mHandler =newHandler() {publicvoidhandleMessage(Message msg){switch(msg.what) {case0:                    setResult(RESULT_OK);                    TimerButtonActivity.this.finish();break;case4:                    mTimer1.setEnabled(false);                    mTimer1.setText("已发送("+ String.valueOf(time) +")");break;case5:                    mTimer1.setEnabled(true);                    mTimer1.setText("重新获取验证码");                    time =10;break;            }        }    };

运行一个子线程,由于子线程中无法更新UI,所以需要根据time,将当前状态发送到主线程中,在主线程中操作。

当子线程执行的时候,按钮设置不可点击,并且将线程执行的结果一直发送给主线程,在主线程中动态显示倒计时。

当time倒计时为0的时候,将time重置,按钮重新设置可点击。

publicvoidstartTime1(){        Runnable runnable =newRunnable() {@Overridepublicvoidrun(){                time--;if(time <=0) {                    mHandler.sendEmptyMessage(5);                }else{                    mHandler.sendEmptyMessage(4);                    mHandler.postDelayed(this,1000);                }            }        };newThread(runnable).start();    }

3、使用Timer和TimerTask

Timer类官方的解释是多个线程共享一个计时器,也就是当使用了方法二之后,再使用三、线程会比开辟出来一部分给当前的线程。

假设总时间是10秒,点击按钮2,开始倒计时,同时点按钮3,时间会被瓜分掉。

但是只调用一个线程操作是没问题的。

privateTimer timer =newTimer();TimerTask task =newTimerTask() {@Overridepublicvoidrun(){            runOnUiThread(newRunnable() {@Overridepublicvoidrun(){                    time--;                    mTimer3.setText("已发送("+ String.valueOf(time) +")");                    mTimer3.setEnabled(false);if(time <=0) {                        mTimer3.setEnabled(true);                        mTimer3.setText("重新获取验证码");                    }                }            });        }    };

在开始的时候调用

timer.schedule(task,time, 1000);

其实还有一些其他的办法:

比如重写Button按钮,同样需要用到线程,只不过,线程是在自定义button中执行。

相比来说第一种方法使用CountDownTimer是最简单的了。

但是具体实现还要看业务上的需求,去寻找最适合的方法。

源码在GitHub-android-CollectionDemo


作者:八怪不姓丑

链接:https://www.jianshu.com/p/6e72527c03af

來源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • 为什么 越没本事的人脾气越大? 第一种理解,没本事,脾气大,这是很正常的事。 这不是「问题」。 事实上,越有本事的...
    eVal阅读 581评论 0 1