Android实现倒计时方法汇总

Android开发中经常会有倒计时的功能,下面将总结出常见的集中实现方式。

1.直接使用Handler的消息机制来实现

xml布局中文件如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="horizontal" >

  <Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="clickButton"
    android:text="开始计时" />

</LinearLayout>

java代码如下:

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;

public class FirstActivity extends Activity{

  private Button button;
  private int count = 60;
  private int COUNT_TIME = 0;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.first_activity);
    button = (Button) findViewById(R.id.button);

  }

  private Handler handler = new Handler(){

    @Override
    public void handleMessage(Message msg) {
      if(count <= 0){
        count = 60;
        button.setText("重新计时");
        button.setClickable(true);
        return;
      }
      count--;
      button.setText(""+count);
      sendEmptyMessageDelayed(COUNT_TIME,1000);
    }
  };

  public void clickButton(View view){
    handler.sendEmptyMessage(COUNT_TIME);
    button.setClickable(false);
  }
}

2.使用Timer和TimerTask,结合handler一起实现倒计时

import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;

public class FirstActivity extends Activity{

  private Button button;
  private int count = 30;
  private int COUNT_TIME = 0;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.first_activity);
    button = (Button) findViewById(R.id.button);

  }

  private Handler handler = new Handler(){

    @Override
    public void handleMessage(Message msg) {
      button.setText(""+count);
      if(count <= 0){
        count = 30;
        button.setClickable(true);
        button.setText("重新计时");
        timerTask.cancel(); //取消该任务
      }
    }
  };

  private Timer timer = new Timer();
  private TimerTask timerTask;
  public void clickButton(View view){
    button.setClickable(false);

    timerTask = new TimerTask() {

      @Override
      public void run() {
        count--;
        handler.sendEmptyMessage(COUNT_TIME);
      }
    };
    timer.schedule(timerTask,0,1000); //0秒后,每过一秒钟执行一次该任务
  }

  @Override
  protected void onDestroy() {
    super.onDestroy();
    //释放资源
    if(timerTask != null){
      timerTask.cancel();
      timerTask = null;
    }
    if(timer != null){
      timer.cancel();
      timer = null;
    }
  }
}

3.使用android自带的原生倒计时类 CountDownTimer

import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.widget.Button;

public class FirstActivity extends Activity{

  private Button button;

  private CountDownTimer timer;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.first_activity);
    button = (Button) findViewById(R.id.button);

  }

  public void clickButton(View view){
    button.setClickable(false);
    //第一个参数:倒计时的毫秒数;第二个参数:接收onTick回调的时间间隔
    timer = new CountDownTimer(30000, 10) {
       public void onTick(long millisUntilFinished) {
         button.setText(millisUntilFinished / 1000 + "秒");
       }
       public void onFinish() {
         button.setText("重新计时");
         button.setClickable(true);
       }
     };
    timer.start();
  }
  @Override
  protected void onDestroy() {
    super.onDestroy();
    if(timer != null){
      timer.cancel();
    }
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • android实现倒计时功能代码

    效果图,每隔1秒,变换一下时间  xml: 复制代码 代码如下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="mat

  • Android 列表倒计时的实现的示例代码(CountDownTimer)

    实习一段时间了,一直想写点技术总结,但一直没找到合适的主题.刚好,最近版本中我负责的模块遇到了个线程相关问题(之前一直画界面,做点基础功能,有点乏味),列表项倒计时的实现. 于是乎,我的第一篇android技术文章就诞生了. [醒目]该demo用Kotlin语言实现. 背景介绍 需要在ListView的item里实现倒计时,初看还挺简单的,但是真正做的时候也遇到了不少坑. 网上有不少类似文章,有用对TextView扩展实现的,也有用自带的CountDownTimer实现的,本文就是用CountD

  • Android实现计时与倒计时的常用方法小结

    本文实例总结了Android实现计时与倒计时的常用方法.分享给大家供大家参考,具体如下: 方法一 Timer与TimerTask(Java实现) public class timerTask extends Activity{ private int recLen = 11; private TextView txtView; Timer timer = new Timer(); public void onCreate(Bundle savedInstanceState){ super.onC

  • Android中CountDownTimer倒计时器用法实例

    本文实例讲述了Android中CountDownTimer倒计时器用法.分享给大家供大家参考,具体如下: 在平时我们编程的时候,经常会用到倒计时这个功能,很多人不知道Android已经帮封装好了一个类,往往都自己写.现在发现了这个类,大家共享一下: 在一个TextView不断显示剩下的时间,代码如下: private TextView vertifyView; private CountDownTimer timer = new CountDownTimer(10000, 1000) { @Ov

  • android自定义倒计时控件示例

    自定义TextView控件TimeTextView代码: 复制代码 代码如下: import android.content.Context;import android.content.res.TypedArray;import android.graphics.Paint;import android.text.Html;import android.util.AttributeSet;import android.widget.TextView; import com.new0315.R;

  • Android实现加载广告图片和倒计时的开屏布局

    这是一个android开屏布局的实例,可以用于加载广告图片和倒计时的布局.程序中设置的LayoutParams,划分额外空间比例为6分之5,具体权重比例可根据用户自己需求来自定义,异步加载广告图片,相关的Android代码. 具体实现代码如下: package cn.waps.extend; import android.app.Activity; import android.content.Context; import android.content.res.Configuration;

  • Android 实现闪屏页和右上角的倒计时跳转实例代码

    以前编程的时候,遇到倒计时的功能时,经常自己去写,但其实Android已经帮封装好了一个倒计时类CountDownTimer,其实是将后台线程的创建和Handler队列封装成为了一个方便的类调用. 闪屏页用到了handler和CountDownTimer类,还需配置一下Activity的主题,这里是:android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 全屏主题的意思. 给大家展示下效果图: 代码如下所示: package

  • Android利用Chronometer实现倒计时功能

    项目需要实现一个计时的功能,利用Chronometer虽然可以很方便的实现计时功能,但需要的却是一个倒计时控件. 百度了一下方法不少,倒计时的却没有,于是用Chronometer封装了一个倒计时的类,本着开源的精神,分享给大家! 废话不说了,进入主题 首先xml布局如下: <com.example.anticlockwisedemo.Anticlockwise android:id="@+id/id_timer" android:layout_width="wrap_c

  • Android自定义圆形倒计时进度条

    效果预览 源代码传送门:https://github.com/yanzhenjie/CircleTextProgressbar 实现与原理 这个文字圆形的进度条我们在很多APP中看到过,比如APP欢迎页倒计时,下载文件倒计时等. 分析下原理,可能有的同学一看到这个自定义View就慌了,这个是不是要继承View啊,是不是要绘制啊之类的,答案是:是的.但是我们也不要担心,实现这个效果实在是so easy.下面就跟我一起来看看核心分析和代码吧. 原理分析 首先我们观察上图,需要几个部分组成: 1. 外

  • Android实现倒计时30分钟功能

    以30分钟为例写的一个倒计时: 直接上代码 public class MainActivity extends AppCompatActivity { private int minute = 30;//这是分钟 private int second = 0;//这是分钟后面的秒数.这里是以30分钟为例的,所以,minute是30,second是0 private TextView timeView; private Timer timer; private TimerTask timerTas

随机推荐