[![Android Gems](http://www.android-gems.com/badge/iwgang/CountdownView.svg?branch=master)](http://www.android-gems.com/lib/iwgang/CountdownView) [![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-CountdownView-brightgreen.svg?style=flat)](http://android-arsenal.com/details/1/2641) [![@iwgang](https://img.shields.io/badge/weibo-%40iwgang-blue.svg)](http://weibo.com/iwgang) #### [English](https://github.com/iwgang/CountdownView/blob/master/README.md) # CountdownView Android倒计时控件,使用Canvas绘制,支持多种样式 [下载DemoAPK](https://raw.githubusercontent.com/iwgang/CountdownView/master/demoapk/Demo_2.1.apk) ### Screenshot ![](https://raw.githubusercontent.com/iwgang/CountdownView/master/screenshot/g_config.gif) ![](https://raw.githubusercontent.com/iwgang/CountdownView/master/screenshot/g_config2.gif) ### Gradle compile 'com.github.iwgang:countdownview:2.1.6' ### Code ``` CountdownView mCvCountdownView = (CountdownView)findViewById(R.id.cv_countdownViewTest1); mCvCountdownView.start(995550000); // 毫秒 // 或者自己编写倒计时逻辑,然后调用updateShow来更新UI for (int time=0; time<1000; time++) { mCvCountdownView.updateShow(time); } ``` ### Layout ``` xml ``` ### 定制 | 参数 | 类型 | 默认值 | | -------- | :-----: | :----: | |isHideTimeBackground | boolean | true| |timeBgColor | color | #444444| |timeBgSize | dimension | timeSize + 2dp * 4| |timeBgRadius | dimension | 0| |isShowTimeBgDivisionLine | boolean | true| |timeBgDivisionLineColor | color | #30FFFFFF| |timeBgDivisionLineSize | dimension | 0.5dp| |timeTextSize | dimension | 12sp | |timeTextColor | color | #000000| |isTimeTextBold | boolean | false| |isShowDay | boolean | 自动显示 (天 > 1 显示, = 0 隐藏)| |isShowHour | boolean | 自动显示 (小时 > 1 显示, = 0 隐藏)| |isShowMinute | boolean | true| |isShowSecond | boolean | true| |isShowMillisecond | boolean | false| |isConvertDaysToHours | boolean | false| |suffixTextSize | dimension | 12sp| |suffixTextColor | color | #000000| |isSuffixTextBold | boolean | false| |suffixGravity | 'top' or 'center' or 'bottom' | 'center'| |suffix | string | ':'| |suffixDay | string | null| |suffixHour | string | null| |suffixMinute | string | null| |suffixSecond | string | null| |suffixMillisecond | string | null| |suffixLRMargin | dimension | left 3dp right 3dp| |suffixDayLeftMargin | dimension | 0| |suffixDayRightMargin | dimension | 0| |suffixHourLeftMargin | dimension | 0| |suffixHourRightMargin | dimension | 0| |suffixMinuteLeftMargin | dimension | 0| |suffixMinuteRightMargin | dimension | 0| |suffixSecondLeftMargin | dimension | 0| |suffixSecondRightMargin | dimension | 0| |suffixMillisecondLeftMargin | dimension | 0| |isShowTimeBgBorder | boolean | false| |timeBgBorderColor | color | #000000| |timeBgBorderSize | dimension | 1dp| |timeBgBorderRadius | dimension | 0| ### 其它 * **多个CountdownView时,给每个指定值** ``` // 第1步,设置tag mCvCountdownView.setTag(R.id.name, uid); // 第2步,从回调中的CountdownView取回tag @Override public void onEnd(CountdownView cv) { Object nameTag = cv.getTag(R.id.uid); if (null != nameTag) { Log.i(TAG, "name = " + nameTag.toString()); } } ``` * **动态显示设置, 支持所有xml中的配置项来使用java代码设置** ``` dynamicShow(DynamicConfig dynamicConfig) ``` * **倒计时结束后回调** ``` setOnCountdownEndListener(OnCountdownEndListener onCountdownEndListener); ``` * **指定间隔时间回调** ``` setOnCountdownIntervalListener(long interval, OnCountdownIntervalListener onCountdownIntervalListener); ```