首页 > 新闻资讯 > 热点资讯 > 1213app怎么变

1213app怎么变成灰白

编辑:Hukari  来源:互联网  发布时间:2021-12-13 11:16:30

今天是12月13日,很多网友发现app和网页都只呈现了黑白色,这里,我们可以简单研究下。

常用方式

App页面置灰常规方案就能想到内置两套UI图,加载不同的UI,但是这样实现起来特别复杂,而且包体积大小也成倍增加,需要请求后台服务端的图片也得搞两套。

其实换个思路,我们把Android渲染的数据统一给他灰度不就可以实现我们所需要的功能嘛,那就得看下Android的UI绘制过程了,关于UI的绘制已经有很多分析了,这里就不赘述了。

原理实现

DecorView

一个Activity由最外层的PhoneWindow,然后往里是DecorView,接着就是Titlebar和Content,其中Content就是我们在Activity中的onCreate的方法中调用的setContentView来设置布局等。

既然要设置全局的app为灰色,那么我们只要设置最顶层的view为灰色,就可以做到全局灰色了,首先想到的肯定是PhoneWindow,但是phoneWindow是一个不可见的类,而由他创建的DecorView才是我们可见的UI布局。DecorView是一个ViewGroup,继承自FragmeLayout,是UI界面的顶级容器,在事件分发中,Key和touch事件也基本上是从DecorView层层向下分发。

Paint

Android的UI绘制基本上分为measure,layout和draw,这里我们只需要看draw,他是怎么画的,实例化了Canvas对象,对canvas进行一些属性赋值,最后调用view的draw(canvas)方法去绘制。

这里还需要知道Canvas,Paint和draw是干嘛的,从字面意思其实很好理解,Canvas就像一块画布,决定了你需要在哪里画,Paint就是画笔,可以提供各种各样的样式和色彩,最后你需要拿着画笔到规定的Canvas位置中去draw。

既然决定色彩的是Paint画笔,那么我们是不是可以强制设定画笔的颜色为灰色,不就可以实现我们的需求了,然后我们发现Paint有个方法

image.png

这里再穿插一下图像的基础知识。一般我们都知道图像是由一个一个像素点组成的,而像素点是通过RGBA(红绿蓝,透明度)来控制的,这个是数字方向的。但是在我们早期的彩色电视机中,我们经常会调整彩电的色调,饱和度和亮度,其中色调就是物体的颜色,饱和度就是颜色的纯度,从0到100%来描述,亮度就是颜色的相对明暗程度。

既然饱和度为0就可以变成灰色,那么我们通过设置ColorMatrix然后给到Paint画笔不就可以了。

最终实现

我们先实现个方法:

image.png

Activity

然后我们可以在Activity的OnCreate方法中设置顶层的DecorView的画笔

setViewGray(getWindow().getDecorView());

然后我们需要的效果就出来了。

自定义dialog

如果Activity中有个按钮点击弹出dialog,此时这个dialog不属于当前Window,而是新建了一个window,相当于走了一遍Activity中创建window的流程,所以此时我们需要在其构造方法中:

image.png

以上就是本期给大家带来的咨询,更多热点新闻尽情关注ai7手游帮,每天都有新内容等着大家!

良心推荐

如果是交易商品行业,那么肯定就会有中间平台,赚取其中的佣金手续费等等,随着某宝、某东、某多多等等电商购物软件的兴起,市面上也推出了很多优惠卷、返利的APP,相信经常网购的小伙伴肯定不会陌生,来随小编看看购物返利app有哪些吧。更多

相关资讯