Android实现倒计时效果

2020-10-15 0 788

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

一个倒计时的效果

先看效果图:

Android实现倒计时效果

直接上代码:

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

/**
  * 倒计时计算
  */
 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的代码

<?xml version=\"1.0\" encoding=\"utf-8\"?>
<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"
    xmlns:tools=\"http://schemas.android.com/tools\"
    android:id=\"@+id/countdown_layout\"
    android:layout_width=\"match_parent\"
    android:layout_height=\"match_parent\"
    android:background=\"@android:color/white\"
    android:gravity=\"center\" >
 
 <RelativeLayout
  android:id=\"@+id/daojishi_rl\"
  android:layout_width=\"match_parent\"
  android:layout_height=\"40.0dip\"
  android:layout_marginLeft=\"10.0dip\"
  android:layout_marginRight=\"10.0dip\"
  android:gravity=\"center\" >
 
  <ImageView
   android:id=\"@+id/describe_iv\"
   android:layout_width=\"40dp\"
   android:layout_height=\"40dp\"
   android:src=\"@mipmap/img\"
   android:scaleType=\"fitXY\"
   android:gravity=\"center_vertical\" />
 
  <TextView
   android:id=\"@+id/describe_tv\"
   android:layout_width=\"wrap_content\"
   android:layout_height=\"wrap_content\"
   android:layout_centerVertical=\"true\"
   android:layout_marginRight=\"5.0dip\"
   android:layout_toRightOf=\"@+id/describe_iv\"
   android:text=\"距离开团还有\"
   android:textSize=\"25sp\" />
 
  <TextView
   android:id=\"@+id/days_tv\"
   android:layout_width=\"wrap_content\"
   android:layout_height=\"wrap_content\"
   android:layout_centerVertical=\"true\"
   android:padding=\"4dp\"
   android:layout_toRightOf=\"@+id/describe_tv\"
   android:background=\"#c2c2c2\"
   android:gravity=\"center\"
   android:text=\"\"
   android:textSize=\"20sp\" />
 
  <TextView
   android:id=\"@+id/colon0\"
   android:layout_width=\"wrap_content\"
   android:layout_height=\"wrap_content\"
   android:layout_centerVertical=\"true\"
   android:layout_marginLeft=\"5.0dip\"
   android:layout_marginRight=\"3.0dip\"
   android:layout_toRightOf=\"@+id/days_tv\"
   android:text=\"天\"
   android:textSize=\"20sp\"
   android:textStyle=\"bold\" />
 </RelativeLayout>
 
 <RelativeLayout
  android:layout_width=\"match_parent\"
  android:layout_height=\"wrap_content\"
  android:layout_below=\"@+id/daojishi_rl\"
  android:gravity=\"center_horizontal\" >
 
  <TextView
   android:id=\"@+id/hours_tv\"
   android:layout_width=\"wrap_content\"
   android:layout_height=\"wrap_content\"
   android:layout_centerVertical=\"true\"
   android:layout_toLeftOf=\"@+id/colon1\"
   android:background=\"#c2c2c2\"
   android:gravity=\"center\"
   android:text=\"23\"
   android:padding=\"3dp\"
   android:textSize=\"20sp\" />
 
  <TextView
   android:id=\"@+id/colon1\"
   android:layout_width=\"wrap_content\"
   android:layout_height=\"wrap_content\"
   android:layout_centerVertical=\"true\"
   android:layout_marginLeft=\"3.0dip\"
   android:layout_marginRight=\"3.0dip\"
   android:layout_toLeftOf=\"@+id/minutes_tv\"
   android:text=\":\"
   android:textSize=\"20sp\"
   android:textStyle=\"bold\" />
 
  <TextView
   android:id=\"@+id/minutes_tv\"
   android:layout_width=\"wrap_content\"
   android:layout_height=\"wrap_content\"
   android:layout_centerVertical=\"true\"
   android:layout_toLeftOf=\"@+id/colon2\"
   android:background=\"#c2c2c2\"
   android:gravity=\"center\"
   android:text=\"59\"
   android:padding=\"3dp\"
   android:textSize=\"20sp\" />
 
  <TextView
   android:id=\"@+id/colon2\"
   android:layout_width=\"wrap_content\"
   android:layout_height=\"wrap_content\"
   android:layout_centerVertical=\"true\"
   android:layout_marginLeft=\"3.0dip\"
   android:layout_marginRight=\"3.0dip\"
   android:layout_toLeftOf=\"@+id/seconds_tv\"
   android:text=\":\"
   android:textSize=\"20sp\"
   android:textStyle=\"bold\" />
 
  <TextView
   android:id=\"@+id/seconds_tv\"
   android:layout_width=\"wrap_content\"
   android:layout_height=\"wrap_content\"
   android:layout_alignParentRight=\"true\"
   android:layout_centerVertical=\"true\"
   android:background=\"#c2c2c2\"
   android:gravity=\"center\"
   android:text=\"59\"
   android:padding=\"3dp\"
   android:textSize=\"20sp\" />
 </RelativeLayout>
 
</RelativeLayout>

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

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

遇见资源网 Android Android实现倒计时效果 http://www.ox520.com/23791.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务