最近自己在做一个小说阅读器,看到某阅有护眼模式功能,别人都有,我怎么能没有?

现在这功能已经不稀奇了,很多手机都带有这个功能。

实现起来不难,用一个蒙版遮在界面上面就行。

至于蒙版,可以用Window实现,也可以只用套个FrameLayout实现。

Window实现的优点是,支持全局,切可以覆盖状态栏。缺点是需要权限声明,而悬浮窗权限在国内这些手机上相当不好搞,需要适配很多机型。

FrameLayout不支持全局,当用户离开你App就失效了。而且无法覆盖状态栏,App内所有的View都是在状态栏下面的。不过FrameLayout不需要任何权限请求。

我选择的是FrameLayout,因为我只需要在阅读页面实现护眼模式。

蒙版有了,接下来只需要给蒙版设置一个颜色。这个颜色使得让屏幕看起来发黄,然后这个功能就成了。(老实说,我对这功能是否真的有保护眼睛的作用表示怀疑)

可是颜色并不是我擅长的。我不知道怎么搭配红绿蓝可以得到一个让屏幕看起来略微发黄的颜色。

这时候,就该展现搜索引擎的威力了。毕竟我们要学会站在巨人的肩膀上。

我打开了google,搜索了“护眼模式”、“护眼模式原理”、“Android 护眼模式原理”等等都没有得到想要的结果,全是一些乱七八糟的新闻,要不就是广告。

不过我没有绝望,因为我很坚强。

接下来我在应用商店发现了一堆护眼App,其中不乏宣称百分用户使用的。

反编译之后,发现是这个样子的..

不过你混淆的了代码,你混淆的了manifest吗?

打开manifest,不出所料,使用的悬浮窗权限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

这样事情就变得简单了。全局搜索getSystemService("window")就找到了其使用WindowManager的地方,然后一步步跟下去,终于找到其设置背景颜色的地方。

根据这个app的代码,我整理出了下面的工具方法,有需要的直接拿去用:

    /**
* 过滤蓝光
* @param blueFilterPercent 蓝光过滤比例[10-80]
* */
public static @ColorInt int getColor(int blueFilterPercent)
{
int realFilter = blueFilterPercent;
if (realFilter < 10)
{
realFilter = 10;
}
else if (realFilter > 80)
{
realFilter = 80;
}
int a = (int) (realFilter / 80f * 180);
int r = (int) (200 - (realFilter / 80f) * 190);
int g = (int) (180 - ( realFilter / 80f) * 170);
int b = (int) (60 - realFilter / 80f * 60);
return Color.argb(a, r, g, b);
}

一般blueFilterPercent给个30左右的值就可以了。

贴两张效果图。

开启护眼模式前:

开启护眼模式后:

效果还是有。

博客:https://www.zhoumingyao.cn/

Android护眼模式功能小记的更多相关文章

  1. 最全面的AndroidStudio配置指南总结-包括护眼模式

    使用AndroidStudio开发APP已有半年多的时间了,从刚开始的不习惯到慢慢适应再到逐渐喜欢上AndroidStudio,中间的过程颇有一番曲折,现在把自己对AndroidStudio的配置心得 ...

  2. chrome护眼模式

    chrome护眼模式 使用stylish插件: 学习:https://jingyan.baidu.com/article/b907e627f74df146e6891c67.html 插件下载:http ...

  3. MyEclipse护眼模式、字体大小的调整

    1.Eclipse改变背景颜色 Windows menu --> Preference General -> Editors -> Text Editors(click),  在底部 ...

  4. Eclipse改变外观,护眼模式

    1.Eclipse改变背景颜色 Windows menu --> Preference General -> Editors -> Text Editors(click),  在右下 ...

  5. win7、win8.1淡绿色护眼模式设置

    Win7设置: 右击桌面 -> 个性化 -> 窗口颜色 -> 高级外观设置 选中 -> 项目:窗口     颜色:其他 修改:色调  饱和度 亮度 红  绿  蓝 添加到自定义 ...

  6. 修改hbuilder背景颜色为护眼模式

    复制以下代码,保存为.tmTheme文件导入HBuilder <?xml version="1.0" encoding="UTF-8"?> < ...

  7. eclipse设置护眼模式,就是设置为黑色背景,

    效果如上图 首先下载jar包,然后放到下面的目录,然后打开eclipse然后选择哪个dark的那个主题就可以了 然而这里只是设置软件部分的, 代码的背景和高亮显示,是在另外一个地方设置, 一般是下载e ...

  8. ubuntu下使用redshift开启护眼模式

    前面提到flux这东西在一些机器上并不能work,而且也找到了一些关于他不能work的线索(戳这里看原因).根据这些线索我们发现用flux不行了,得换用redshift,那好吧,我们就来装redshi ...

  9. [工具] 护眼宝 – 傻瓜版屏幕蓝光过滤应用[Win/Android]

    护眼宝 是一款 Windows.Android 下的屏幕蓝光过滤工具,傻瓜式操作,支持智能模式.疲劳提醒,可以有效的保护视力及减小夜间使用电脑.手机对睡眠对影响. 来自发现频道.   类似应用有很多了 ...

