第三百七十二回

文章目录

  • 1. 概念介绍
  • 2. 实现方法
    • 2.1 maskFilter
    • 2.2 shader
  • 3. 代码与效果
    • 3.1 示例代码
    • 3.2 运行效果
  • 4. 内容总结

我们在上一章回中介绍了"两种阴影效果"相关的内容,本章回中将介绍如何绘制阴影效果.闲话休提,让我们一起Talk Flutter吧。

在这里插入图片描述

1. 概念介绍

我们在上一章回中介绍的阴影效果都是在某个组件上绑定阴影效果,本质上是把组件和阴影效果组合在了一起。本章回将介绍如何在创建组件时让组件自带阴影效果,也就
在绘制组件自身外观的同时绘制阴影效果。

2. 实现方法

绘制阴影效果主要是通过CustomPainter组件提供的画笔(Paint)实现,我们在画笔中添加阴影相关的配置,在使用画笔绘制组件时就可以画出带阴影效果的组件。给
画笔配置阴影效果有两种方法,接下来我们分别介绍这两种配置方法:

2.1 maskFilter

在创建画笔时,给画笔设置maskFilter属性就会创建出发散效果,这种效果看上去就像是阴影。我们可以使用MaskFilter的blur()方法来给maskFilter属性赋值,
该方法可以控制发散效果的样式和大小。这个大小值非常重要,通过该值可以控制阴影区域的大小。我们在后面的小节中将通过示例代码进行演示。

2.2 shader

在创建画笔时,给画笔设置shader属性也可以创建出阴影效果,它和使用maskFilter属性创建出的阴影效果类似。我们可以使用RadialGradient的createShader
方法给shader属性赋值。阴影的颜色,大小,效果范围都是通过RadialGradient组件的属性来控制,该组件中常用的属性如下:

  • center:主要用来控制阴影区域的中心位置;
  • radius:主要用来控制阴影区域的大小;
  • colors:主要用来控制阴影的颜色;
    上面介绍的这三个属性中,我们重点介绍colors属性,该属性是一个List<color>类型,它可以存放多个颜色值,因此它可以创建带有渐变效果的阴影。此外,给
    shader属性赋值时还需要一个矩形区域,它的radious一起配合使用,主要用来控制阴影区域的大小,我们在后面的小节中将通过示例代码进行演示。

3. 代码与效果

3.1 示例代码

///在canvas绘制图像时,通过设置画笔的maskFilter来实现阴影效果
class DrawShadow extends CustomPainter {
  
  void paint(Canvas canvas, Size size) {

    ///通过maskFilter来添加发光效果,看上去就是阴影效果
    ///colorFilter通常用来给图像添加阴影效果,绘制图形时体现不出来它的效果
    ///这里创建的阴影使用了单一颜色
    Paint paintA = Paint()
      ..color = Colors.blue.withOpacity(1)
      // ..colorFilter = ColorFilter.mode(Colors.redAccent, BlendMode.dst)
      ..strokeWidth = 4
      ..style = PaintingStyle.fill
      ..maskFilter = const MaskFilter.blur(BlurStyle.solid, 20);

    ///这里创建的阴影使用了渐变颜色
    RadialGradient gradient = const RadialGradient(
      ///用来控制中间颜色的位置
      center: Alignment(-1, -1),

      ///用来控制中间颜色的区域大小,需要和rect一起控制才可以
      radius: 0.6,
      colors: [Colors.black, Colors.black, Colors.black38],
    );

    ///rect的长和宽需要和圆形的半径有关联,不能太大也不能太小
    Rect rect = const Rect.fromLTWH(0, 0, 100, 100);
    Paint paintB = Paint()
      ..strokeWidth = 4
      ..style = PaintingStyle.fill
      ..maskFilter = const MaskFilter.blur(BlurStyle.solid, 20)
      ..shader = gradient.createShader(rect);

    ///渐变色的阴影最好偏移为0,不然效果不明显
    Offset offsetA = const Offset(150, 0);
    Offset offsetB = const Offset(0, 0);

    canvas.drawCircle(offsetA, 60, paintA);
    canvas.drawCircle(offsetB, 60, paintB);
  }

  
  bool shouldRepaint(covariant CustomPainter oldDelegate) {
    // throw UnimplementedError();
    return true;
  }
}

上面介绍的示例代码中演示了创建阴影效果的两种方法,我们在代码中添加了相关的注释,方便大家理解代码。

