CountDownTimer 应用一例

本文介绍了如何使用Android的CountDownTimer实现按钮点击后延迟三分钟再启用的功能。提供了详细的代码示例,包括如何创建CountDownTimer实例、设置倒计时时间及间隔、处理onTick和onFinish方法。
摘要由CSDN通过智能技术生成

今天时遇到个需要将APP上一个按键点击后延时3分钟再开启的事情,原来没学过JAVA和安卓方面的东西,头大,网上搜了搜发现有这个东西,

照葫芦画瓢,运气好把这事办成了,记录一下。


网上搜来的东西

http://www.2cto.com/kf/201703/615763.html

Android自带的倒计时CountDownTimer

CountDownTimer类介绍:

CountDownTimer类比较简单,总共就一个构造和4个方法。内部是通过handler实现。

CountDownTimer(long time,long interval):参数time是总时间,interval是间隔时间。

start():开始倒计时的方法。

cancel():取消倒计时的方法。

onTink(long time):抽象方法,每个间隔时间一到就会调用一次,需要自己实现。参数time是指剩下的时间。

onFinish():抽象方法,倒计时完成的方法。



以上完全看不懂,于是继续搜索

于是:

http://www.cnblogs.com/over140/archive/2011/12/20/2294220.html


CountDownTimer

译者署名: liliang1222

版本:Android 4.0 r1

 

结构

继承关系

public abstract class CountDownTimer extends Object

        

java.lang.Object

android.os.CountDownTimer

 

类概述

定时执行在一段时候后停止的倒计时,在倒计时执行过程中会在固定间隔时间得到通知(译者:触发onTick方法),下面的例子显示在一个文本框中显示一个30s倒计时:

 new CountdownTimer(30000, 1000) {

     public void onTick(long millisUntilFinished) {

         mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);

     }

     public void onFinish() {

         mTextField.setText("done!");

     }

 }.start(); 

onTick的调用是同步的,保证这次调用不会在之前调用完成前发生。这里的同步机制主要是用来:onTick的实现需要很多时间执行比倒计时间隔更重要的事情。

 

构造函数

         public CountDownTimer (long millisInFuture, long countDownInterval)

参数

                   millisInFuture  从开始调用start()到倒计时完成并onFinish()方法被调用的毫秒数。(译者注:倒计时时间,单位毫秒)

                   countDownInterval  接收onTick(long)回调的间隔时间。(译者注:单位毫秒)

 

公共方法

public final void cancel ()

         取消倒计时(译者:取消后,再次启动会重新开始倒计时)        

                  

public abstract void onFinish ()

         倒计时完成时被调用    

 

public abstract void onTick (long millisUntilFinished)

         固定间隔被调用

参数

                            millisUntilFinished   倒计时剩余时间。

 

public synchronized final CountDownTimer start ()

         启动倒计时

 

补充

文章精选

Android 定时器

android倒计时功能的实现(CountDownTimer

示例代码

         Java

package com.test.countdowntimer;

 

import android.app.Activity;

import android.os.Bundle;

import android.os.CountDownTimer;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.TextView;

 

import com.test.R;

 

public class CountDownTimeActivity extends Activity implements OnClickListener {

 

    TextView mTextView;

    Button mButton1;

    Button mButton2;

   

    @Override

    protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

      

       setContentView(R.layout.countdown);

      

       mTextView = (TextView)findViewById(R.id.textView1);

       mButton1 = (Button)findViewById(R.id.button1);

       mButton2 = (Button)findViewById(R.id.button2);

       mButton1.setOnClickListener(this);

       mButton2.setOnClickListener(this);

    }

 

    CountDownTimer timer = new CountDownTimer(40000,1000) {

      

       @Override

       public void onTick(long millisUntilFinished) {

           mTextView.setText("seconds remaining: " + millisUntilFinished / 1000);

           try {

              Thread.sleep(1200);

           } catch (InterruptedException e) {

              e.printStackTrace();

           }

           Log.e("CountDown",millisUntilFinished+"");

       }

      

       @Override

       public void onFinish() {

           mTextView.setText("done");

       }

    };

   

    @Override

    public void onClick(View v) {

       switch(v.getId()){

       case R.id.button1:

           timer.start();

           break;

       case R.id.button2:

           timer.cancel();

           break;

       }

      

    }

}

 

 

         XML

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

 xmlns:android="http://schemas.android.com/apk/res/android"

 android:orientation="vertical"

 android:layout_width="match_parent"

 android:layout_height="match_parent">

    <TextView android:text="TextView" android:id="@+id/textView1"android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>

    <Button android:text="开始" android:id="@+id/button1"android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>

    <Button android:text="取消" android:id="@+id/button2"android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>

   

</LinearLayout>

 

说明:

CountDownTimer的间隔为1s,我们在onTIck方法里面休眠了1.2s,所以log出来发现打印间隔变成了2s,即中间一次onTick方法没有被执行(不会在之前一次调用完成前被调用)。

有了以上的东西,又参考了一下其它源码



//设置倒计时开启开键功能
    public CountDownTimer temp = new CountDownTimer(180000L, 1000L)
    {
        public void onFinish()
        {
//            TestPageActivity.this.butcoolon.setClickable(true);

//            TestPageActivity.this.butcooloff.setClickable(true);
            TestPageActivity.this.butcoolon.setEnabled(true);

TestPageActivity.this.butcooloff.setEnabled(true); } public void onTick(long paramAnonymousLong) {} };

    public void butcoolonClick(View v){
        GolbalApp.sendData =new SendData("02", "2E", "FF","00");
        EventBus.getDefault().post(new EventMsg(GolbalApp.sendData.getStringData()));
//        this.butcoolon.setClickable(false);
//此项,表现为点击时仍有点击状态,但是数据不下发。
// this.butcooloff.setClickable(false); this.butcoolon.setEnabled(false);
//此项,表现为点击后为灰色,数据不下发。
this.butcooloff.setEnabled(false); this.temp.start();//倒计时开启
    }

还有一个

facusable
没有测试。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值