App 黑白化实现探索,有一行代码实现的方案吗?
4 月 4 日这一天,不少 网站、App 都通过黑白化,表达了深切的哀悼。
这篇文章我们纯谈技术。
我在当天,也给上线了黑白化效果:
直接撸代码吧!!
硬件加速方案
大家都知道硬件加速吧,我们一般选择硬件绘制还是软件绘制会调用下面的 API:
view.setLayerType(layerType, null);
我们很少关注,第二个参数。
第二个参数是Paint,然后我们可以这么做:
Paint mPaint = new Paint();
ColorMatrix cm = new ColorMatrix();
cm.setSaturation(0);
mPaint.setColorFilter(new ColorMatrixColorFilter(cm));
getWindow().getDecorView().setLayerType(View.LAYER_TYPE_HARDWARE, mPaint);
看到了吗…
我们可以直接给任何一个 View 去设置灰度化。
而且我们 Activity 可以拿到 decorView,也就是说我们直接在 decorView 上设置上述代码就可以了。
运行了一下:自行运行
这个方案明眼人看一眼,都知道明显简单多了。
你可以在 BaseActivity 或者搞个ActivityLifecycleCallbacks,只要能拿到 DecorView 就行。