點擊播放 GIF 1.6M
碼個蛋(codeegg)第 724 次推文
作者:二娃_
原文: https://juejin.im/post/5d52aea86fb9a06ae61aad5b
前言
點擊播放 GIF 1.5M
源碼地址
設置動態壁紙-TextClockWallpaperService
(https://github.com/drawf/SourceSet/blob/master/app/src/main/java/me/erwa/sourceset/view/TextClockWallpaperService.kt)
填坑啦!填坑啦!
其實關於「設置動態壁紙的實操」我是棄坑了的,因為我單方面覺得只是壁紙相關API的使用,價值不大。但不久前有「掘友」留言說及這事,並表示期待更新「下篇」,於是我又單方面覺得價值還是有的,能幫一個是一個。
目錄
以下是我列的本篇目錄,將按順序依次做解說
如何快速上手設置壁紙?
相關API說明
文字時鐘動態壁紙實踐
1. 如何快速上手設置壁紙?
NOTE:這裡暫時不關心「為什麼」,我們只按照既定的步驟,快速上手實現一個「Hong Kong is part of China!」靜態壁紙
1.在目錄下新建一個壁紙描述文件,名字可自取(text_colck_wallpaper.xml),內容很簡單
2.繼承在內部處理我們自己的繪製。(可以關注下onVisibilityChanged方法)
3. 在文件中增加壁紙服務的聲明
4. 增加啟動壁紙設置服務的方法
經過前面四步,我們成功的愛了一把國,效果如圖:
2. 相關API說明
壁紙描述文件
首先,這個描述文件是必須的,在聲明服務的時候必須在meta-data上配置上。知道為什麼嗎?
1.這個描述文件中有三個可選屬性
2. 通過源碼可知,在壁紙服務啟動之前會進行三個檢查,其中第三個檢查就是對meta-data中提供關於壁紙的描寫敘述信息的檢查用以創建一個叫的實例。(關於原理部分解析,我在拜讀的文章中貼出了連結,大家可自行食用)
壁紙服務的聲明
其中必須要加的是:
權限:
處理Service的Action:
對!這兩個也分別對應壁紙服務啟動前的第一個檢查和第二個檢查
壁紙服務的實現
1. 繼承並複寫抽象方法
的關鍵生命周期,它們是從上到下依次執行的。我們重點關注即可。
3. 繪製相關的API
3. 文字時鐘動態壁紙實踐
有了前面的鋪墊,這部分就相對簡單了。不過我們依舊先思考下思路:
如何繪製文字時鐘?「上篇」中我們已經有了「TextClockView」,我們直接把它當做一個,再擴展添加幾個我們需要的方法即可使用。
如何讓壁紙動起來?跟「上篇」中一樣,開一個定時器,每秒鐘調用一次的方法。
擴展TextClockView
1. 首先要能在外部初始化繪製時依賴的寬高
2. 繪製方法中增加回調,用於將實際繪製調用放到壁紙服務中
3. 停止後續繪製的方法
處理壁紙服務的具體繪製實現
1. 相關初始化
2. 核心繪製操作
到這裡就完成啦!撒花!撒花!(歡迎食用源碼並實際體驗~)
近期文章:
今日問題:
快拿上去徵服產品小姐姐吧?
點擊播放 GIF 0.2M
—— 分享新聞,還能獲得積分兌換好禮哦 ——