鸿蒙UI开发——渐变色效果

news2025/1/19 3:19:07

1、概 述

ArkTs可以通过颜色渐变接口,设置组件的背景颜色渐变效果,实现在两个或多个指定的颜色之间进行平稳的过渡。

目前提供三种渐变类型:线性渐变、角度渐变、径向渐变。

我们在鸿蒙UI布局实战 —— 个人中心页面开发中,默认头像部分,使用到了线性渐变,效果如下:

图片

在项目中合理的使用渐变色,有助于让我们的APP更加灵动,下面对三种渐变效果做讨论。

2、接口定义

三种渐变方式对应的接口如下:

  • 线性渐变

linearGradient(value: {angle?: number | string; direction?: GradientDirection; colors: Array<[ResourceColor, number]>; repeating?: boolean;})

参数说明如下:

    • angle: 线性渐变的起始角度。0点方向顺时针旋转为正向角度。默认值:180,角度为字符串时仅支持类型deg,grad,rad,trun。

    • direction: 线性渐变的方向,设置angle后不生效。默认值:GradientDirection.Bottom

    • colors: 指定某百分比位置处的渐变色颜色,设置非法颜色直接跳过。

    • repeating: 为渐变的颜色重复着色。默认值:false

线性渐变的示例效果如下:

图片

  • 角度渐变

sweepGradient(value: {center: [Length, Length]; start?: number | string; end?: number | string; rotation?: number | string; colors: Array<[ResourceColor, number]>; repeating?: boolean;})

仅绘制0-360度范围内的角度,超出时不绘制渐变色,只绘制纯色。参数说明如下:

    • center:为角度渐变的中心点,即相对于当前组件左上角的坐标。

    • start:角度渐变的起点。默认值:0,角度为字符串时仅支持类型deg,grad,rad,trun。

    • end:角度渐变的终点。默认值:0,角度为字符串时仅支持类型deg,grad,rad,trun。

    • rotation: 角度渐变的旋转角度。默认值:0,角度为字符串时仅支持类型deg,grad,rad,trun。

    • colors: 指定某百分比位置处的渐变色颜色,设置非法颜色直接跳过。

    • repeating: 为渐变的颜色重复着色。默认值:false

说明:

设置为小于0的值时,按值为0处理,设置为大于360的值时,按值为360处理。

当start、end、rotation的数据类型为string,合法的取值为纯数字或纯数字后带"deg"(度)、"rad"(弧度)、"grad"(梯度)、"turn"(圈)单位,例如:"90"、 "90deg"、"1.57rad"。

角度渐变的示例效果如下:

图片

  • 径向渐变

radialGradient(value: { center: [Length, Length]; radius: number | string; colors: Array<[ResourceColor, number]>; repeating?: boolean })

参数说明如下:

    • center:径向渐变的中心点,即相对于当前组件左上角的坐标。

    • radius:径向渐变的半径。取值范围:[0,+∞),设置为小于的0值时,按值为0处理。

    • colors: 指定某百分比位置处的渐变色颜色,设置非法颜色直接跳过。

    • repeating: 为渐变的颜色重复着色。默认值:false

径向渐变的示例效果如下:

图片

3、代码示例

👉🏻 线性渐变代码示例

效果如下:

图片

代码如下(使用了网格布局,一行展示两个效果):

