当前位置: 首页 > news >正文

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

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/ (注意,这不是在打广告)

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

图片

相关文章:

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

1、概 述 ArkTs可以通过颜色渐变接口&#xff0c;设置组件的背景颜色渐变效果&#xff0c;实现在两个或多个指定的颜色之间进行平稳的过渡。 目前提供三种渐变类型&#xff1a;线性渐变、角度渐变、径向渐变。 我们在鸿蒙UI布局实战 —— 个人中心页面开发中&#xff0c;默认…...

嵌入式硬件设计 — 智能设备背后的隐形架构大师

目录 引言 一、嵌入式硬件设计概述 &#xff08;一&#xff09;需求分析 &#xff08;二&#xff09;硬件选型 &#xff08;三&#xff09;电路设计 &#xff08;四&#xff09;PCB 制作与焊接 &#xff08;五&#xff09;硬件调试与测试 &#xff08;六&#xff09;软…...

QNX的系统资源访问机制

资料参考: QNX官网文档 在QNX中,一些系统的资源默认是无法访问的,或者可访问的范围过大,导致产生不可控的危险,此时便需要对系统资源进行访问限制 接口如下 #include <sys/rsrcdbmgr.h> #include <sys/rsrcdbmsg.h>int rsrcdbmgr_create(...

高校数字化运营平台解决方案:构建统一的服务大厅、业务平台、办公平台,助力打造智慧校园

教育数字化是建设教育强国的重要基础&#xff0c;利用技术和数据助推高校管理转型&#xff0c;从而更好地支撑教学业务开展。 近年来&#xff0c;国家多次发布政策&#xff0c;驱动教育行业的数字化转型。《“十四五”国家信息化规划》&#xff0c;推进信息技术、智能技术与教育…...

多模态大型语言模型MM-1.5采用数据驱动的方法,通过不断优化数据组合提高模型性能

多模态大型语言模型MM-1.5采用数据驱动的方法&#xff0c;通过不断优化数据组合提高模型性能 MM-1.5模型的设计核心在于其数据驱动的方法&#xff0c;这意味着模型的性能在很大程度上取决于所使用的数据类型和组合。这种方法的实施细节可以从以下几个方面来展开&#xff1a; …...

16 设计模式之适配器模式(充电器转换案例)

一、适配器模式的定义 适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;常用于解决接口不兼容的问题。适配器模式通过引入一个“适配器”类&#xff0c;将一个接口转化为客户端期望的另一种接口&#xff0c;使得原本因接口不兼容而无法交互…...

基于Java Springboot在线招聘APP且微信小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 微信…...

多组学数据如何发表高分SCI论文,以RNA-Seq数据为例

随着高通量测序以及生物信息学的发展&#xff0c;R语言在生物大数据分析以及数据挖掘中发挥着越来越重要的作用。想要成为一名优秀的生物数据分析者与科研团队不可或缺的人才&#xff0c;除了掌握对生物大数据挖掘与分析技能之外&#xff0c;还要具备一定的统计分析能力与SCI论…...

Qt Designer Ui设计 功能增加

效果展示 输入密码&#xff0c;密码错误&#xff0c;弹出提示 密码正确&#xff0c;弹出提示并且关闭原窗口 代码&#xff08;只提供重要关键主代码&#xff09;lxh_log.py代码&#xff1a; import sysfrom PySide6.QtWidgets import QApplication, QWidget, QPushButtonfrom …...

【Android学习】2024最新版Android Studio安装与配置

准备工作 Windows系统的要求 一、下载 Android Studio官网&#xff1a;https://developer.android.google.cn/studio?hlen 今天是2024年9月27日&#xff0c;Android Studio已经更新到了Koala版本 直接下载 二、安装 笔者当前环境变量中配置的JDK版本为1.8 双击.exe文件运行…...

RabbitMQ延时队列

RabbitMQ延时队列 什么是延时队列 延时队列顾名思义&#xff0c;即放置在该队列里面的消息是不需要立即消费的&#xff0c;而是等待一段时间之后取出消费。 应用场景 场景一&#xff1a;在订单系统中&#xff0c;一个用户下单之后通常有30分钟的时间进行支付&#xff0c;如…...

a8204 基于微信小程序的音乐播放器微信小程序的研究与实现 服务器端Java+Mysql+Servlet 文档 源码

音乐播放微信小程序 1.项目描述2. 绪论3.项目功能4.界面展示5.源码获取 1.项目描述 随着科技的发展&#xff0c;手机在我们生活中起到了重要的作用。软件作为手机重要的一部分&#xff0c;用户体验显得尤为重要。微信小程序一起操作便捷、用户基数大、分享便利、既用即走等特点…...

游戏新纪元:用栈记录数据,轻松实现悔棋功能

游戏介绍 嘿&#xff0c;各位游戏爱好者们&#xff01;今天我要给大家介绍一款颠覆传统、创新十足的游戏项目。这款游戏不仅让你沉浸在紧张刺激的游戏世界中&#xff0c;还引入了前所未有的两大特色功能&#xff1a;记录游戏数据和轻松实现悔棋。 首先&#xff0c;让我们来聊…...

C/C++基础知识复习(36)

函数重载是指在同一作用域内&#xff0c;定义多个同名但参数列表不同的函数。通过函数重载&#xff0c;程序员可以使用相同的函数名称处理不同类型或数量的参数&#xff0c;而不需要为每种情况创建不同的函数名称。编译器根据函数调用时传递的参数类型和数量来决定调用哪个版本…...

JAVA |日常开发中连接Sqlite数据库详解

JAVA &#xff5c;日常开发中连接Sqlite数据库详解 前言一、SQLite 数据库概述1.1 定义与特点1.2 适用场景 二、Java 连接 SQLite 数据库的准备工作2.1 添加 SQLite JDBC 驱动依赖2.2 了解 JDBC 基础概念 三、建立数据库连接3.1 代码示例3.2 步骤解析 四、执行 SQL 语句4.1 创建…...

Java项目实战II基于微信小程序的消防隐患在线举报系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着城市化进程的加快&…...

python编程Day12-属性和方法的分类

私有和公有 在python中 定义类的时候&#xff0c;可以给 属性和方法设置 访问权限&#xff0c;即规定在什么地方可以使用。 权限一般分为两种&#xff1a;公有权限、私有权限 公有权限 定义&#xff1a;直接定义的属性和方法就是公有的特点&#xff1a; 可以在任何地方访问和使…...

【unity小技巧】在 Unity 中,Application获取各种文件路径或访问不同类型的存储路径

文章目录 前言1. **Application.persistentDataPath**2. **Application.dataPath**3. **Application.streamingAssetsPath**4. **Application.temporaryCachePath**5. **Application.consoleLogPath**6. **Application.userDataPath**7. **Application.streamingAssetsPath 与 …...

c++:timer

1.设置休眠时间sleep_for 添加头文件 #include <thread> #include <iostream> #include <chrono> #include <thread>int main(int argc, char const *argv[]) {// 休眠2秒std::this_thread::sleep_for(std::chrono::seconds(2));// 休眠500毫秒std:…...

VSCode(四)CMake调试

1. 工具准备 1.1 C环境插件 1.2 CMake插件 2. Cmake工程 2.1 创建项目文件夹 ex:CMAKE_TEST 2.2 创建CMake工程 &#xff08;shift ctl P), 选择"CMAKE: Quick Start": 2.3 填写project name: (ex: test_cmake) 2.4 选择”Executable“ 项目文件内会自动…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...