android 商品倒计时,Android自定义DigitalClock控件实现商品倒计时

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

自定义DigitalClock控件:

package com.veally.timesale;

import java.util.Calendar;

import android.content.Context;

import android.database.ContentObserver;

import android.os.Handler;

import android.os.SystemClock;

import android.provider.Settings;

import android.util.AttributeSet;

import android.widget.DigitalClock;

/**

* Custom digital clock

* @author veally@foxmail.com

*/

public class CustomDigitalClock extends DigitalClock {

Calendar mCalendar;

private final static String m12 = "h:mm aa";

private final static String m24 = "k:mm";

private FormatChangeObserver mFormatChangeObserver;

private Runnable mTicker;

private Handler mHandler;

private long endTime;

private ClockListener mClockListener;

private boolean mTickerStopped = false;

@SuppressWarnings("unused")

private String mFormat;

public CustomDigitalClock(Context context) {

super(context);

initClock(context);

}

public CustomDigitalClock(Context context, AttributeSet attrs) {

super(context, attrs);

initClock(context);

}

private void initClock(Context context) {

if (mCalendar == null) {

mCalendar = Calendar.getInstance();

}

mFormatChangeObserver = new FormatChangeObserver();

getContext().getContentResolver().registerContentObserver(Settings.System.CONTENT_URI, true, mFormatChangeObserver);

setFormat();

}

@Override

protected void onAttachedToWindow() {

mTickerStopped = false;

super.onAttachedToWindow();

mHandler = new Handler();

/**

* requests a tick on the next hard-second boundary

*/

mTicker = new Runnable() {

public void run() {

if (mTickerStopped)

return;

long currentTime = System.currentTimeMillis();

if (currentTime / 1000 == endTime / 1000 - 5 * 60) {

mClockListener.remainFiveMinutes();

}

long distanceTime = endTime - currentTime;

distanceTime /= 1000;

if (distanceTime == 0) {

setText("00:00:00");

onDetachedFromWindow();

mClockListener.timeEnd();

} else if (distanceTime < 0) {

setText("00:00:00");

} else {

setText(dealTime(distanceTime));

}

invalidate();

long now = SystemClock.uptimeMillis();

long next = now + (1000 - now % 1000);

mHandler.postAtTime(mTicker, next);

}

};

mTicker.run();

}

/**

* deal time string

*

* @param time

* @return

*/

public static String dealTime(long time) {

StringBuffer returnString = new StringBuffer();

long day = time / (24 * 60 * 60);

long hours = (time % (24 * 60 * 60)) / (60 * 60);

long minutes = ((time % (24 * 60 * 60)) % (60 * 60)) / 60;

long second = ((time % (24 * 60 * 60)) % (60 * 60)) % 60;

String dayStr = String.valueOf(day);

String hoursStr = timeStrFormat(String.valueOf(hours));

String minutesStr = timeStrFormat(String.valueOf(minutes));

String secondStr = timeStrFormat(String.valueOf(second));

returnString.append(hoursStr).append(":").append(minutesStr).append(":").append(secondStr);

return returnString.toString();

}

/**

* format time

*

* @param timeStr

* @return

*/

private static String timeStrFormat(String timeStr) {

switch (timeStr.length()) {

case 1:

timeStr = "0" + timeStr;

break;

}

return timeStr;

}

@Override

protected void onDetachedFromWindow() {

super.onDetachedFromWindow();

mTickerStopped = true;

}

/**

* Clock end time from now on.

*

* @param endTime

*/

public void setEndTime(long endTime) {

this.endTime = endTime;

}

/**

* Pulls 12/24 mode from system settings

*/

private boolean get24HourMode() {

return android.text.format.DateFormat.is24HourFormat(getContext());

}

private void setFormat() {

if (get24HourMode()) {

mFormat = m24;

} else {

mFormat = m12;

}

}

private class FormatChangeObserver extends ContentObserver {

public FormatChangeObserver() {

super(new Handler());

}

@Override

public void onChange(boolean selfChange) {

setFormat();

}

}

public void setClockListener(ClockListener clockListener) {

this.mClockListener = clockListener;

}

public interface ClockListener{

void timeEnd();

void remainFiveMinutes();

}

}

使用:

remainTime.setEndTime(mItems.get(position).getRemainTime());

remainTime.setClockListener(new CustomDigitalClock.ClockListener() { // register the clock's listener

@Override

public void timeEnd() {

// The clock time is ended.

}

@Override

public void remainFiveMinutes() {

// The clock time is remain five minutes.

}

});

倒计时剩余时间最好从服务器获取。

原创作者:veally@foxmail.com 源链接不详,工作用到就记录分享下!

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值