倒计时
来源:互联网 发布: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; }}
阅读全文
0 0
- 倒计时
- 倒计时
- 倒计时
- 倒计时
- 倒计时
- 倒计时
- 倒计时
- 倒计时
- 倒计时
- 倒计时、、、、、
- 倒计时
- 倒计时
- 倒计时
- 倒计时
- 倒计时
- 倒计时
- 倒计时
- 倒计时
- BZOJ 1022: [SHOI2008]小约翰的游戏John
- 网页幻灯片
- IDEA 关闭错误代码检测提示
- opencv2.4.13配置vs2013步骤
- 唯有原创,方可展现真实自我!
- 倒计时
- Altium Designer 原理图库2
- 再读《人人都是产品经理》
- java基础系列(四)--string工具类
- JavaScript 排序,不只是冒泡
- 封装表格table列求和方法
- maven的生命周期
- 免费建站推广活动
- Create Table in HANA DB