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

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

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

至于蒙版,可以用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/

转载于:https://www.cnblogs.com/DoNetCoder/p/7364452.html

Android护眼模式功能小记相关推荐

  1. Android护眼模式、屏幕亮度调节功能开发【基于Android8.0】

    Android护眼模式.屏幕亮度调节功能开发[基于Android8.0] [引言]网上关于写护眼模式,屏幕亮度调节的android的方法很少,找到的都不能很好的适配Android8.0的版本.于是自己 ...

  2. android 护眼模式设置参数,节能护眼看这里!玩转Android手机的显示设置

    原标题:节能护眼看这里!玩转Android手机的显示设置 对智能手机而言,除了性能以外,其屏幕的显示效果和续航时间对体验的影响往往更加直观.在系统设置的"显示"功能列表中,我们就能 ...

  3. android护眼程序原理,Android 护眼模式的实现

    思路:获取content根布局,在上面添加一层浮层,默认透明,开启护眼模式设置护眼色值. 实现:在BaseActivity的onCreate方法中,添加浮层,所有的Activity继承BaseActi ...

  4. Flutter实现Android护眼模式

    有一个奇葩的需求,甲方需要实现Android端护眼需求.查找了一番,发现护眼模式是某些厂商的,某些机型有提供.而且没有对外提供Api调用.于是思索一番,决定自己通过插件方式,使用原生方法实现. 先上效 ...

  5. Android护眼模式(argb)

    前提:护眼模式可以说是加一层某颜色且透明度小于1的view,现在网络上比较流行的护眼色博主比较喜欢以下两种. rgb值如下 第一种:r=199, g=237, b=204: 第一种:r=129, g= ...

  6. Android 10.0 开启和关闭护眼模式

    1.概述 在10.0系统的产品定制化中,由于一些定制化开发设备中,需要护眼模式,而护眼模式功能开启和关闭 也需要提供接口供app调用,这就需要在系统api中自定义的服务中,提供开启关闭护眼模式的接口, ...

  7. 一种简单的护眼模式实现

    概述: 不少健康管理类的app都有护眼模式的功能,在以往做过的项目中也曾经做过护眼模式功能的开发,当时参考和总结了市面上部分护眼类app的实现,顺便利用自身OS厂商可给与系统权限的优势实现了护眼模式, ...

  8. word2003如何设置护眼模式_在word中开启保护眼睛模式的详细教程

    导读: 今天小编给大家讲解在word中开启保护眼睛模式的详细教程,有需要或者有兴趣的朋友们可以看一看下文,相信对大家会有所帮助的. 今天小编给大家讲解在word中开启保护眼睛模式的详细教程,有需要或者 ...

  9. 2021-09-24努比亚X手机正屏打开护眼模式

    本人手机是努比亚X手机,这个品牌的手机真是一言难尽啊,从当初的国mu手机被吸引,到拍星星的手机,再到现在一直被用户嫌弃.唉,好像恋爱一样,从热恋到嫌弃,不知道什么时候就会分手再也不见. 开始正题,众所 ...

最新文章

  1. ossim-agent代理和要监控的服务器的配置
  2. linux7禁用ipv6,RHEL 7 及 CentOS 7 彻底禁用IPv6的方法
  3. 别纠结,提高代码整洁度也没那么难!
  4. [转载] Python杂记之 list.clear()方法,清空列表
  5. 智能水电表远程管理系统
  6. 考研数据结构——买卖青蛙
  7. 【Python】使用日历热图进行时序数据可视化
  8. 集成学习中boosting、bagging、随机森林算法的介绍
  9. powershell激活conda失败;无法加载文件 C:\Users\user\Documents\WindowsPowerShell\profile.ps1,因为在此系统上禁止运行脚本
  10. 【Origin双y轴】三条曲线,其中两条曲线共用一个y轴
  11. mysql是什么?mysql的特点
  12. 微信公众号引流的方法有哪些?
  13. 共识协议(7)aura
  14. 大学英语六级单词记录
  15. 【操作系统】30天自制操作系统--(9)叠加处理
  16. 2018软件工程第七次作业(团队二)
  17. 电容倍乘器【转自阿莫论坛】
  18. 苹果设备模拟器 所有XCcode正式版本 下载方法
  19. 整理了一些智能优化算法源代码
  20. 洛谷P1115最大子段和题解

热门文章

  1. linux里hba状态_Linux更换HBA卡后重新扫盘指令
  2. Unity游戏制作问题整理(1)--添加按钮声音
  3. miui7+android系统版本,用户升级完MIUI 7之后发现居然是Android 4.4,然后就疯了
  4. Ubuntu彻底卸载软件和清理磁盘空间
  5. Piggy-Bank HDU - 1114(多重背包)
  6. iOS 重力感应 学习1 陀螺仪 水平仪 指南针
  7. 于晓津外头游荡了半天
  8. 【2018可信云大会】太平洋保险丰隽玮:微服务架构实施与治理
  9. 增强现实与虚拟现实_到底什么是虚拟现实
  10. sparksql出现 serious problem at org.apache.hadoop.hive.ql.io.orc.OrcInputFormat.generateSplitsInfo