Android倒计时

因为项目需要,做了一个限时抢购的倒计时,其中是天,时,分,上面上截图和代码:这个是活动结束了。。

Android倒计时


public class Tasktimer extends Chronometer {
    public Tasktimer(Context context, AttributeSet attrs) {
        super(context, attrs);

        mTimeFormat = new SimpleDateFormat("hh:mm:ss");
        this.setOnChronometerTickListener(listener);
    }

    private long mTime;
    private long mNextTime;
    private OnTimeCompleteListener mListener;
    private SimpleDateFormat mTimeFormat;

    public Tasktimer(Context context) {
        super(context);

    }


    /**
     * 设置时间格式
     *
     * @param pattern 计时格式
     */
    public void setTimeFormat(String pattern) {
        mTimeFormat = new SimpleDateFormat(pattern);
    }

    public void setOnTimeCompleteListener(OnTimeCompleteListener l) {
        mListener = l;
    }

    OnChronometerTickListener listener = new OnChronometerTickListener() {
        @Override
        public void onChronometerTick(Chronometer chronometer) {
            if (mNextTime <= 0) {
                if (mNextTime == 0) {
                    Tasktimer.this.stop();
                    if (null != mListener)
                        mListener.onTimeComplete();
                }
                mNextTime = 0;
                updateTimeText();
                return;
            }

            mNextTime--;

            updateTimeText();
        }
    };

    //初始化时间(秒)
    public void initTime(long _time_s) {
        mTime = mNextTime = _time_s;
        updateTimeText();
    }

    //初始化时间(分秒)
    public void initTime(long _time_h, long _time_m, long _time_s) {
        initTime(_time_h * 3600 + _time_m * 60 + _time_s);
    }

    private void updateTimeText() {
        this.setText(FormatMiss(mNextTime));
    }

    // 将秒转化成小时分钟秒
    public static String FormatMiss(long miss) {
        String hh = miss / 3600 > 9 ? miss / 3600 + "" : "0" + miss / 3600;
        String mm = (miss % 3600) / 60 > 9 ? (miss % 3600) / 60 + "" : "0" + (miss % 3600) / 60;
        String ss = (miss % 3600) % 60 > 9 ? (miss % 3600) % 60 + "" : "0" + (miss % 3600) % 60;
        return hh + ":" + mm + ":" + ss;
    }

    public interface OnTimeCompleteListener {
        void onTimeComplete();
    }

}

这个是之前百度到某位仁兄的一个类,不好意思找不到链接。不然就给你贴上去了。接着上代码:
新建一个activity,

private String time;//倒计时
private Tasktimer mTasktimer;


mTasktimer = (Tasktimer) findViewById(R.id.task_timer_textview);

if (time != null) {
    mTasktimer.initTime(Long.parseLong(time));
    mTasktimer.start();
    mTasktimer.setOnTimeCompleteListener(new Tasktimer.OnTimeCompleteListener() {
        @Override
        public void onTimeComplete() {
            freeBtn.setBackgroundResource(R.drawable.btn_unable);//对倒计时结束时做的操作
        }
    });
}
基本搞定了,方便大家,贴上xml文件。

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="10dp"
    android:gravity="right"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/deadline_tv"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:text="距离结束还有"
        android:textColor="@color/fuzhutitle"
        android:textSize="12sp" />

    <com.example.utils.Tasktimer//这个是你自己包的路径
        android:id="@+id/task_timer_textview"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"
        android:layout_marginRight="20px"
        android:textColor="@color/text_color"
        android:textSize="12sp" />
</LinearLayout>

注意一下,这边的time是后台返回的秒数,我觉得着这样子比较安全,就不在本地做计算时间的操作了。