欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

android Chronometer控件使用大全

 更新時間:2021年09月18日 11:44:43   作者:賣bug的小男孩  
Chronometer是一個簡單的計時器,這篇文章主要介紹了android Chronometer控件簡單使用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

1、序言

Chronometer 是android 官方提供的計時器、可實現正/倒計時、格式固定:00:00:00;

2、使用

如圖xml 

xml 簡化寫法如下:

<Chronometer
                android:id="@+id/tvEndTime"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>

3、發(fā)起倒計時

 tvEndTime.run {
            //格式化-> 距結束00:00:00
            format = "距結束%s"
            //設置倒計時時間 countDownTimeMill -》自定義 單位毫秒
            base = countDownTimeMill + SystemClock.elapsedRealtime()
            //是否為倒計時、
            isCountDown = true
            //倒計時監(jiān)聽 每隔一秒
            setOnChronometerTickListener {
                //倒計時結束
                if (SystemClock.elapsedRealtime() - it.base >= 0) {
                    it.stop()
                    return@setOnChronometerTickListener
                    // TODO: 2021/9/16 處理業(yè)務邏輯 
                }
            }
        }

4、自定義格式化

 tvEndTime.run {
            //格式化-> 距結束00:00:00
            format = "距結束%s"
            //設置倒計時時間
            base = countDownTimeMill + SystemClock.elapsedRealtime()
            //是否為倒計時、
            isCountDown = true
            //倒計時監(jiān)聽 每隔一秒
            setOnChronometerTickListener {
                //倒計時結束
                if (SystemClock.elapsedRealtime() - it.base >= 0) {
                    it.stop()
                    return@setOnChronometerTickListener
                   //自定義日期格式 如 1天 23:02:56
                it.text = TimeUtils.formatSecondByMill(86400 * 1000)
                }
            }
        }

工具類:

object TimeUtils {
    /**
     * 發(fā)送消息日期格式
     *
     * @param msgTimeMillis
     * @return
     */
    fun getMsgFormatTime(msgTimeMillis: Long): String? {
        val nowTime = Date()
        val msgTime = Date(msgTimeMillis)
        val days = differentDays(msgTime, nowTime)
        // 早上、下午、晚上 1:40
        val hourOfDay = DateUtils.getHour(msgTime)
        val whens: String = when {
            hourOfDay >= 18 -> { //18-24
                "晚上"
            }
            hourOfDay >= 13 -> { //13-18
                "下午"
            }
            hourOfDay >= 11 -> { //11-13
                "中午"
            }
            hourOfDay >= 5 -> { //5-11
                "早上"
            }
            else -> { //0-5
                "凌晨"
            }
        }
        return if (days < 1) {
            whens + " " + DateUtils.format(msgTime, "HH:mm")
        } else {
            // 昨天
            //            return DateUtils.format(new Date(msgTimeMillis), "yyyy年MM月dd日 ") + when + DateUtils.format(new Date(msgTimeMillis), " HH:mm");
            DateUtils.format(Date(msgTimeMillis), "yyyy年MM月dd日 ")
        }
    }
 
    /**
     * date2比date1多的天數
     * @param date1
     * @param date2
     * @return
     */
    private fun differentDays(msgTime: Date, nowTime: Date): Int {
        val cal1 = Calendar.getInstance()
        cal1.time = msgTime
        val cal2 = Calendar.getInstance()
        cal2.time = nowTime
        val day1 = cal1[Calendar.DAY_OF_YEAR]
        val day2 = cal2[Calendar.DAY_OF_YEAR]
        val year1 = cal1[Calendar.YEAR]
        val year2 = cal2[Calendar.YEAR]
        return if (year1 != year2) //同一年
        {
            var timeDistance = 0
            for (i in year1 until year2) {
                timeDistance += if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) //閏年
                {
                    366
                } else  //不是閏年
                {
                    365
                }
            }
            timeDistance + (day2 - day1)
        } else  //不同年
        {
            day2 - day1
        }
    }
 
    /**
     * 格式化秒數
     * des:%02d 長度不夠2位的時前面補0
     */
    fun formatSeconds(seconds: Long): String? {
        return when {
            seconds <= 0 -> {
                "00:00"
            }
            seconds < 60 -> {
                String.format(Locale.getDefault(), "00:%02d", seconds % 60)
            }
            seconds < 3600 -> {
                String.format(Locale.getDefault(), "%02d:%02d", seconds / 60, seconds % 60)
            }
            else -> {
                String.format(
                    Locale.getDefault(),
                    "%02d:%02d:%02d",
                    seconds / 3600,
                    seconds % 3600 / 60,
                    seconds % 60
                )
            }
        }
    }
 
    fun formatSecond(seconds: Long): String? {
        return when {
            seconds <= 0 -> {
                "0分"
            }
            seconds < 60 -> {
                String.format(Locale.getDefault(), "%02d秒", seconds % 60)
            }
            seconds < 3600 -> {
                String.format(Locale.getDefault(), "%02d分%02d秒", seconds / 60, seconds % 60)
            }
            else -> {
                String.format(
                    Locale.getDefault(),
                    "%02d時%02d分",
                    seconds / 3600,
                    seconds % 3600 / 60,
                )
            }
        }
    }
 
    /**
     * 格式化日期 eg 天 時:分:秒  00:00:00
     * @param dayUnit 單位 默認不寫
     */
    fun formatSecondByMill(millTime: Long, dayUnit: String = "天"): String? {
        //小于一天、單位毫秒
        return if (millTime <= 86400 * 1000) {
            formatSeconds(millTime / 1000)
        } else {
            val oneDayMill = 86400 * 1000
            val day = millTime / oneDayMill
            val lastOneDayMills = millTime - day * oneDayMill
            "$day$dayUnit ${formatSeconds(lastOneDayMills / 1000)}"
        }
    }
 
}

