倒计时

来源:互联网 发布:unity3d素材包 编辑:程序博客网 时间:2024/05/29 05:55
/** * Created by Administrator on 2017/2/16. * 抽取出来的倒计时工具类 */public class CountDownUtil2 {    private final static int SECOND = 0;    private final static int MINUS = 1;    private final static int HORE = 2;    //TODO 我这个地方使用的是用textview显示的文本    private TextView mTvTime;    private static Handler mHandler = new Handler(new Handler.Callback() {        private int mHour;        private int mMinus;        Bundle data = null;        int second;        @Override        public boolean handleMessage(Message msg) {            //TODO 根据what判断是那个传递过来的数据            //TODO 分为小时类型.分钟类型.秒类型            /**             * 如果是小时类型需要判断当前的小时是否为小于0等于0也在内             * 如果小于0的话就使用分钟的,同理如果分钟的小于等于0的话就调用秒的             */            switch (msg.what) {                case SECOND://秒                    data = msg.getData();                    second = (int) data.get("second");                    //再次执行倒计时操作                    selectTime(mActivity, second);                    break;                case MINUS:                    data = msg.getData();                    second = data.getInt("second");                    mMinus = data.getInt("minus");                    //判断当前的分钟是否为0                    if (mMinus == 0) {//调用秒的方法                        selectTime(mActivity, second);                        mHandler.removeCallbacks(minusRun);//移除分钟轮询                    } else {//掉用分钟的方法                        selectTime(mActivity, mMinus, second);                    }                    break;                case HORE:                    data = msg.getData();                    second = data.getInt("second");                    mMinus = data.getInt("minus");                    mHour = data.getInt("hour");                    if (mHour == 0) {                        selectTime(mActivity, mMinus, second);                        //移除小时轮询                        mHandler.removeCallbacks(hourRun);                    } else {                        selectTime(mActivity, mHour, mMinus, second);                    }                    break;            }            return false;        }    });    private static int mCurrentSecond;    private static int mCurrentMinus;    private static int mCurrentHour;    //构造函数将显示文本的view传递过来    private static MainActivity mActivity;    //倒计时首先需要规定倒计时的事件,包含时分秒    public static void selectTime(MainActivity mActivity, int hour, int minus, int second) {        CountDownUtil2.mActivity = mActivity;        mCurrentHour = hour;        mCurrentMinus = minus;        mCurrentSecond = second;        if (mCurrentMinus < 0 || mCurrentSecond < 0 || mCurrentMinus > 60 ||                mCurrentSecond > 60 || mCurrentHour < 0 || mCurrentHour > 24) {            //TODO 如果输入的数据小于或等于0表示时间格式不正确,进行提醒//            return;        }        //判断当前秒是否为0,等于0分钟就减少1秒变为59,如果分钟变成了0就调用下面的方法        if (mCurrentSecond <= 0) {            if (mCurrentMinus >= 2) {                mCurrentHour = 0;                mCurrentMinus = mCurrentMinus - 1;                mCurrentSecond = 59;            } else if (mCurrentHour >= 1) {                mCurrentHour = mCurrentHour - 1;                mCurrentMinus = 59;                mCurrentSecond = 59;            }        }//        mTvTime.setText(mCurrentHour + " :" + mCurrentMinus + " :" + mCurrentSecond);        setTime(mCurrentHour, mCurrentMinus, mCurrentSecond);        //进入倒计时        mHandler.postDelayed(hourRun, 1000);    }    //小时    static Runnable hourRun = new Runnable() {        @Override        public void run() {            //TODO 设置为1s后改变一下时间,将信息发送            Message message = mHandler.obtainMessage();            message.what = HORE;            mCurrentSecond = mCurrentSecond - 1;            Bundle bundle = new Bundle();            bundle.putInt("second", mCurrentSecond);            bundle.putInt("minus", mCurrentMinus);            bundle.putInt("hour", mCurrentHour);            //将数据发送出去            message.setData(bundle);            mHandler.sendMessage(message);        }    };    /**     * 设置显示时间     */    private static void setTime(int hour, int min, int second) {        if(hour == 0 && min == 0 && second == 0){            mActivity.mPopup.dismiss();            return;        }        getDateTime.showTime(hour, min, second);    }    //设置倒计时包含分秒    public static void selectTime(MainActivity mActivity, int minus, int second) {        CountDownUtil2.mActivity = mActivity;        mCurrentMinus = minus;        mCurrentSecond = second;        if (mCurrentMinus <= 0 || mCurrentSecond < 0 || mCurrentMinus >= 60 || mCurrentSecond >= 60) {            //TODO 如果输入的数据小于或等于0表示时间格式不正确,进行提醒            return;        }        //判断当前秒是否为0,等于0分钟就减少1秒变为59,如果分钟变成了0就调用下面的方法        if (mCurrentSecond <= 0) {            if (mCurrentMinus >= 1) {                mCurrentHour = 0;                mCurrentMinus = mCurrentMinus - 1;                mCurrentSecond = 59;            }        }//        mTvTime.setText(mCurrentHour + " :" + mCurrentMinus + " :" + mCurrentSecond);        setTime(0, mCurrentMinus, mCurrentSecond);        //进入倒计时        mHandler.postDelayed(minusRun, 1000);    }    static Runnable minusRun = new Runnable() {        @Override        public void run() {            //TODO 设置为1s后改变一下时间,将信息发送            Message message = mHandler.obtainMessage();            message.what = MINUS;            mCurrentSecond = mCurrentSecond - 1;            Bundle bundle = new Bundle();            bundle.putInt("hour", mCurrentHour);            bundle.putInt("second", mCurrentSecond);            bundle.putInt("minus", mCurrentMinus);            //将数据发送出去            message.setData(bundle);            mHandler.sendMessage(message);        }    };    //秒的倒计时    static Runnable secondRun = new Runnable() {        @Override        public void run() {            //TODO 设置为1s后改变一下时间,将信息发送            Message message = mHandler.obtainMessage();            message.what = SECOND;            //判断当前的数据是否为0.如果为0提示倒计时结束否则数据减一            synchronized (CountDownUtil2.class) {                if (mCurrentSecond < 1 && mCurrentSecond >= 0) {                    //关闭弹出窗                    mHandler.removeCallbacks(secondRun);//关闭线程防止消耗内存                    synchronized (CountDownUtil2.class) {                        if (mCurrentSecond == 0) {                            //倒计时结束执行相应的操作                        }                    }                }                mCurrentSecond = mCurrentSecond - 1;            }            Bundle bundle = new Bundle();            bundle.putInt("second", mCurrentSecond);            //将数据发送出去            message.setData(bundle);            mHandler.sendMessage(message);        }    };    //设计倒计时包含秒    public static synchronized void selectTime(MainActivity mActivity, int second) {        CountDownUtil2.mActivity = mActivity;        mCurrentSecond = second;        if (second > 60) {            //TODO 提示当前设置的时间不符合规定            return;        }//        mTvTime.setText(+mCurrentSecond + "s");        setTime(0, 0, mCurrentSecond);        //设置定时器.每隔1s就减少一个数字        mHandler.postDelayed(secondRun, 1000);    }    /**     * 移除倒计时     */    public static void removeTime() {        mHandler.removeCallbacks(hourRun);        mHandler.removeCallbacks(minusRun);        mHandler.removeCallbacks(secondRun);    }    private static GetDateTime getDateTime;    public interface GetDateTime {        void showTime(int hour, int miu, int second);    }    public static void setGetDateTime(GetDateTime getDateTime) {        CountDownUtil2.getDateTime = getDateTime;    }}
原创粉丝点击