日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android如何实现全局的护眼模式

發(fā)布時(shí)間:2023/12/18 Android 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android如何实现全局的护眼模式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。