1. 程式人生 > >一鍵換膚--動態更換主題顏色風格

一鍵換膚--動態更換主題顏色風格

基於前一段時間專案具有換膚需求的功能,幾經預研學習換膚功能效果,網上的資源很多,最初看到是網易換膚的酷炫效果,今天得空打算寫一篇關於換膚功能的文章,專案無需重啟Activity的就可以實現無縫換膚切換功能,可高仿網易雲音樂的主題換膚效果。

本文介紹的換膚效果是通過依賴library來設定tag來實現更換主題效果的,可通過專案,library所使用的機制是通過根據每個view中所設定的tag標籤在執行recreate()方法的時候來匹配不同的tag展示所需要的效果,在DefaultProcessor類中定義了許多不同狀態下的tag標籤,如圖:  

 

專案中可以對控制元件文字動態更改顏色

,可在繼承View和ViewGroup對應的子類的佈局檔案中例如TextView通過設定android:tag="text_primary_color"和RelativeLayout中設定android:tag="bg_primary_color"來新增相關tag的關聯,如圖:


在本文DynamicSkin中,提供了多種不同主題背景顏色的選擇,而且還實現了仿照網易音樂的滑動顏色條,通過自定義不同顏色帶分佈的滑動條ColorPickerView,用來實現多種顏色不滿足需求的情況下的自取顏色的主題風格,該ColorPickerView中的顏色帶是通過LinearGradient類來繪製在不同區間以映象方式平鋪展示不同顏色的一個漸變效果,如圖:


專案中也可以動態對圖片進行更改顏色,對於圖片顏色的動態改變,需要注意的是需要圖片所要改變的地方做成鏤空圖(可檢視專案中圖片效果DynamicSkin),這樣通過設定動態背景來實現圖片換膚功能,在選取合適的顏色時將顏色儲存到SharedPreferences中(如下圖),然後可以設定tag為bg_primary_color,也可以通過在程式碼中設定imageView.setBackground(newColorDrawable(Config.getPrimaryColor() ==0? getResources().getColor(R.color.global_color) : Config.getPrimaryColor()));



需要注意的是繼承Application的Myapp中getATEKey()方法往SharedPreferences中儲存哪種模式下的換膚狀態(此處可優化,不加會報錯)模式,還需注意的是關於多套圖片和完全不同的佈局檔案資源的換膚,可以通過外掛的形式載入需要換膚的apk資源包,網上關於這類教程也有很多,之前也預研瞭解過,但是沒在專案中實現,需要學習,可以在網上搜索檢視。

在此專案中可瞭解到:

1.自定義的通用標題欄,可用於整個專案,便於管理。

2.專案結構分層,實現類基於base模組,簡化的base模組用於整個專案生命週期等管理,便於簡化程式碼結構。

3.整體專案動態更換主題,動態變色,原理中關鍵是通過設定一個tag來進行標記,高仿網易雲音樂的主題換膚

4.自定義顏色條控制元件具體實現

具體功能點請檢視專案DynamicSkin,接下來展示具體實現效果圖




github原始碼地址:DynamicSkin  歡迎大家Star和Fork,有問題多多討論!

中依賴的一個library,在此感謝!