当前位置: 首页 > 编程笔记 >

android倒计时控件示例

轩辕实
2023-03-14
本文向大家介绍android倒计时控件示例,包括了android倒计时控件示例的使用技巧和注意事项,需要的朋友参考一下

本文为大家分享了android倒计时控件,供大家参考,具体代码如下

/*
 * Copyright (C) 2012 The * Project
 * All right reserved.
 * Version 1.00 2012-2-11
 * Author veally@foxmail.com
 */
package com.ly.sxh.view;
 
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;
 
import java.util.Calendar;
 
/**
 * Custom digital clock
 * 倒计时控件
 *
 * @author
 */
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();
  }
 
}

希望本文所述对大家学习Android软件编程有所帮助。

 类似资料:
  • 本文向大家介绍Android 倒计时控件 CountDownView的实例代码详解,包括了Android 倒计时控件 CountDownView的实例代码详解的使用技巧和注意事项,需要的朋友参考一下 一个精简可自定义的倒计时控件,使用 Canvas.drawArc() 绘制。实现了应用开屏页的圆环扫过的进度条效果。 代码见https://github.com/hanjx-dut/CountDown

  • 我的应用程序检查是否有一个带有日期的文件。 如果有日期,它将计算今天和该(未来)日期之间的差值,并初始化计时器,以X天Y小时Z分S秒的方式倒计时到该日期。 如果没有文件,则用户可以通过按钮选择日期。程序将在文件中存储日期并设置倒计时。 有一个删除按钮可以删除日期并选择其他日期。此删除按钮应取消计时器,使其停止计数。 当我取消计时器时,计时器不会停止。我的计时器滴答作响,但相差2秒,而不是1秒。显示

  • 本文向大家介绍Android自带倒计时控件Chronometer使用方法详解,包括了Android自带倒计时控件Chronometer使用方法详解的使用技巧和注意事项,需要的朋友参考一下 公司的以前的项目,看到使用了这个Android自带的倒计时控件Chronometer,现在整合了一下 先看看效果: 方法简介: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍js倒计时显示实例,包括了js倒计时显示实例的使用技巧和注意事项,需要的朋友参考一下 话不多说,请看实例代码 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持呐喊教程!

  • 问题内容: 我在一堂课(名为“欢迎”)中有一个“状态” JLabel,而在另一堂课(名为Timer)中有一个计时器。现在,第一个显示“状态”一词,第二个应该进行倒计时。我想要的样子,但不知道如何显示10、9、8、7 … 0(然后转到下一个窗口)。到目前为止,我的尝试: 和计时器: 问题答案: 我同意您应该考虑按照Anh Pham使用“ Java”计时器,但是实际上,有几个可用的Timer类,并且出

  • 本文向大家介绍Android倒计时神器(CountDownTimer),包括了Android倒计时神器(CountDownTimer)的使用技巧和注意事项,需要的朋友参考一下 Android倒计时神器 - CountDownTimer,供大家参考,具体内容如下 啥是CountDownTimer?​ CountDownTimer是Andorid.os包下一个谷歌为我们封装好的一个倒计时工具。我们吗、