Android如何实现全局的护眼模式
轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/zhaoyanjun6/article/details/122882722
本文出自【趙彥軍的博客】
最近接到一個(gè)做護(hù)眼模式的需求,要求是在Android App 全局,在任何一個(gè)頁面都顯示。
在做需求之前要先弄清楚幾個(gè)概念
藍(lán)光
短波藍(lán)光是波長處于400nm-480nm之間具有相對較高能量的光線。該波長內(nèi)的藍(lán)光會(huì)使眼睛內(nèi)的黃斑區(qū)毒素量增高,嚴(yán)重威脅我們的眼底健康。藍(lán)光誘發(fā)致盲眼病,最有效的解決方案是對電視進(jìn)行貼膜處理。防藍(lán)光貼膜技術(shù)已經(jīng)很成熟,成本很低,可以有效阻止藍(lán)光穿透。
在這里,特別提出一點(diǎn),藍(lán)光并不都是有害藍(lán)光,真正有害的是波長400到450以內(nèi)的藍(lán)光,而480到500納米之間的藍(lán)光有一種調(diào)整生物節(jié)律的作用,睡眠、情緒、記憶力等都與之相關(guān),對人體反而是有益的。而且短波藍(lán)光是不是一定會(huì)對人眼產(chǎn)生傷害,這與照射強(qiáng)度與照射時(shí)間有關(guān),當(dāng)照度達(dá)到一定程度后,持續(xù)兩個(gè)小時(shí)以上,才有可能對視網(wǎng)膜產(chǎn)生損害。
護(hù)眼模式
簡單來說,就是把屏幕發(fā)出的光,過濾掉對人體有害的藍(lán)光,就是護(hù)眼模式。
實(shí)現(xiàn)原理
第一個(gè)問題,怎么過濾藍(lán)光。
/*** 過濾藍(lán)光,過濾藍(lán)光比例,一般傳30*/private fun calculateFilterColor(blueFilterPercent: Int = 30): Int {var realFilter = blueFilterPercentif (realFilter < 10) {realFilter = 10} else if (realFilter > 80) {realFilter = 80}val a = (realFilter / 80f * 180).toInt()val r = (200 - realFilter / 80f * 190).toInt()val g = (180 - realFilter / 80f * 170).toInt()val b = (60 - realFilter / 80f * 60).toInt()return Color.argb(a, r, g, b)}Activity 怎么設(shè)置藍(lán)光,也很簡單就是 在 decorView 增加一個(gè)前景色
//過濾藍(lán)光,獲取對眼睛健康的顏色 val color = calculateFilterColor() activity.window.decorView.foreground = ColorDrawable(color)那么怎么運(yùn)用到所有的 activity ,一種思路是在 BaseActivity onResume 方法,統(tǒng)一設(shè)置護(hù)眼模式。但是有個(gè)問題,有些 activity 是在第三方 sdk 中,并不會(huì)繼承我們的 BaseActivity 。 我選擇的方案是,在 Application 里注冊監(jiān)聽器。如下:
class App : Application() {override fun onCreate() {super.onCreate()registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks {override fun onActivityResumed(activity: Activity) {val color = UtilBlueEye.calculateFilterColor()activity.window.decorView.foreground = ColorDrawable(color)}})} }這樣就能運(yùn)用到所有的 Activity。
怎么關(guān)閉藍(lán)光呢? 同樣的套路,在 decorView 增加一個(gè)透明前景色。
//關(guān)閉藍(lán)光 activity.window.decorView.foreground = ColorDrawable(Color.TRANSPARENT)上面都是針對單個(gè) activity 設(shè)置護(hù)眼,如何對單獨(dú)的 View 設(shè)置?也是超級簡單,對 view 設(shè)置前景色即可,代碼如下:
val color = UtilBlueEye.calculateFilterColor() view.foreground = ColorDrawable(color)activity 設(shè)置了護(hù)眼模式,并不會(huì)影響到 Dialog 上,如何處理 Dialog 的護(hù)眼模式,也是很簡單。
val color = UtilBlueEye.calculateFilterColor() dialog.window?.decorView?.foreground = ColorDrawable(color)好了,護(hù)眼模式做完了,關(guān)電腦,下班回家。
總結(jié)
以上是生活随笔為你收集整理的Android如何实现全局的护眼模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: swift野梦抄袭 taylor_如何看
- 下一篇: Android:LiveData pos