注意:別再format上做文章、因為沒用!?。?/strong>

到此這篇關于android Chronometer控件簡單使用的文章就介紹到這了,更多相關android Chronometer控件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Android開發(fā)之無痕過渡下拉刷新控件的實現思路詳解

    Android開發(fā)之無痕過渡下拉刷新控件的實現思路詳解

    下拉刷新效果功能在程序開發(fā)中經常會見到,今天小編抽時間給大家分享Android開發(fā)之無痕過渡下拉刷新控件的實現思路詳解,需要的朋友參考下吧
    2016-11-11
  • Android基于ListView實現類似QQ空間的滾動翻頁與滾動加載效果

    Android基于ListView實現類似QQ空間的滾動翻頁與滾動加載效果

    這篇文章主要介紹了Android基于ListView實現類似QQ空間的滾動翻頁與滾動加載效果,涉及ListView相關屬性與方法的操作技巧,需要的朋友可以參考下
    2016-08-08
  • Android應用中內嵌SQLite數據庫的基本操作指南

    Android應用中內嵌SQLite數據庫的基本操作指南

    這篇文章主要介紹了Android應用中內嵌SQLite數據庫的基本操作指南,包括創(chuàng)建DAO類接口以及相關的增刪查改等操作的明說,需要的朋友可以參考下
    2016-02-02
  • 詳解Android開啟OTG功能/USB?Host?API功能

    詳解Android開啟OTG功能/USB?Host?API功能

    這篇文章主要介紹了Android開啟OTG功能/USB?Host?API功能,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • Android ContentProvider基礎應用詳解

    Android ContentProvider基礎應用詳解

    ContentProvider是android四大組件之一。它是不同應用程序之間交換數據的標準api,ContentProvider以某種uri的形式對外提供數據,允許其它應用程序對其訪問或者修改數據。本文將介紹ContentProvider的基礎應用,感興趣的可以學習一下
    2021-12-12
  • Android中RecyclerView實現商品分類功能

    Android中RecyclerView實現商品分類功能

    這篇文章主要為大家詳細介紹了Android中RecyclerView實現商品分類功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Android-實現切換Fragment頁功能的實現代碼

    Android-實現切換Fragment頁功能的實現代碼

    本篇文章主要介紹了Android-實現切換Fragment頁功能的實現代碼,具有一定的參加價值,有興趣的可以了解一下。
    2017-02-02
  • Android手機獲取IP地址的兩種方法

    Android手機獲取IP地址的兩種方法

    這篇文章主要介紹了Android手機獲取IP地址的兩種方法,本文分別講解了WIFI和GPRS兩種情況下各自獲取手機IP地址的方法,需要的朋友可以參考下
    2015-05-05
  • Android 版本、權限適配相關總結

    Android 版本、權限適配相關總結

    針對 Android 6.0 (API 23)已以上版本,Google 增強全新的權限,應用程序在使用敏感權限(如拍照、查閱聯(lián)系人或存儲)時需要先征求用戶必須贏得用戶同意。
    2021-05-05
  • android和js的交互之jsbridge使用教程

    android和js的交互之jsbridge使用教程

    這篇文章主要給大家介紹了關于android和js的交互之jsbridge使用的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-04-04

最新評論