APP开发:倒计时
来源:互联网 发布:淘宝货到付款可以退吗 编辑:程序博客网 时间:2024/05/18 00:07
我们在app开发中经常遇到发送验证码后60s倒计时的操作,60s内不可点击,当0s时可以再次点击,同时TextView和计时复位为60S。
Handler实现倒计时的效果
延迟1s发送消息,接收消息后,先判断count > 0? 是:Button不可点击 + 显示时间 + count–;否:Button可点击 + count = 60 + 显示60s.
效果图
为方便观察,时间设为6s。
逻辑:
点击button发送消息,handler接收消息后,实现倒计时效果。
方法:
sendEmptyMessage (int what): 发送空消息,消息类型是whatsendEmptyMessageDelayed (int what, long delayMillis):延迟delayMillis毫秒发送空消息,消息类型是what。
代码:
package com.cqc.timecountdown;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.TextView;public class MainActivity extends AppCompatActivity implements View.OnClickListener { private static final int MSGWHAT = 1; private int CountDown = 60; private Button btn; private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViews(); initViews(); } private void initViews() { btn.setOnClickListener(this); } private void findViews() { btn = (Button) findViewById(R.id.btn); tv = (TextView) findViewById(R.id.tv); } //怎么防止重复点击 @Override public void onClick(View view) { switch (view.getId()) { case R.id.btn: handler.sendEmptyMessage(MSGWHAT); break; } } private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); Log.d("tag", "countDown=" + CountDown); if (msg.what == MSGWHAT) { if (CountDown >= 0) { btn.setEnabled(false);//防止重复点击Button,否则多次点击button:每隔一秒发送消息多次执行 tv.setText(CountDown-- + "s"); handler.sendEmptyMessageDelayed(MSGWHAT, 1000); } else { btn.setEnabled(true); CountDown = 60;//复位,60s倒计时完后可以继续倒计时 tv.setText(CountDown-- + "s"); } } } };}
Thread + Handler
延迟1秒的操作用Thread.sleep(1000)来实现,其余不变。
if (msg.what == MSGWHAT2) {//Handler + Thread 实现倒计时效果 if (CountDown >= 0) { btn2.setEnabled(false); tv.setText(CountDown-- + "s"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } finally { handler.sendEmptyMessage(MSGWHAT2); } } else { btn2.setEnabled(true); CountDown = 5; tv.setText(CountDown-- + "s"); }}
Timer + TimerTask
Timer:定时器,方法:schedule(…):执行
TimerTask:定时任务
代码:
Timer timer = new Timer();timer.schedule(new TimerTask() { @Override public void run() { runOnUiThread(new Runnable() {//ui Thread @Override public void run() { if (CountDown >= 0) { btn3.setEnabled(false); tv.setText(CountDown-- + "s"); }else{ btn3.setEnabled(true);// CountDown = 5;//死循环 } } }); }}, 1000, 1000);//1秒后,每隔1秒改变一次
源码:https://github.com/s1168805219/TimeCountDown
0 0
- APP开发:倒计时
- APP实用开发——SplashScreen页面倒计时跳转
- javascript开发倒计时程序
- iOS开发之倒计时
- Android 开发中的倒计时
- Unity游戏开发倒计时
- 倒计时软件开发(原创)
- ios开发之倒计时实现
- Android开发--倒计时的实现
- Android项目开发实战:倒计时
- ios开发之 倒计时显示
- Android项目开发实战:倒计时
- Android 开发第一弹:倒计时
- ios开发实现倒计时功能
- 微信小程序倒计时组件开发
- App开发。
- App开发
- App开发
- Elasticsearch(8)实践四-使用特定域语言查询(Query DSL)
- 4---img 的onerror问题
- 解决Binary XML file line #6: : Error inflating class <unknown> 的问题
- Qt容器的相关使用方法(持续更新)
- 从输入网址到显示网页的全过程分析
- APP开发:倒计时
- Mahout Random Forests
- ubuntu上在使用c/c++连接mysql时,出现undefined reference错误解决办法
- 关于伪类与伪元素及其前面的冒号和两个冒号的使用
- 判断多选框的值是否在指定范围内/判断多选框的值是否包含在另一组值中
- my_string-part1
- kmp算法实现
- android多媒体框架学习 详解 最新版本
- Qt实现拖拽数据的功能