Android 如何快速实现灰白化换皮肤效果?-阿里云开发者社区

开发者社区> 开发与运维> 正文

Android 如何快速实现灰白化换皮肤效果?

简介: ## 原因 清明期间不少客户端都上了灰白皮肤的效果,那我们客户端究竟如何实现黑白皮肤效果呢?本篇文章分享一种方式,让大家在客户端快速的进行黑白化换肤。 ## 效果 彩色效果 ![-w315](https://tva1.sinaimg.cn/large/00831rSTly1gdkd8ga8zrj30hi0v2tb6.jpg) 灰白化后效果 ![-w315](https://tva1.s

原因

清明期间不少客户端都上了灰白皮肤的效果,那我们客户端究竟如何实现黑白皮肤效果呢?本篇文章分享一种方式,让大家在客户端快速的进行黑白化换肤。

效果

彩色效果
-w315
灰白化后效果
-w315

需要基础知识

有些知识不在文章当中阐述,不知道的同学可以自行Google,百度后再看。

如下:kotlin,Activity 的生命周期,viewBinding。

View 如何变灰白化?

1、碰到这种情况,肯定我们要自定义View将他画出来了。然后我们操作Paint画就行了。

2、那我们如何自定义View画呢?有个类叫ColorMatrix,我们将他setSaturation(0f),用获得的对象再给ColorMatrixColorFilter,对Paint当中的colorFilter进行赋值就可以了。最后用这个Paint画就可以了。实现代码如下:

private val paint = Paint().apply {
       ColorMatrix().apply {
            setSaturation(0f)
        }.let {
           colorFilter = ColorMatrixColorFilter(it)
       }
}

Activity 如何变为灰白皮肤的呢?

如上操作后,我们已经知道了自定义View进行灰白化?

那我们怎么对一个Acitivity 进行灰白化呢?

不可能每一个View都去自定义View?

其实一个Activity的产出是有层级的View Three。不知道的同学可以打开Android Studio -> Tools -> Layout Inspector。如下

经过分析,我们写的布局是在ContentFrameLayout下面,因此只要我们替换了ContentFrameLayout,根据View的绘制原理,我们就可以对该布局下的所有View的Paint进行修改了。

那我们如何替换ContentFrameLayout,请回到 Activity 的生命周期,有个方法叫 onCreateView。代码如下,我们把ContentFrameLayout替换成我们的GrayWhiteSkinFrameLayout。

那我们GrayWhiteSkinFrameLayout类里做了什么呢?代码如下

app 如何全部变为灰白皮肤的呢?

实现父类的BaseActivity,子类继承就可以了,具体如下。

Flutter 如何变灰白皮肤的呢?

道理都是一样的,Flutter也是有层级的。我们只需要在最外层的Widget的Build 复写如下代码就好了。

@override
Widget build(BuildContext context) {
  return ColorFiltered(
      colorFilter: ColorFilter.mode(Colors.grey, BlendMode.color),
      child: Scaffold(
        appBar: _appBar,
        body: IndexedStack(
          index: _currIndex,
          children: <Widget>[HomeItemPage(), WidgetPage(), MyPage()],
        ),
        backgroundColor: Theme.of(context).backgroundColor,
        bottomNavigationBar: _buildBottomNavigationBar(context),
      ));
}

demo 地址,欢迎点star:https://github.com/YuriyPikachu/GrayWhiteSkinApp

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章