3.2 运行效果

编译并且运行上面的代码,可以得到下面的运行效果图,图中包含两个圆形,这个是黑白渐变色的圆形,另外一个是纯蓝色的圆形,它们的边缘都带有阴影效果。此外,我
建议大家自动动手去实战,通过调整阴影的颜色,大小等配置来创建不同的阴影效果。

4. 内容总结

最后,我们对本章回的内容做一个全面的总结:

  • 绘制阴影效果通过CustomPainter组件的Paint实现;
  • 使用Paint组件的maskFilter属性可以创建出纯色发散形状的阴影效果;
  • 使用Paint组件的shader属性可以创建出渐变色的阴影效果;
  • 阴影效果的颜色,区域大小都可以通过组件的属性来控制;
    看官们,与"如何绘制阴影效果"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/415138.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python爬虫实战第二例【二】

零.前言&#xff1a; 本文章借鉴&#xff1a;Python爬虫实战&#xff08;五&#xff09;&#xff1a;根据关键字爬取某度图片批量下载到本地&#xff08;附上完整源码&#xff09;_python爬虫下载图片-CSDN博客 大佬的文章里面有API的获取&#xff0c;在这里我就不赘述了。 一…

一文搞懂运放!

11.集成运放 集成电路是采用专门的制造工艺&#xff0c;在半导体单晶硅上&#xff0c;把晶体管、场效应管、二极管、电阻和电容等元器件以及它们之间的连线所组成的电路制作在一起&#xff0c;使其具有特定功能的芯片。 1.组成 集成运放由输入级、中间级、输出级和偏置电路四…

Python 深拷贝在接口自动化里的用法!

深拷贝&#xff08;deep copy&#xff09;常用于复制请求参数、配置对象或其他复杂数据结构&#xff0c;以确保每次发送请求时使用的是独立的数据副本&#xff0c;避免不同请求之间的数据互相影响。例如&#xff0c;当你需要多次调用同一个接口&#xff0c;但每次调用的参数略有…

关于静态应用程序安全测试(SAST)的自动修复(AutoFix)

SAST&#xff08;Static Application Security Testing&#xff0c;静态应用程序安全测试&#xff09;具是一种在软件工程中使用的安全解决方案&#xff0c;它主要用于在程序员编写好源代码后&#xff0c;无需经过编译器编译&#xff0c;直接对源代码进行扫描&#xff0c;以找出…

旋转齿轮加载

效果演示 实现了一个旋转齿轮的动画效果。具体来说&#xff0c;页面背景为深灰色&#xff0c;中间有一个齿轮装置&#xff0c;包括四个齿轮。每个齿轮都有内部的齿轮条&#xff0c;整体呈现出旋转的效果。其中&#xff0c;齿轮2是顺时针旋转的&#xff0c;齿轮1、3、4是逆时针旋…

如何开通微信小程序商城

微信小程序店铺是一种新型的线上商城&#xff0c;可以帮助商家快速搭建自己的线上销售平台&#xff0c;吸引更多的用户进行购买。作为小程序服务商&#xff0c;我们可以帮助商家开通微信小程序店铺&#xff0c;提升他们的线上销售业绩。 1. 进入采云小程序。进入采云小程序首页…

Python——Tchisla求解器(暴力搜索法)

Tchisla简介 最近玩到一个挺有意思的数字解密小游戏《Tchisla》&#xff0c;其规则类似算24点&#xff0c;也是利用一些数学运算和初始数字计算出目标数字&#xff0c;与算24点不同的是&#xff0c;Tchisla允许不限次数地使用一种初始数字&#xff08;1~9&#xff09;&#xf…

MySQL篇—持久化和非持久化统计信息介绍(第一篇,总共三篇)

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux&#xff0c;也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&#xff0c;并且也会默默的点赞收藏加关注❣…

科技论文编写思路

科技论文编写思路 1.基本框架2.课题可行性评估1.研究目标和意义2.研究方法和技术3.可行性和可操作性4.风险和不确定性5.经济性和资源投入6.成果预期和评估 3.写作思路4.利用AI读论文5.实验流程 1.基本框架 IntroductionRelated worksMethodExperiment and analysisDiscussionC…

JavaScript作用域及预解析

文章目录 1. 作用域介绍2. 变量的作用域*3. JS中没有块级作用域4. 作用域链5. 预解析预解析案例 1. 作用域介绍 全局作用域局部作用域相同的变量名称在不同的作用域中是不会相互影响的&#xff01; 2. 变量的作用域 全局变量&#xff1a;在全局下都可以使用&#xff1b;局部变…

