本文实例为大家分享了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来实现
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();
}
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的代码
完美实现,直接用就可以了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。



