好多商城软件和彩票软件都有一个距离截止日期的一个倒计时功能,今天专门抽出时间整理了这个功能的demo。如下是彩票中距离开奖时间的倒计时效果,下面我根据这个效果,自己写一个demo,以供更多的人参考和学习。
代码如下:
public class MainActivity extends Activity {
private static final int HALL_COUNT_TIME = 0;
// 剩余的时间,可以从服务器端或者这个属性
private static int millis1 = 10000;
private static int millis2 = 200000;
private static int millis3 = 30000000;
private TextView textView1;
private TextView textView2;
private TextView textView3;
/**
* 获取人性化的倒计时时间显示
*
* @param millis 时间总和
* @return 显示的倒计时格式
*/
private static StringBuilder betLastTime;
private Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case HALL_COUNT_TIME:
// 一秒一秒的倒计时
refreshCountTimeView();
break;
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
textView1 = (TextView) findViewById(R.id.textView1);
textView2 = (TextView) findViewById(R.id.textView2);
textView3 = (TextView) findViewById(R.id.textView3);
mHandler.sendEmptyMessage(HALL_COUNT_TIME);
}
private void refreshCountTimeView() {
millis1 = millis1 - 1000;
millis2 = millis2 - 1000;
millis3 = millis3 - 1000;
mHandler.sendEmptyMessageDelayed(HALL_COUNT_TIME, 1000);
if (millis1 <= 0) {
textView1.setText("到时间了");
} else {
textView1.setText(getCountDownTime(millis1));
}
textView2.setText(getCountDownTime(millis2));
textView3.setText(getCountDownTime(millis3));
}
public String getCountDownTime(long millis) {
if (betLastTime == null) {
betLastTime = new StringBuilder();
}
betLastTime.delete(0, betLastTime.length());
int seconds = (int) millis / 1000;
int minutes = seconds / 60;
int hours = minutes / 60;
int day = hours / 24;
seconds %= 60;
minutes %= 60;
hours %= 24;
day %= 24;
if (day != 0) {
betLastTime.append(day + "天" + hours + "小时");
}
else {
if (hours != 0) {
betLastTime.append(hours + "小时");
if (minutes < 10)
betLastTime.append("0");
betLastTime.append(minutes + "分");
}
else {
if (minutes < 10)
betLastTime.append("0");
betLastTime.append(minutes + "分");
if (seconds < 10)
betLastTime.append("0");
betLastTime.append(seconds + "秒");
}
}
return betLastTime.toString();
}
}
时间从服务器上获取的时候,还需要减小误差,参考代码:
服务器系统时间和本地时间的差距,gapTimeMillis=systemTime-localTime,用来精确计算lastTimeMillis=endtime-localtime+gaptime,因为handler的时间不准
mLastTime = lotteryInf.getEndTime() - System.currentTimeMillis() - lotteryInf.getGapTimeMillis();
lotteryInf.setLastTimeMillis(mLastTime);