首页 > 系统 > Android > 正文

android倒计时控件示例

2020-01-02 07:01:35
字体:
来源:转载
供稿:网友

本文为大家分享了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软件编程有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表