最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android自定義DigitalClock控件實現(xiàn)商品倒計時

 更新時間:2018年02月08日 14:30:21   作者:一葉飄舟  
這篇文章主要為大家詳細介紹了Android DigitalClock實現(xiàn)商品倒計時,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了DigitalClock實現(xiàn)商品倒計時的具體代碼,供大家參考,具體內(nèi)容如下

自定義DigitalClock控件:

package com.veally.timesale;

import java.util.Calendar;

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;

/**
 * Custom digital clock
 * @author veally@foxmail.com
 */
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();
 }

}

使用:

remainTime.setEndTime(mItems.get(position).getRemainTime());
 remainTime.setClockListener(new CustomDigitalClock.ClockListener() { // register the clock's listener

 @Override
 public void timeEnd() {
 // The clock time is ended.
 }

 @Override
 public void remainFiveMinutes() {
 // The clock time is remain five minutes.
 }
 });

倒計時剩余時間最好從服務(wù)器獲取。

代碼下載:DigitalClock實現(xiàn)倒計時

原創(chuàng)作者:veally@foxmail.com 源鏈接不詳,工作用到就記錄分享下!

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android自定義控件之水平圓點加載進度條

    Android自定義控件之水平圓點加載進度條

    這篇文章主要為大家詳細介紹了Android自定義控件之水平圓點加載進度條,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • 快速掌握Android屏幕的知識點

    快速掌握Android屏幕的知識點

    相信不少設(shè)計師和工程師都被安卓設(shè)備紛繁的屏幕搞得暈頭轉(zhuǎn)向,我既做UI設(shè)計,也做過一點安卓界面布局,剛好對這塊內(nèi)容比較熟悉,所以在此我將此部分知識重新梳理出來分享給大家!有需要的朋友們可以參考借鑒,下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2016-11-11
  • OpenHarmony實現(xiàn)類Android短信驗證碼及倒計時流程詳解

    OpenHarmony實現(xiàn)類Android短信驗證碼及倒計時流程詳解

    這篇文章主要介紹了OpenHarmony實現(xiàn)類Android短信驗證碼及倒計時流程,發(fā)送短信驗證碼后,一般在界面上都會有一個倒計時的顯示.在安卓中,實現(xiàn)類似的倒計時有多種方式,當(dāng)然背后的基本原理都是設(shè)定一個初始值,然后每過一定的間隔時間執(zhí)行操作
    2022-11-11
  • Android Toast實現(xiàn)全屏顯示

    Android Toast實現(xiàn)全屏顯示

    這篇文章主要為大家詳細介紹了Android Toast實現(xiàn)全屏顯示,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Android 面試題匯總

    Android 面試題匯總

    本文主要介紹Android 面試題,這里整理了70道面試題和答案供大家學(xué)習(xí)參考,有需要的小伙伴可以參考下
    2016-09-09
  • Android 完全退出的實例詳解

    Android 完全退出的實例詳解

    這篇文章主要介紹了Android 完全退出的實例詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • Android快速實現(xiàn)無預(yù)覽拍照功能

    Android快速實現(xiàn)無預(yù)覽拍照功能

    這篇文章主要為大家詳細介紹了Android快速實現(xiàn)無預(yù)覽拍照功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • Android 文件存儲及常見問題解決

    Android 文件存儲及常見問題解決

    這篇文章主要介紹了Android 文件存儲及常見問題解決的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Android自定義View實現(xiàn)掃描效果

    Android自定義View實現(xiàn)掃描效果

    這篇文章主要為大家詳細介紹了Android自定義View實現(xiàn)掃描效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • 在android中使用緩存和脫機存儲

    在android中使用緩存和脫機存儲

    這篇文章主要介紹了在android中使用緩存和脫機存儲,緩存可以加速你的應(yīng)用程序,即使在網(wǎng)絡(luò)不可用時,用戶能夠更加流暢地使用你的應(yīng)用程序使用緩存是相當(dāng)簡單的,需要一個單一的代碼行,下面來看看文章的詳細內(nèi)容
    2021-11-11

最新評論

陇川县| 济南市| 西藏| 汝城县| 鄄城县| 和田市| 西城区| 平江县| 刚察县| 永德县| 苍山县| 河西区| 屏山县| 安义县| 洛川县| 定襄县| 清涧县| 莱阳市| 渭南市| 石台县| 兖州市| 图片| 凤山市| 民县| 正定县| 阳新县| 盈江县| 中超| 玉山县| 象州县| 禹城市| 安福县| 长沙市| 泗阳县| 镇江市| 南靖县| 耒阳市| 温宿县| 调兵山市| 延庆县| 滕州市|