最近有同学跟风,想知道怎么样把APP变成黑白的
拉大锯
发表于
2020-04-05 21:14
2263
灰色
主题
黑白
安卓
清明
最近有同学跟风,想知道怎么样把APP变成黑白的
其实方法有很多,大家都会做,只是懒罢了
怎么整呢?
难道我们单独每一个View去修改颜色吗?
这显然是不可行的
那怎么整呢?
思路
我们View的层级是一层嵌套一层的,而绘制的画笔也是由顶层给到下层的。
那我们拿到顶部的容器,改它的画笔不就可以了吗?
听起是这么回事!
- 如何拿到最顶部的容器呢?
View decorView = this.getWindow().getDecorView();
- 画笔要怎么设置?
我们可以通过矩阵,这个大学高代学过了。
设置它的饱和度为0即可
ColorMatrix cm = new ColorMatrix();
cm.setSaturation(0);
Paint paint = new Paint();
paint.setColorFilter(new ColorMatrixColorFilter(cm));
- 修改容器的画笔
decorView.setLayerType(View.LAYER_TYPE_SOFTWARE,paint);
- 如何作用于所有UI呢? 我们不是有BaseActivity吗?
所以我们在onCreate的时候,设置了contentView,去修改即可。不行我们再要求一下重新布局/重新绘制。
代码添加
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutResId());
//=====================================================
View decorView = this.getWindow().getDecorView();
ColorMatrix cm = new ColorMatrix();
cm.setSaturation(0);
Paint paint = new Paint();
paint.setColorFilter(new ColorMatrixColorFilter(cm));
decorView.setLayerType(View.LAYER_TYPE_SOFTWARE,paint);
//=======================================================
mBind = ButterKnife.bind(this);
initView();
initEvent();
initPresenter();
}
以上,我在onCreate里添加的代码,双横线注释内代码。
运行起来怎么样呢?
测试结果
关于热更新
热更新是需要去验证的,哪怕简单一点,你不是热更新,而是加了个标记量。去后台获取状态即可。这样也行,当然啦,技术是服务于产品的,作为程序员,我们应该想办法解决各种问题,而不是懒。