栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

使用CountDownTimer类轻松实现倒计时功能

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用CountDownTimer类轻松实现倒计时功能

CountDownTimer由系统提供
查资料的时候 发现了CountDownTimer这个类之后 果断抛弃了以前的倒计时做法

功能:
30秒倒计时 每次间隔1秒

参数:
mc.start();方法开始

mc.cancel();方法结束
new MyCountDownTimer(30000, 1000); 第一个参数表示 总的时间为30000毫秒,间隔1000毫秒

直接上代码:

package com.example.daojishi; 
 
import android.app.Activity; 
import android.os.Bundle; 
import android.os.CountDownTimer; 
import android.util.Log; 
import android.view.View; 
import android.widget.TextView; 
import android.widget.Toast; 
 
 
public class MainActivity extends Activity { 
 
  private MyCountDownTimer mc; 
  private TextView tv; 
 
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    tv = (TextView) findViewById(R.id.show); 
    mc = new MyCountDownTimer(30000, 1000); 
    mc.start(); 
  } 
 
  public void oncancel(View view) { 
    Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_LONG).show();// toast有显示时间延迟 
    mc.cancel(); 
  } 
 
  public void restart(View view) { 
    Toast.makeText(MainActivity.this, "重新开始", Toast.LENGTH_LONG).show();// toast有显示时间延迟 
    mc.start(); 
  } 
 
   
 
  class MyCountDownTimer extends CountDownTimer { 
     
    public MyCountDownTimer(long millisInFuture, long countDownInterval) { 
      super(millisInFuture, countDownInterval); 
    } 
 
    @Override 
    public void onFinish() { 
      tv.setText("done"); 
    } 
 
    @Override 
    public void onTick(long millisUntilFinished) { 
      Log.i("MainActivity", millisUntilFinished + ""); 
      tv.setText("倒计时(" + millisUntilFinished / 1000 + ")..."); 
    } 
  } 
} 
//┏┓   ┏┓ 
//┏┛┻━━━┛┻┓ 
//┃       ┃   
//┃   ━   ┃ 
//┃ ┳┛ ┗┳ ┃ 
//┃       ┃ 
//┃   ┻   ┃ 
//┃       ┃ 
//┗━┓   ┏━┛ 
//┃   ┃  神兽保佑         
//┃   ┃  代码无BUG! 
//┃   ┗━━━┓ 
//┃       ┣┓ 
//┃       ┏┛ 
//┗┓┓┏━┳┓┏┛ 
// ┃┫┫ ┃┫┫ 
// ┗┻┛ ┗┻┛ 

布局:

 
 
   
 
  

附:
CountDownTimer源码:

 
 
package android.os; 
 
import android.util.Log; 
 
 
public abstract class CountDownTimer { 
 
   
  private final long mMillisInFuture; 
 
   
  private final long mCountdownInterval; 
 
  private long mStopTimeInFuture; 
 
   
  public CountDownTimer(long millisInFuture, long countDownInterval) { 
    mMillisInFuture = millisInFuture; 
    mCountdownInterval = countDownInterval; 
  } 
 
   
  public final void cancel() { 
    mHandler.removeMessages(MSG); 
  } 
 
   
  public synchronized final CountDownTimer start() { 
    if (mMillisInFuture <= 0) { 
      onFinish(); 
      return this; 
    } 
    mStopTimeInFuture = SystemClock.elapsedRealtime() + mMillisInFuture; 
    mHandler.sendMessage(mHandler.obtainMessage(MSG)); 
    return this; 
  } 
 
 
   
  public abstract void onTick(long millisUntilFinished); 
 
   
  public abstract void onFinish(); 
 
 
  private static final int MSG = 1; 
 
 
  // handles counting down 
  private Handler mHandler = new Handler() { 
 
    @Override 
    public void handleMessage(Message msg) { 
 
      synchronized (CountDownTimer.this) { 
 final long millisLeft = mStopTimeInFuture - SystemClock.elapsedRealtime(); 
 
 if (millisLeft <= 0) { 
   onFinish(); 
 } else if (millisLeft < mCountdownInterval) { 
   // no tick, just delay until done 
   sendMessageDelayed(obtainMessage(MSG), millisLeft); 
 } else { 
   long lastTickStart = SystemClock.elapsedRealtime(); 
   onTick(millisLeft); 
 
   // take into account user's onTick taking time to execute 
   long delay = lastTickStart + mCountdownInterval - SystemClock.elapsedRealtime(); 
 
   // special case: user's onTick took more than interval to 
   // complete, skip to next interval 
   while (delay < 0) delay += mCountdownInterval; 
 
   sendMessageDelayed(obtainMessage(MSG), delay); 
 } 
      } 
    } 
  }; 
} 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/164562.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号