Android实现倒计时效果

本文实例为大家分享了Android实现倒计时效果的具体代码,供大家参考,具体内容如下

一个倒计时的效果

先看效果图:

Android实现倒计时效果_第1张图片

直接上代码:

这里是关于倒计时 …天时分秒…的逻辑判断

/**
  * 倒计时计算
  */
 private void computeTime() {
  mSecond--;
  if (mSecond < 0) {
   mMin--;
   mSecond = 59;
   if (mMin < 0) {
    mMin = 59;
    mHour--;
    if (mHour < 0) {
     // 倒计时结束
     mHour = 23;
     mDay--;
     if(mDay < 0){
      // 倒计时结束
      mDay = 0;
      mHour= 0;
      mMin = 0;
      mSecond = 0;
     }
    }
   }
  }
}

定时器主要代码如下…当然也可以开线程或者开后台服务来处理…只是没那种必要…定时器就可以搞定容易控制…毕竟倒计时时间起点…你总得后台获取吧,不是做时钟闹钟…如果是做时钟闹钟…拿你也不用考虑后台服务或者自己开线程…而是使用AlarmManager来实现

/**
  * 开启倒计时
  * //time为Date类型:在指定时间执行一次。
  *  timer.schedule(task, time);
  * //firstTime为Date类型,period为long,表示从firstTime时刻开始,每隔period毫秒执行一次。
  *  timer.schedule(task, firstTime,period);
  * //delay 为long类型:从现在起过delay毫秒执行一次。
  *  timer.schedule(task, delay);
  * //delay为long,period为long:从现在起过delay毫秒以后,每隔period毫秒执行一次。
  *  timer.schedule(task, delay,period);
  */
 private void startRun() {
  TimerTask mTimerTask = new TimerTask() {
   @Override
   public void run() {
    Message message = Message.obtain();
    message.what = 1;
    timeHandler.sendMessage(message);
   }
  };
  mTimer.schedule(mTimerTask,0,1000);
 }

修改界面,利用handler来提醒更新界面

private Handler timeHandler = new Handler() {
  @Override
  public void handleMessage(Message msg) {
   super.handleMessage(msg);
   if (msg.what == 1) {
    computeTime();
    mDays_Tv.setText(mDay+"");//天数不用补位
    mHours_Tv.setText(getTv(mHour));
    mMinutes_Tv.setText(getTv(mMin));
    mSeconds_Tv.setText(getTv(mSecond));
    if (mSecond == 0 && mDay == 0 && mHour == 0 && mMin == 0 ) {
     mTimer.cancel();
    }
   }
  }
 };
 
 private String getTv(long l){
  if(l>=10){
   return l+"";
  }else{
   return "0"+l;//小于10,,前面补位一个"0"
  }
 }

附带主activity的代码…

import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;
 
import java.util.Timer;
import java.util.TimerTask;
 
public class MainActivity extends AppCompatActivity {
 
 private RelativeLayout countDown;
 // 倒计时
 private TextView mDays_Tv, mHours_Tv, mMinutes_Tv, mSeconds_Tv;
 
 private long mDay = 23;// 天
 private long mHour = 11;//小时,
 private long mMin = 56;//分钟,
 private long mSecond = 32;//秒
 
 private Timer mTimer;
 
 private Handler timeHandler = new Handler() {
  @Override
  public void handleMessage(Message msg) {
   super.handleMessage(msg);
   if (msg.what == 1) {
    computeTime();
    mDays_Tv.setText(mDay+"");//天数不用补位
    mHours_Tv.setText(getTv(mHour));
    mMinutes_Tv.setText(getTv(mMin));
    mSeconds_Tv.setText(getTv(mSecond));
    if (mSecond == 0 && mDay == 0 && mHour == 0 && mMin == 0 ) {
     mTimer.cancel();
    }
   }
  }
 };
 
 private String getTv(long l){
  if(l>=10){
   return l+"";
  }else{
   return "0"+l;//小于10,,前面补位一个"0"
  }
 }
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  mTimer = new Timer();
  countDown = (RelativeLayout) findViewById(R.id.countdown_layout);
  mDays_Tv = (TextView) findViewById(R.id.days_tv);
  mHours_Tv = (TextView) findViewById(R.id.hours_tv);
  mMinutes_Tv = (TextView) findViewById(R.id.minutes_tv);
  mSeconds_Tv = (TextView) findViewById(R.id.seconds_tv);
  startRun();
 }
 
 /**
  * 开启倒计时
  * //time为Date类型:在指定时间执行一次。
  *  timer.schedule(task, time);
  * //firstTime为Date类型,period为long,表示从firstTime时刻开始,每隔period毫秒执行一次。
  *  timer.schedule(task, firstTime,period);
  * //delay 为long类型:从现在起过delay毫秒执行一次。
  *  timer.schedule(task, delay);
  * //delay为long,period为long:从现在起过delay毫秒以后,每隔period毫秒执行一次。
  *  timer.schedule(task, delay,period);
  */
 private void startRun() {
  TimerTask mTimerTask = new TimerTask() {
   @Override
   public void run() {
    Message message = Message.obtain();
    message.what = 1;
    timeHandler.sendMessage(message);
   }
  };
  mTimer.schedule(mTimerTask,0,1000);
 }
 
 /**
  * 倒计时计算
  */
 private void computeTime() {
  mSecond--;
  if (mSecond < 0) {
   mMin--;
   mSecond = 59;
   if (mMin < 0) {
    mMin = 59;
    mHour--;
    if (mHour < 0) {
     // 倒计时结束
     mHour = 23;
     mDay--;
     if(mDay < 0){
      // 倒计时结束
      mDay = 0;
      mHour= 0;
      mMin = 0;
      mSecond = 0;
     }
    }
   }
  }
 }
}

附带xml的代码



 
 
 
  
 
  
 
  
 
  
 
 
 
 
  
 
  
 
  
 
  
 
  
 
 

完美实现,直接用就可以了。

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

你可能感兴趣的:(Android实现倒计时效果)