這可能不算是一個自定義View,但是它。。。

業(yè)務(wù)場景



count down TextView

驗(yàn)證碼倒計(jì)時效果在 App 登錄模塊中很常見,它涉及到這么幾個技術(shù)點(diǎn):

1. 控件點(diǎn)擊事件

2. 定時器

3. 動態(tài)改變控件內(nèi)容

本文通過繼承TextView將這幾個技術(shù)點(diǎn)封裝在一個自定義控件中。其中控件點(diǎn)擊事件和動態(tài)改變控件內(nèi)容都很簡單,只需要調(diào)用TextView的`setOnClickListener()` 和 `setText()`。

定時器

定時器有多種實(shí)現(xiàn)方式,比如 `java.util.Timer` 或者線程池。其實(shí)用Handler也可以實(shí)現(xiàn)定時器。

定時器的本質(zhì)是以一定時間間隔重復(fù)相同的任務(wù)。`Handler.postDelay(Runnable r, long delayMillis)` 這個 Api 以一定延遲將任務(wù)插入消息隊(duì)列執(zhí)行。如果任務(wù)在執(zhí)行完之后可以將自己再次插入消息隊(duì)列,如此不停循環(huán)就可以實(shí)現(xiàn)定時器的效果。代碼如下

```

final Handler handler =new Handler();

//具有自我重復(fù)執(zhí)行能力的任務(wù)

Runnable runnable =new Runnable() {

@Override

? ? public void run() {

? ? ? ? //每隔1000ms將自己再次插入消息隊(duì)列

????????handler.postDelayed(this, 1000);

? ? }

};

//啟動任務(wù)

handler.post(runnable);

```

本文的自定義控件就使用了這個方法來實(shí)現(xiàn)定時器。

業(yè)務(wù)邏輯

除了上述的技術(shù)點(diǎn)之外,驗(yàn)證碼倒計(jì)時效果還牽涉到如下業(yè)務(wù)邏輯:

1. 點(diǎn)擊控件時開始計(jì)時

2. 計(jì)時期間不能再次被點(diǎn)擊

3. 計(jì)時結(jié)束后控件還原成初始狀態(tài)

如果這些業(yè)務(wù)邏輯代碼被收納在一個類中而不是散落在Activity類的各個地方,Activity層面的代碼就會更加整潔,業(yè)務(wù)邏輯也更容易被理解。

這可能不算是一個自定義View,但是它做了合理的封裝。

代碼地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容