自学内容网 自学内容网

着色器ShaderMask

说明

实现一个渐变进度条,要求
颜色渐变的过程是循序渐进的,而不是看起来像是将渐变条逐渐拉长了。

效果

请添加图片描述

源码

// 渐变进度条
            Stack(
              children: [
                // 背景色板
                Container(
                  width: 300,
                  height: 8,
                  decoration: BoxDecoration(
                      borderRadius: BorderRadius.circular(12),
                      color: Colors.grey.withOpacity(0.15)),
                ),
                //  着色
                ClipRRect(
                  borderRadius: BorderRadius.circular(12),
                  // ShaderMask 着色器
                  child: ShaderMask(
                    // BlendMode 多种模式可选
                    //【BlendMode介绍】https://blog.csdn.net/chenlove1/article/details/84574237
                    blendMode: BlendMode.srcOver, // srcOver :将 源 合成到 目标上
                    shaderCallback: (Rect bounds) {
                      // 源图像
                      return const LinearGradient(
                        colors: [Color(0xFF7451ff), Color(0xff40d0fd)],
                      ).createShader(const Rect.fromLTWH(0, 0, 300, 8));
                    },
                    // 目标图像
                    child: AnimatedContainer(
                      width: 200, // 进度
                      height: 8,
                      duration: Durations.medium1,
                      decoration: BoxDecoration(
                        borderRadius: BorderRadius.circular(12),
                        color: Colors.grey.withOpacity(0.15),
                      ),
                    ),
                  ),
                )
              ],
            )

原文地址:https://blog.csdn.net/weixin_45625639/article/details/142384655

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!