首页 技术 正文
技术 2022年11月21日
0 收藏 619 点赞 3,702 浏览 1303 个字

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

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

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

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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,000
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,512
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,358
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,141
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,771
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,849