Android如何实现全局的护眼模式
轉載請標明出處:http://blog.csdn.net/zhaoyanjun6/article/details/122882722
本文出自【趙彥軍的博客】
最近接到一個做護眼模式的需求,要求是在Android App 全局,在任何一個頁面都顯示。
在做需求之前要先弄清楚幾個概念
藍光
短波藍光是波長處于400nm-480nm之間具有相對較高能量的光線。該波長內的藍光會使眼睛內的黃斑區毒素量增高,嚴重威脅我們的眼底健康。藍光誘發致盲眼病,最有效的解決方案是對電視進行貼膜處理。防藍光貼膜技術已經很成熟,成本很低,可以有效阻止藍光穿透。
在這里,特別提出一點,藍光并不都是有害藍光,真正有害的是波長400到450以內的藍光,而480到500納米之間的藍光有一種調整生物節律的作用,睡眠、情緒、記憶力等都與之相關,對人體反而是有益的。而且短波藍光是不是一定會對人眼產生傷害,這與照射強度與照射時間有關,當照度達到一定程度后,持續兩個小時以上,才有可能對視網膜產生損害。
護眼模式
簡單來說,就是把屏幕發出的光,過濾掉對人體有害的藍光,就是護眼模式。
實現原理
第一個問題,怎么過濾藍光。
/*** 過濾藍光,過濾藍光比例,一般傳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 怎么設置藍光,也很簡單就是 在 decorView 增加一個前景色
//過濾藍光,獲取對眼睛健康的顏色 val color = calculateFilterColor() activity.window.decorView.foreground = ColorDrawable(color)那么怎么運用到所有的 activity ,一種思路是在 BaseActivity onResume 方法,統一設置護眼模式。但是有個問題,有些 activity 是在第三方 sdk 中,并不會繼承我們的 BaseActivity 。 我選擇的方案是,在 Application 里注冊監聽器。如下:
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)}})} }這樣就能運用到所有的 Activity。
怎么關閉藍光呢? 同樣的套路,在 decorView 增加一個透明前景色。
//關閉藍光 activity.window.decorView.foreground = ColorDrawable(Color.TRANSPARENT)上面都是針對單個 activity 設置護眼,如何對單獨的 View 設置?也是超級簡單,對 view 設置前景色即可,代碼如下:
val color = UtilBlueEye.calculateFilterColor() view.foreground = ColorDrawable(color)activity 設置了護眼模式,并不會影響到 Dialog 上,如何處理 Dialog 的護眼模式,也是很簡單。
val color = UtilBlueEye.calculateFilterColor() dialog.window?.decorView?.foreground = ColorDrawable(color)好了,護眼模式做完了,關電腦,下班回家。
總結
以上是生活随笔為你收集整理的Android如何实现全局的护眼模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: swift野梦抄袭 taylor_如何看
- 下一篇: 高级程序员的自我修养:如何才能成长为牛逼