@Entry@Componentstruct LinearGradientDemo {  build() {    Grid() {      GridItem() {        Column() {          Text('angle: 180')            .fontSize(15)        }        .width(100)        .height(100)        .justifyContent(FlexAlign.Center)        .borderRadius(10)        .linearGradient({          // 0点方向顺时针旋转为正向角度,线性渐变起始角度的默认值为180°          colors: [            [0xf56c6c, 0.0], // 颜色断点1的颜色和比重,对应组件在180°方向上的起始位置            [0xffffff, 1.0], // 颜色断点2的颜色和比重,对应组件在180°方向上的终点位置          ]        })      }      GridItem() {        Column() {          Text('angle: 45')            .fontSize(15)        }        .width(100)        .height(100)        .justifyContent(FlexAlign.Center)        .borderRadius(10)        .linearGradient({          angle: 45, // 设置颜色渐变起始角度为顺时针方向45°          colors: [            [0xf56c6c, 0.0],            [0xffffff, 1.0],          ]        })      }      GridItem() {        Column() {          Text('repeat: true')            .fontSize(15)        }        .width(100)        .height(100)        .justifyContent(FlexAlign.Center)        .borderRadius(10)        .linearGradient({          repeating: true, // 在当前组件内0.3到1.0区域内重复0到0.3区域的颜色渐变效果          colors: [            [0xf56c6c, 0.0],            [0xE6A23C, .3],          ]        })      }      GridItem() {        Column() {          Text('repeat: false')            .fontSize(15)        }        .width(100)        .height(100)        .justifyContent(FlexAlign.Center)        .borderRadius(10)        .linearGradient({          colors: [            [0xf56c6c, 0.0], // repeating默认为false,此时组件内只有0到0.3区域内存在颜色渐变效果            [0xE6A23C, .3],          ]        })      }    }    .columnsGap(10)    .rowsGap(10)    .columnsTemplate('1fr 1fr')    .rowsTemplate('1fr 1fr 1fr')    .width('100%')    .height('100%')  }}

👉🏻 角度渐变代码示例

效果如下:

图片

代码如下:

@Entry@Componentstruct SweepGradientDemo {  build() {    Grid() {      GridItem() {        Column() {          Text('center: 50')            .fontSize(15)        }        .width(100)        .height(100)        .justifyContent(FlexAlign.Center)        .borderRadius(10)        .sweepGradient({          center: [50, 50], // 角度渐变中心点          start: 0, // 角度渐变的起点          end: 360, // 角度渐变的终点。          repeating: true, // 渐变效果在重复          colors: [          // 当前组件中,按照中心点和渐变的起点和终点值,          // 角度区域为0-0.125的范围,从颜色断点1的颜色渐变到颜色断点2的颜色,          // 角度区域0.125到0.25的范围,从颜色断点2的颜色渐变到颜色断点3的颜色,          // 因为repeating设置为true,角度区域0.25到1的范围,重复区域0到0.25的颜色渐变效果            [0xf56c6c, 0], // 颜色断点1的颜色和比重,对应角度为0*360°=0°,角点为中心点            [0xffffff, 0.125], // 颜色断点2的颜色和比重            [0x409EFF, 0.25] // 颜色断点3的颜色和比重          ]        })      }      GridItem() {        Column() {          Text('center: 0')            .fontSize(15)        }        .width(100)        .height(100)        .justifyContent(FlexAlign.Center)        .borderRadius(10)        .sweepGradient({          center: [0, 0], // 角度渐变中心点,当前为组件的左上角坐标          start: 0,          end: 360,          repeating: true,          colors: [          // 当前组件中,因为角度渐变中心是组件的左上角,所以从颜色断点1到颜色断点3的角度范围,恰好可以覆盖整个组件            [0xf56c6c, 0], // 颜色断点1的颜色和比重,对应角度为0*360°=0°            [0xffffff, 0.125], // 色断点2的颜色和比重,对应角度为0.125*360°=45°            [0x409EFF, 0.25] // 色断点3的颜色和比重,对应角度为0.25*360°=90°          ]        })      }      GridItem() {        Column() {          Text('repeat: true')            .fontSize(15)        }        .width(100)        .height(100)        .justifyContent(FlexAlign.Center)        .borderRadius(10)        .sweepGradient({          center: [50, 50],          start: 0,          end: 360,          repeating: true,          colors: [            [0xf56c6c, 0],            [0xffffff, 0.125],            [0x409EFF, 0.25]          ]        })      }      GridItem() {        Column() {          Text('repeat: false')            .fontSize(15)        }        .width(100)        .height(100)        .justifyContent(FlexAlign.Center)        .borderRadius(10)        .sweepGradient({          center: [50, 50],          start: 0,          end: 360,          repeating: false, //只在颜色断点角度覆盖范围内产生颜色渐变效果,其余范围内不重复          colors: [            [0xf56c6c, 0],            [0xffffff, 0.125],            [0x409EFF, 0.25]          ]        })      }    }    .columnsGap(10)    .rowsGap(10)    .columnsTemplate('1fr 1fr')    .rowsTemplate('1fr 1fr 1fr')    .width('100%')    .height(437)  }}

👉🏻 径向渐变代码示例

效果如下:

图片

代码如下:

@Entry@Componentstruct radialGradientDemo {  build() {    Grid() {      GridItem() {        Column() {          Text('center: 50')            .fontSize(15)        }        .width(100)        .height(100)        .justifyContent(FlexAlign.Center)        .borderRadius(10)        .radialGradient({          center: [50, 50], // 径向渐变中心点          radius: 100, // 径向渐变半径          repeating: true, // 允许在组件内渐变范围外重复按照渐变范围内效果着色          colors: [            // 组件内以[50,50]为中心点,在半径为0到12.5的范围内从颜色断点1的颜色渐变到颜色断点2的颜色,            // 在半径为12.5到25的范围内从颜色断点2的颜色渐变到颜色断点3的颜色,            // 组件外其他半径范围内按照半径为0到25的渐变效果重复着色            [0xf56c6c, 0], // 颜色断点1的颜色和比重,对应半径为0*100=0            [0xffffff, 0.125], // 颜色断点2的颜色和比重,对应半径为0.125*100=12.5            [0x409EFF, 0.25] // 颜色断点3的颜色和比重,对应半径为0.25*100=25          ]        })      }      GridItem() {        Column() {          Text('center: 0')            .fontSize(15)        }        .width(100)        .height(100)        .justifyContent(FlexAlign.Center)        .borderRadius(10)        .radialGradient({          center: [0, 0], // 径向渐变中心点,当前为组件左上角坐标          radius: 100,          repeating: true,          colors: [            [0xf56c6c, 0],            [0xffffff, 0.125],            [0x409EFF, 0.25]          ]        })      }      GridItem() {        Column() {          Text('repeat: true')            .fontSize(15)        }        .width(100)        .height(100)        .justifyContent(FlexAlign.Center)        .borderRadius(10)        .radialGradient({          center: [50, 50],          radius: 100,          repeating: true,          colors: [            [0xf56c6c, 0],            [0xffffff, 0.125],            [0x409EFF, 0.25]          ]        })      }      GridItem() {        Column() {          Text('repeat: false')            .fontSize(15)        }        .width(100)        .height(100)        .justifyContent(FlexAlign.Center)        .borderRadius(10)        .radialGradient({          center: [50, 50],          radius: 100,          repeating: false, // 在组件内渐变范围外不重复按照渐变范围内效果着色          colors: [            [0xf56c6c, 0],            [0xffffff, 0.125],            [0x409EFF, 0.25]          ]        })      }    }    .columnsGap(10)    .rowsGap(10)    .columnsTemplate('1fr 1fr')    .rowsTemplate('1fr 1fr 1fr')    .width('100%')    .height('100%')  }}

4、one more thing

一般情况下,除非我们是设计师,否则很难找到一些比较好的渐变色搭配,如果你想找一些合适的渐变色,可以来这里找找 http://www.gradientsguru.com/ (注意,这不是在打广告)

如果你也有其他的好的设计资源网站,欢迎留言~

图片

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

渗透测试--数据库攻击

这篇文章瘾小生其实想了很久&#xff0c;到底是放在何处&#xff0c;最终还是想着单拎出来总结&#xff0c;因为数据库攻击对我们而言非常重要&#xff0c;而且内容众多。本篇文章将讲述在各位获取数据库权限的情况下&#xff0c;各个数据库会被如何滥用&#xff0c;以及能够滥…

Java——异常机制(上)

1 异常机制本质 (异常在Java里面是对象) (抛出异常&#xff1a;执行一个方法时&#xff0c;如果发生异常&#xff0c;则这个方法生成代表该异常的一个对象&#xff0c;停止当前执行路径&#xff0c;并把异常对象提交给JRE) 工作中&#xff0c;程序遇到的情况不可能完美。比如…

Idea Spring Initializr没有 Java 8选项解决办法

问题描述 在使用IDEA中的Spring Initializr创建新项目时&#xff0c;Java 版本近可选择Java17,21 。不能选择Java8;SpringBoot 版本也只有 3.x 问题原因 Spring 官方&#xff08; https://start.spring.io/&#xff09;不再提供旧版本的初始化配置 解决方案 方案 1 使用阿里…

npm发布插件到私有仓库保姆级教程

在开发项目的过程中&#xff0c;我们经常需要安装插件依赖&#xff0c;那么怎么把自己开发的组件封装成一个插件&#xff0c;并发布到npm 插件市场或者上传到私有仓库里面呢&#xff1f;今天总结下自己发布插件到私有仓库的记录&#xff1a; 一、创建组件 执行命令创建一个空…

渗透测试---burpsuite(5)web网页端抓包与APP渗透测试

声明&#xff1a;学习素材来自b站up【泷羽Sec】&#xff0c;侵删&#xff0c;若阅读过程中有相关方面的不足&#xff0c;还请指正&#xff0c;本文只做相关技术分享,切莫从事违法等相关行为&#xff0c;本人与泷羽sec团队一律不承担一切后果 视频地址&#xff1a;泷羽---bp&…

关闭windows11的“热门搜索”

win10搜索栏热门搜索怎么关闭&#xff1f;win10搜索栏热门搜索关闭方法分享_搜索_onecdll-GitCode 开源社区 注册表地址是&#xff1a;计算机\HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\ 最后效果如下&#xff1a;

【MySQL】视图详解

视图详解 一、视图的概念二、视图的常用操作2.1创建视图2.2查询视图2.3修改视图2.4 删除视图2.5向视图中插入数据 三、视图的检查选项3.1 cascaded&#xff08;级联 &#xff09;3.2 local(本地) 四、视图的作用 一、视图的概念 视图&#xff08;View&#xff09;是一种虚拟存…

数据结构 (22)哈夫曼树及其应用

前言 哈夫曼树&#xff08;Huffman Tree&#xff09;&#xff0c;又称最优二叉树或最优树&#xff0c;是一种特殊的二叉树结构&#xff0c;其带权路径长度&#xff08;WPL&#xff09;最短。 一、哈夫曼树的基本概念 定义&#xff1a;给定N个权值作为N个叶子结点&#xff0c;构…

Jenkins 的HTTP Request 插件为什么不能配置Basic认证了

本篇遇到的问题 还是因为Jenkins需要及其所在的OS需要升级&#xff0c;升级策略是在一台新服务器上安装和配置最新版本的Jenkins&#xff0c; 当前的最新版本是&#xff1a; 2.479.2 LTS。 如果需要这个版本的话可以在官方站点下载&#xff0c;也可以到如下地址下载&#xff1…

1.1 Beginner Level学习之“创建 ROS msg 和 srv”(第十节)

学习大纲&#xff1a; 1. msg 和 srv msg 文件是描述 ROS 消息字段的简单文本文件。它们用于为不同语言生成消息的源代码。srv 文件则描述了一个服务&#xff0c;包括两部分&#xff1a;请求和响应。Srv 文件用于生成服务的源代码。msg 文件存储在包的 msg 目录中。srv 文件存…

ubuntu中使用ffmpeg库进行api调用开发

一般情况下&#xff0c;熟悉了ffmpeg的命令行操作&#xff0c;把他当成一个工具来进行编解码啥的问题不大&#xff0c;不过如果要把功能集成进自己的软件中&#xff0c;还是要调用ffmpeg的api才行。 ffmpeg的源码和外带的模块有点太多了&#xff0c;直接用官网别人编译好的库就…

deepsort复现报错TypeError: tuple indices must be integers or slices, not tuple 解决

deepsort复现中遇到的TypeError: tuple indices must be integers or slices, not tuple问题的解决-CSDN博客 以上为参考教程。 复现的时候出现这个报错&#xff0c;搞了好久试了好多方法&#xff0c;包括降 scikit-learn版本&#xff0c;都不行&#xff0c;最后终于找到这个博…

Rigol DP711自动控制--SCPI命令

通过串口的SCPI命令来控制通道输入输出 也可以用UltraSigma UI来发送SCPI 物理连接&#xff1a; Pin2_2, Pin3_3, Pin5_5 串口命令控制&#xff1a; 命令&#xff1a;9600&#xff0c; 8bit, None SCPI CMD(Standard Commands for Programmable Instruments) OUTPut CH1, On…

【Java Web】Tomcat 快速入门

通常&#xff0c;为了让 Java 开发的应用程序&#xff08;app&#xff09;能够在服务器上正常运行&#xff0c;必须安装 Java 运行时环境&#xff08;JRE&#xff09;。JRE 主要支持 Java SE&#xff0c;而如果要运行 Java EE 应用&#xff0c;则需要更多的支持&#xff0c;比如…

RabbitMQ延迟消息的实现

RabbitMQ延迟队列的实现 延迟消息是什么延迟消息的实现死信交换机代码实现 延迟消息插件 延迟消息是什么 延迟消息是将消息发送到MQ中&#xff0c;消费者不会立即收到消息&#xff0c;而是过一段时间之后才会收到消息&#xff0c;进行处理。在一些业务中&#xff0c;可以用到延…

SpringMvc完整知识点一

SpringMVC概述 定义 SpringMVC是一种基于Java实现MVC设计模型的轻量级Web框架 MVC设计模型&#xff1a;即将应用程序分为三个主要组件&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&#xff09;。这种分离…

强化学习新突破:情节记忆与奖励机制引领多智能体协作

简介 本推文介绍了韩国科学技术院发表在人工智能顶会ICLR 2024上的论文《Efficient Episodic Memory Utilization of Cooperative Multi-Agent Reinforcement Learning》。该论文提出创新性高效情节记忆利用&#xff08;Efficient Episodic Memory Utilization&#xff0c;EMU…

密码翻译

密码翻译 C语言实现C实现Java实现Python实现 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 在情报传递过程中&#xff0c;为了防止情报被截获&#xff0c;往往需要对情报用一定的方式加密&#xff0c;简单的加密算法虽然不足以完全避免情报…

【C++初阶】第7课—标准模版库STL(string_1)

文章目录 1. 什么是STL2. STL六大组件3. 标准库中string类3.1 auto关键字3.2 范围for3.3 string类的类型3.4 string类的常用接口(string类对象的常见构造)3.5 string的析构和赋值运算符重载3.6 string类对象的容量操作 1. 什么是STL STL(standard template library—标准模板库…

uniapp扭蛋机组件

做了一个uniapp的扭蛋机组件&#xff0c;可以前往下载地址下载 支持vue2、3、h5页面微信小程序&#xff0c;其余小程序未测试 示例图片