android倒计时的简单实现

来源:互联网 发布:小米关闭免费网络短信 编辑:程序博客网 时间:2024/06/05 15:08

android开发过程存在一些场景需要使用到倒计时,最近遇到一个简单的功能便是,按钮在点击后的一分钟中内不允许点击,一分钟后就可以了。其实实现起来还是很简单的,实现方式也有很多。这里主要说一下,利用android提供的CountDownTimer类来实现简单的倒计时功能,先简单看一下效果图吧:

废话不多说,直接看下代码,如下:

public class MainActivity extends AppCompatActivity {    private TextView mTvTime;    private CountDownTimer mCountDownTimer;    private int     num     = 60;       //倒计时总时长    private boolean isStart =true;    private Button mBtnStart;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //防止回到桌面后再点击应用图标后再重启应用,当然也可以设置启动模式为singleTask        if((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0){            finish();            return;        }        setContentView(R.layout.activity_main);        initView();        Log.e("zxh","onCreate==");    }    private void initView() {        mTvTime = (TextView) findViewById(R.id.tv_time);        mBtnStart = (Button) findViewById(R.id.btn_start);    }    private void initData() {        //初始化倒计时类,第一个参数为总的倒计时时长,第二个为间隔时长        mCountDownTimer = new CountDownTimer((num+ 2)*1000, 1000) {  //加2是为了倒计时能显示到0            @Override            public void onTick(long millisUntilFinished) {      //每隔相应间隔时间回调一次                mTvTime.setText(num + "");                Log.e("zxh","num==" + num);                if (num==0){                    mBtnStart.setText("重新开始");                    isStart = true;                    num=60;                }else {                    num--;                }            }            @Override            public void onFinish() {    //倒计时结束的回调                Log.e("zxh","倒计时结束了...num==" + num);            }        };    }    /**     * 开始倒计时     * @param view     */    public void start(View view){        if (isStart){        //如果是开始状态点击开始计时,文字变为暂停            mBtnStart.setText("暂停");            Log.e("zxh","点击开始。。num==" + num);            initData();            mCountDownTimer.start();            isStart = false;        }else{              //暂停状态点击则停止计算,文字变为开始            mCountDownTimer.cancel();            mBtnStart.setText("开始");            num++;          //停止计算的时候要将数据+1,因为onTick回调函数已-1了            isStart = true;        }    }    /**     * 重新倒计时     * @param view     */    public void replay(View view){        if (mCountDownTimer != null){            mCountDownTimer.cancel();            num= 60;            initData();            mCountDownTimer.start();            mBtnStart.setText("暂停");            isStart = false;        }    }    @Override    protected void onDestroy() {        super.onDestroy();        Log.e("zxh","onDestroy==mCountDownTimer==" + mCountDownTimer);        //因为CountDownTimer是在后台开启了一个线程,为了减少消耗,退出时取消倒计时。        if (mCountDownTimer != null){            mCountDownTimer.cancel();        }    }}

这里要注意几点:

1.CountDownTimer这个类会开启一个后台线程去倒计时,如果不cancel掉,会一直到后台倒计时,直到结束;

2.点击计时开始、暂停、重新时,简单逻辑的处理需要理清,具体看代码里注释。

完整源码,可点击链接下载:点击打开链接