网站首页 > 博客文章 正文
原因
清明期间不少客户端都上了灰白皮肤的效果,那我们客户端究竟如何实现黑白皮肤效果呢?本篇文章分享一种方式,让大家在客户端快速的进行黑白化换肤。
效果
彩色效果
灰白化后效果
需要基础知识
有些知识不在文章当中阐述,不知道的同学可以自行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
猜你喜欢
- 2024-09-10 全新版Jetpack进阶提升,系统性落地短视频App(完结)
- 2024-09-10 Android开发新选择:Kotlin(kotlin android开发教程)
- 2024-09-10 高兼容低成本,开箱即用的首页性能优化方式被我们找到了
- 2024-09-10 使用Kotlin实战一个BaseActivity并制作一个登录页
- 2024-09-10 Kotlin 1.2 Beta 发布,来看看新特性!
- 2024-09-10 Android自定义控件(高手级)——JOJO同款能力分析图
- 2024-09-10 Spring Boot 自定义Jackson ObjectMapper
- 2024-09-10 android studion 使用kotlin操作ListView代码量的减少
- 2024-09-10 使用Kotlin实战一个Android架构中的MVP模式,简单实用
- 2024-09-10 使用kotlin实现沉浸式状态栏(kotlin ui框架)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)