集群分发脚本xsync

集群分发脚本xsync 一、简介二、环境准备三、添加到机器的 hosts 文件四、ping 命令测试五、SSH 配置5.1.本地先生成公钥和私钥5.2.将公钥拷贝到其他机器 六、xsync 脚本编写6.1.安装 rsync6.2.新建 xsync.sh6.3.xsync.sh脚本6.4.赋予脚本执行权限6.5.测试 endl 一、简介 配置…

学习笔记-李沐动手学深度学习(七)(19-21,卷积层、填充padding、步幅stride、多输入多输出通道)

总结 19-卷积层 【补充】看评论区建议的卷积动画视频 数学中的卷积 【链接】https://www.bilibili.com/video/BV1VV411478E/?fromsearch&seid1725700777641154181&vd_sourcee81e116c4ffe5e79d4bc44738263eda4 【可判断是否为卷积的典型标志】两个函数中自变量相加…

Unity零基础到进阶 | Unity中的 RectTransformUtility 方法整理汇总

Unity零基础到进阶 ☀️| RectTransformUtility 方法整理汇总一、RectTransformUtility 官方文档1.1 RectTransformUtility.CalculateRelativeRectTransformBounds&#xff08;重&#xff09;1.2 RectTransformUtility.FlipLayoutAxes1.3 RectTransformUtility.FlipLayoutOnAxi…

Unity中URP实现水体(水的焦散)

文章目录 前言一、原理1、 通过深度图&#xff0c;得到 对应像素 在 世界空间下的Z值2、得到模型顶点在 观察空间 下的坐标3、由以上两点得到 深度图像素 对应的 xyz 值4、最后&#xff0c;转化到 模型本地空间下&#xff0c;用其对焦散纹理采样 二、实现1、获取深度图2、在顶点…

[WebUI Forge]ForgeUI的安装与使用 | 相比较于Auto1111 webui 6G显存速度提升60-75%

ForgeUI的github主页地址:https://github.com/lllyasviel/stable-diffusion-webui-forge Stable Diffusion WebUI Forge 是一个基于Stable Diffusion WebUI(基于Gradio)的平台,可简化开发、优化资源管理并加快推理速度。 “Forge”这个名字的灵感来自于“Minecraft Forge”…

《Vite 基础知识》Vitepress 技术文档站点搭建与配置

前言 简介 VitePress 是一个静态站点生成器 (SSG)&#xff0c;专为构建快速、以内容为中心的站点而设计。 简而言之&#xff0c;可构建你自己的 技术文档站点&#xff1b; 环境要求 Node.js 18 及以上版本。我使用 v20.11.0 创建 第一步&#xff1a; 全局安装 npm i vitep…

图搜索基础-深度优先搜索

图搜索基础-深度优先搜索 参考原理引入流程解析手推例子 代码实现运行结果结果分析 参考 理论参考&#xff1a;深蓝学院 实现参考&#xff1a;github项目 原理 引入 对于这样一个图&#xff0c;我们试图找到S到G的通路&#xff1a; 计算机程序不会像人眼一样&#xff0c;一…

鸿蒙应用程序包安装和卸载流程

开发者 开发者可以通过调试命令进行应用的安装和卸载&#xff0c;可参考多HAP的调试流程。 图1 应用程序包安装和卸载流程&#xff08;开发者&#xff09; 多HAP的开发调试与发布部署流程 多HAP的开发调试与发布部署流程如下图所示。 图1 多HAP的开发调试与发布部署流程 …

线性DP-前缀和

哪种连续子字符串更长 思路 我们遍历输入字符串s中的每个字符。对于每个字符&#xff0c;我们检查它是1还是0&#xff0c;并相应地更新currentLength1和currentLength0。当我们遇到一个1时&#xff0c;我们增加currentLength1的值&#xff0c;并将currentLength0重置为0&#…

2023秋季飞书未来无限大会--随笔

这个时代的飞书 数字时代 工作协同平台 AI时代 帮助企业和个人用好AI 企业如何引用大模型能力&#xff1f; 智慧体— 接近人&#xff0c;有进步空间智能伙伴 用时代的科技打造爱不释手的好产品 移动互联网 – 改变信息分发方式 大模型 –自然的人机交互方式 业务协同 …