android倒計時控制項樣本_Android

來源:互聯網
上載者:User

本文為大家分享了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軟體編程有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.