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_如何看
- 下一篇: Android:LiveData pos