策略模式封裝倒計時控件

簡介:

StrategyCountDownTextView,用策略模式封裝的倒計時控件竹伸。要顯示不同的時間格式勋篓、文案風(fēng)格生巡,使用時只需設(shè)置不同的顯示策略即可。(要改裝成實現(xiàn)順序計時也很簡單盐股,文末會提及疯汁。)

需求背景

最近項目中要做個限時活動模塊幌蚊,里面有大量的地方要有倒計時效果溢豆,可是不同地方顯示的倒計時格式有點區(qū)別,例如"HH小時mm分ss秒 后結(jié)束"队他, "還剩 HH:mm:ss"的麸折,帶不同的文案風(fēng)格垢啼。于是自己封裝了個倒計時控件膊夹,繼承TextView,而具體的文案怎么顯示进统,可以在代碼中動態(tài)設(shè)置螟碎,靈活性較高掉分。采用了設(shè)計模式中的策略模式酥郭,感覺很適合這個業(yè)務(wù)場景惜姐。

效果演示:

StrategyCountDownDemo.gif

用法:

首先在要用到的頁面xml中引入控件,沒有自定義屬性条舔,

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <com.example.alberthuang.strategycountdowndemo.ui.customview.StrategyCountDownTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

</LinearLayout>

然后設(shè)置結(jié)束時間和顯示策略,(倒計時監(jiān)聽可以選擇不設(shè)置夸浅,具體看業(yè)務(wù)需要)

    private String mTimeStr = "2026-05-20 10:00:00";

        //初始化倒計時控件
        mCountDownTextView.setTimes(mTimeStr);
        //設(shè)置顯示策略
        mCountDownTextView.setCountDownStrategy(new StrategyCountDownTextView.CountDownStrategy() {
              @Override
              public String getTikTokText(String timeStr) {
                   return "This is StrategyOne\n倒計時:" + TimeUtil.getCountDownStrategyOneTime(timeStr);
              }

             @Override
             public String getEndStr(String timeStr) {
                  return "This is StrategyOne\n倒計時已在" + timeStr + "結(jié)束";
             }
        });
        //設(shè)置回調(diào),可以不設(shè)置
        mCountDownTextView.setCountDownEventListener(new StrategyCountDownTextView.CountDownEventListener() {
            @Override
            public void onTikTok(String endTimeStr) {
                Log.d("Callback_onTikTok", "time:   " + endTimeStr);
            }

            @Override
            public void onCountEnd(String endTimeStr) {
                Log.d("Callback_onCountEnd", "time:   " + endTimeStr);
            }
        });

關(guān)鍵的就是兩步,setTimes() 和 setCountDownStrategy()婉刀。要顯示不同風(fēng)格的時間格式和文案突颊,只需要setCountDownStrategy()時定義實現(xiàn)了CountDownStrategy接口的匿名內(nèi)部類就可以了。

改裝成實現(xiàn)順序計時:

要改裝成順序計時也很簡單棒动,也就是顯示目標(biāo)時間距離現(xiàn)在已經(jīng)“HH小時mm分ss秒”的樣式〈遥現(xiàn)在的機制是通過handler每隔1秒發(fā)送消息掷漱,然后在handleMessage()里更新顯示,其實這個機制也適用于順序計時海雪,只是我們現(xiàn)在在處理handler消息時進行時奥裸,寫死了顯示邏輯為倒計時。如果我們想顯示順序計時侠鳄,那么處理邏輯更加簡單:


    private Handler handler = new Handler(Looper.getMainLooper()) {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 0:
                setText(mCountUpStrategy.getTikTokText(mEndTimeStr));//設(shè)置顯示的字符串
                break;
            }
        }
    };

不用判斷是否已到了結(jié)束時間,沒了結(jié)束時間這個概念博秫。只需直接執(zhí)行更新文字的代碼就可以了挡育。

demo地址:

https://github.com/alberthgh/StrategyCountDownDemo

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寝殴,一起剝皮案震驚了整個濱河市蚣常,隨后出現(xiàn)的幾起案子抵蚊,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異矛绘,居然都是意外死亡货矮,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門斯够,熙熙樓的掌柜王于貴愁眉苦臉地迎上來囚玫,“玉大人,你說我怎么就攤上這事读规∽ザ剑” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵本昏,是天一觀的道長。 經(jīng)常有香客問我枪汪,道長涌穆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任雀久,我火速辦了婚禮宿稀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赖捌。我一直安慰自己祝沸,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布越庇。 她就那樣靜靜地躺著罩锐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卤唉。 梳的紋絲不亂的頭發(fā)上涩惑,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機與錄音桑驱,去河邊找鬼竭恬。 笑死跛蛋,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的痊硕。 我是一名探鬼主播赊级,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼岔绸!你這毒婦竟也來了理逊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤亭螟,失蹤者是張志新(化名)和其女友劉穎挡鞍,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體预烙,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年道媚,在試婚紗的時候發(fā)現(xiàn)自己被綠了扁掸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡最域,死狀恐怖谴分,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情镀脂,我是刑警寧澤牺蹄,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站薄翅,受9級特大地震影響沙兰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜翘魄,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一鼎天、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧暑竟,春花似錦斋射、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至腹躁,卻和暖如春桑包,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背潜慎。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工捡多, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蓖康,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓垒手,卻偏偏與公主長得像蒜焊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子科贬,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程泳梆,因...
    小菜c閱讀 6,401評論 0 17
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,074評論 25 707
  • 今天我把這幾天在重慶學(xué)習(xí)的心得過程梳理梳理!呈現(xiàn)給自己!也呈現(xiàn)給大家!我是第二次復(fù)訓(xùn)了!多少還是有些收獲!跟上次比...
    別來無恙朱梅閱讀 192評論 4 4
  • 最近看到有人在討論雞湯和干貨的取舍問題胞皱,甚至說雞湯無用論邪意,我感覺大可不必一下打死。誠然反砌,雞湯是一種興奮劑雾鬼,可以瞬間...
    素月1閱讀 276評論 3 5
  • 有一個電視劇叫做《蝸居》策菜,在幾年前非常的火,一度成為了熱烈討論的社會話題酒贬。它講的是一對姐妹在上海生活和工作又憨,姐姐為...
    眼睛睜_閆老濕閱讀 183評論 1 1