随机推荐

  1. 矩阵的f范数及其求偏导法则

    转载自: http://blog.csdn.net/txwh0820/article/details/46392293 矩阵的迹求导法则   1. 复杂矩阵问题求导方法:可以从小到大,从scalar到 ...

  2. CUDA零内存拷贝 疑问考证

    今天思考了一下CUDA零内存拷贝的问题,感觉在即将设计的程序中会派上用场,于是就查了一下相关信息. 以下是一些有帮助的链接: cuda中的零拷贝用法--针对二维指针 cuda中的零拷贝用法--针对一维 ...

  3. 从栈不平衡问题 理解 calling convention

    最近在开发的过程中遇到了几个很诡异的问题,造成了栈不平衡从而导致程序崩溃. 经过几经排查发现是和调用规约(calling convention)相关的问题,特此分享出来. 首先,讲一下什么是调用规约. ...

  4. OJ2237第k小数题解

    题目描述: 有n个数,请你找出第k小的数. 输入描述: 第一行有2个正整数n,k(n,k<=10^7)第二行有n个非负数ai(ai<=10^5) 输出描述: 输出第k小的数. 输入样例: ...

  5. Spring中对资源的读取支持

    Resource简单介绍 注:所有操作基于配置好的Spring开发环境中. 在Spring中,最为核心的部分就是applicationContext.xml文件,而此配置文件中字符串的功能发挥到了极致 ...

  6. C# 哈希表(Hashtable)用法笔记

    一.什么是Hashtable? Hashtable 类代表了一系列基于键的哈希代码组织起来的键/值对.它使用键来访问集合中的元素. 当您使用键访问元素时,则使用哈希表,而且您可以识别一个有用的键值.哈 ...

  7. Unity3D-Shader-人物残影效果

    [旧博客转移 - 2016年1月7日 00:24 ] 前面的话 上一篇讲了一下人物边缘发光效果,链接: Unity-ShaderLab-实现X光效果,这次我们利用这个Shader来实现人物残影效果 先 ...

  8. 平板点餐软件编程体会---记我的Android编程之路

    前言 想开发一个平板点餐系统,研究下陈江根大侠分享的一个很高水准的实例,只是个单机版无实用意义. (如需运行源码请回复联系邮箱) 实现 Mysql 数据库+Tomcat WEb服务器,使用Servle ...

  9. 常见MD5加密解密值及免费解密网站

    常用的MD5解密 MD5(admin,16)    = 7a57a5a743  MD5(admin,16)    = 7a57a5a743894a0e  MD5(admin888,16) = 469e ...

  10. 一个move_uploaded_file()引起的PHP异常与错误的深入理解

    背景:我在公司开发一个产品Excel导入到数据库的功能,写起来挺快的,用phpexcel几下就写好了,本地测试挺顺的,git push上去,项目负责人部署到测试环境,就出现问题了.具体问题一句话不好说 ...