App 黑白化实现探索2, 发现了一种更方便的方案,我被锤了!

栏目: IT技术 · 发布时间: 4年前

内容简介:昨天发出:没想到收到了超多的反馈,当然可能还是我的文章写得好,大家看完忍不住留言。

昨天发出:

App 黑白化实现探索,有一行代码实现的方案吗?

没想到收到了超多的反馈,当然可能还是我的文章写得好,大家看完忍不住留言。

但是昨天的方案,太追求全局化了,我们企图一次性让一个 app 完全变色;

实际情况果然被打脸了,因为很多同学回去果断把自己项目加了昨天的代码,由于各种项目的复杂程度,果然在一些特殊控件上遇到了一些问题。

所以,今天开篇之前,我要做点小反思。

1

小反思

比如昨天的一个核心知识点,其实就是我们提供了一个 GrayFrameLayout,这个布局能够有变灰的效果。

其实博客到这里就能够结束...

但是为了文章的丰满程度,也有点装逼的因素,我补充了很多全局化的思路,导致大家预期都在全局替换上,以至于有些特殊控件没法换成(目前主要是 webview 和视频播放,后面会说新方案),导致大部分同学回去直接干到项目上,有些运行完美,直呼“可以可以”;有些运行可能遇到问题,表示“辣鸡”。

还是希望大家以技术储备为主,真要上线的项目,肯定是稳定性第一,把影响降低到最小,所有有风险的地方都要反复 check,这种要求,一般一篇技术文章是做不到的。

由于收到这些问题反馈,所以第二天假期我又伏案撸代码...

面临的问题主要有两个 :

  1. webview 加载页面有一些显示异常;

  2. 有些视频播放出了问题;

针对这两个问题,想了一天如何屏蔽某些 View不受灰度化的影响。

撸了一天...

果然黄天不负有心人...

我一个朋友发现了更好的方案...(我也是颓了,不过他应该是站在我腿上发现的,这么想我心里好受了一些)

这位朋友昵称:淡蓝色星期三,如果你们在各个群看到这个昵称,请替我说一句牛逼。

另外小缘也被我骚扰的,看了半天源码,估计这会还在研究呢...

2

可能是更好的方案

大家都知道硬件加速吧,我们一般选择硬件绘制还是软件绘制会调用下面的 API:

view.setLayerType(layerType, null);

我们很少关注,第二个参数。

第二个参数是Paint,然后我们可以这么做:

Paint paint = new Paint();
ColorMatrix cm = new ColorMatrix();
cm.setSaturation(0);
mPaint.setColorFilter(new ColorMatrixColorFilter(cm));
getWindow().getDecorView().setLayerType(View.LAYER_TYPE_HARDWARE, paint);

看到了吗...

我们可以直接给任何一个 View 去设置灰度化。

而且我们 Activity 可以拿到 decorView,也就是说我们直接在 decorView 上设置上述代码就可以了。

运行了一下:

App 黑白化实现探索2, 发现了一种更方便的方案,我被锤了!

这个方案明眼人看一眼,都知道明显比我们昨天的简单多了。

你可以在 BaseActivity 或者搞个 ActivityLifecycleCallbacks,只要能拿到 DecorView 就行。

昨天的方案刚好有反馈 webview 和视频 bug,我立即联系了两位反馈的同学:

视频问题反馈:

App 黑白化实现探索2, 发现了一种更方便的方案,我被锤了!

webview 问题反馈:

App 黑白化实现探索2, 发现了一种更方便的方案,我被锤了!

好了,我服了...

从全局替换的角度来看,这个方案稳定性也更好一些。

有个缺点可能是依赖硬件加速,但是现在也没什么应用不开硬件加速的。

那么是不是有了更好的方案,就赶紧换方案?

3

 赶紧换方案?

不是的。

你应该意识到,你又多了一个知识点,又增加了一个方案可以供选择。

从现在开始,你有两个方案能让一个 View 变灰,他们各有优劣势。

如果你遇到全局的需求,那么是不是后者这个方案就一定不会出问题呢?

肯定不是的,肯定有一些奇葩的功能受到影响,比如一些 VR 效果什么的。

所以,真要用,我建议采取:

没有特殊控件的页面可以整个页面替换,有特殊的可以考虑自定义一个 GrayFrameLayout,哪里需要套哪里,实现粒度细化,至于这个 GrayFrameLayout的实现,我相信你至少有两种方案。

好了...

另外谈一下心态,大家写博客,发文反馈有问题,或者有人有更好的方案,不要不好意思,直面问题。

没有谁能做到一点不出错的,大佬们说错话可能叫打脸,我说错话可以定义为日常...

和大家一起“被锥 中成长!

希望你奇怪的知识又增加了。

假期已经被这代码干掉两天了。

明天我要休息...做条红烧鱼吃...

拜了个拜!

推荐阅读

App 黑白化实现探索,有一行代码实现的方案吗?

特效系列,仿instagram文字排版特效

吹爆系列:深入探索 Android 包体积优化

App 黑白化实现探索2, 发现了一种更方便的方案,我被锤了!

App 黑白化实现探索2, 发现了一种更方便的方案,我被锤了!

扫一扫  关注我的公众号

如果你想要跟大家分享你的文章,欢迎投稿~

┏(^0^)┛明天见!


以上所述就是小编给大家介绍的《App 黑白化实现探索2, 发现了一种更方便的方案,我被锤了!》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Transcending CSS

Transcending CSS

Andy Clarke、Molly E. Holzschlag / New Riders / November 15, 2006 / $49.99

As the Web evolves to incorporate new standards and the latest browsers offer new possibilities for creative design, the art of creating Web sites is also changing. Few Web designers are experienced p......一起来看看 《Transcending CSS》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试