国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > 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軟件編程有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 绿春县| 财经| 雷州市| 延长县| 谷城县| 蒲江县| 梁山县| 阜平县| 固安县| 睢宁县| 长海县| 四会市| 诸暨市| 济宁市| 桦甸市| 思南县| 乐平市| 丹东市| 济源市| 杭锦旗| 溆浦县| 雅江县| 库车县| 蒙阴县| 双江| 桦甸市| 天镇县| 如东县| 明溪县| 永泰县| 靖宇县| 怀化市| 绥江县| 临清市| 读书| 开化县| 江孜县| 武隆县| 平山县| 荥阳市| 建阳市|