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

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

图片

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

距离与AoA辅助的三维测距算法(适用于四个基站的情况的单点定位),MATLAB代码

本MATLAB 代码实现了一个基于LOS/NLOS混合环境的单点定位系统&#xff0c;主要用于估计目标物体的单点位 文章目录 代码运行结果源代码代码功能概述主要步骤分析初始化部分 绘图与输出 代码运行结果 定位结果如下&#xff1a; 命令行的坐标和误差输出&#xff1a; 部分代码…

Vue指令(一)--v-html、v-show、v-if、v-else、v-else-if、v-on、v-bind、v-for、v-model

目录 &#xff08;一&#xff09;初识指令和内容渲染指令v-html 1.v-html 案例&#xff1a; 官网的API文档 &#xff08;二&#xff09;条件渲染指令v-show和v-if 1. v-show 2. v-if &#xff08;三&#xff09;条件渲染指令v-else和v-else-if 案例 &#xff08;四…

记一次由docker容器使得服务器cpu占满密码和密钥无法访问bug

Bug场景&#xff1a; 前几天在服务器上部署了一个免费影视网站&#xff0c;这个应用需要四个容器&#xff0c;同时之前的建站软件workpress也是使用docker部署的&#xff0c;也使用了三个容器。在使用workpress之前&#xff0c;我将影视软件的容器全部停止。 再使用workpress…

【JavaEE 进阶(一)】SpringBoot(上)

博主主页: 33的博客 文章专栏分类:JavaEE ??我的代码仓库: 33的代码仓库?? ???关注我带你了解更多进阶知识 目录 1.前言2.Spring3.第一个SpringBoot程序4.Spring MVC 4.1建立连接 4.1.1RequestMapping使用 4.2请求 4.2.1传递单个参数4.2.2传递多个参数4.2.3传递一个对象…

(未更新完)day30-IO-阶段综合案例(带权重的随机每日一记)(笔记完全来源于黑马程序员)

目录 0 目录一、听黑马阿玮的视频记录的笔记1. 制造假数据1.1 如何制造假数据1.2 练习1-生成方式1&#xff1a;爬取姓氏、男生名字、女生名字1.3 练习2-生成方式1&#xff1a;在练习1的基础上&#xff0c;将数据写入本地文件1.4 练习3-生成方式2&#xff1a;利用糊涂包生成假数…

FPGA中所有tile介绍

FPGA中包含的tile类型&#xff0c;以xinlinx 7k为例&#xff0c;可以通过f4pga项目中的原语文件夹查看&#xff0c;主要包含以下这些&#xff1a; 以下是您提到的 Xilinx 7 系列 FPGA 中各种模块的含义及用途&#xff1a; 1. BRAM (Block RAM) BRAM 是 FPGA 中的块存储资源&…

如何解决压测过程中JMeter堆内存溢出问题

如何解决压测过程中JMeter堆内存溢出问题 背景一、为什么会堆内存溢出&#xff1f;二、解决堆内存溢出措施三、堆内存参数应该怎么调整&#xff1f;四、堆内存大小配置建议 背景 Windows环境下使用JMeter压测运行一段时间后&#xff0c;JMeter日志窗口报错“java.lang.OutOfMe…

嵌入式蓝桥杯学习4 lcd移植

cubemx配置 复制前面配置过的文件 打开cubemx&#xff0c;将PB8,PB9配置为GPIO-Output。 点击GENERATE CODE. 文件移植 1.打开比赛提供的文件包&#xff0c;点击Inc文件夹 2.点击Inc文件夹。复制fonts.h和lcd.h&#xff0c;粘贴到我们自己的工程文件夹的bsp中&#xff08…

学习记录,正则表达式, 隐式转换

正则表达式 \\&#xff1a;表示正则表达式 W: 表示一个非字&#xff08;不是一个字&#xff0c;例如&#xff1a;空格&#xff0c;逗号&#xff0c;句号&#xff09; W: 多个非字 基本组成部分 1.字符字面量&#xff1a; 普通字符&#xff1a;在正则表达式中&#xff0c;大…

标书里的“废标雷区”:你踩过几个?

在投标领域&#xff0c;标书的质量不仅决定了中标的可能性&#xff0c;更是体现企业专业度的关键。但即便是经验丰富的投标人&#xff0c;也难免会在标书编制过程中踩中“废标雷区”。这些雷区可能隐藏在技术方案的细节中&#xff0c;也可能是投标文件格式的规范问题。以下&…

k8s-编写CSI插件(3)

1、概述 在 Kubernetes 中&#xff0c;存储插件的开发主要有以下几种方式&#xff1a; CSI插件&#xff1a;Container Storage Interface (CSI) 是 Kubernetes 的标准插件接口&#xff0c;是全新的插件方案&#xff0c;插件和驱动调用通过grpc协议&#xff0c;功能丰富&#x…

R语言机器学习论文(三):特征提取

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据一、数据归一化二、离散型分类变量的编码三、筛选特征四、重要特征五、输出结果六、总结系统信息介绍 在数据分析和机器学习项目中,经常需要对数据进行预…

用 NotePad++ 运行 Java 程序

安装包 网盘链接 下载得到的安装包: 安装步骤 双击安装包开始安装. 安装完成: 配置编码 用 NotePad 写 Java 程序时, 需要设置编码. 在 设置, 首选项, 新建 中进行设置, 可以对每一个新建的文件起作用. 之前写的文件不起作用. 在文件名处右键, 可以快速打开 CMD 窗口, 且路…

Leetcode打卡:骑士在棋盘上的概率

执行结果&#xff1a;通过 题目&#xff1a;骑士在棋盘上的概率 在一个 n x n 的国际象棋棋盘上&#xff0c;一个骑士从单元格 (row, column) 开始&#xff0c;并尝试进行 k 次移动。行和列是 从 0 开始 的&#xff0c;所以左上单元格是 (0,0) &#xff0c;右下单元格是 (n - …

[Java]项目入门

这篇简单介绍一些入门的有关项目和行业的知识&#xff0c;并带着实现一个小项目。便于已经编程入门的各位准备进阶到下一个阶段。 先大致地介绍&#xff0c;一个完整的项目(不看客户端、服务端的分类)基本可以划分为三部分&#xff1a; 1.前端。比如你现在看到的CSDN页面就是一…

全连接层与链式求导法则在神经网络中的应用

目录 ​编辑 引言 全连接层的工作原理 前向传播 反向传播 链式求导法则及其在神经网络中的应用 链式求导法则 应用于全连接层 计算梯度 结论 引言 在深度学习领域&#xff0c;全连接层&#xff08;Fully Connected Layer&#xff0c;FC&#xff09;和链式求导法则是…

泷羽Sec-星河飞雪-bp抓APP包的相关配置方法

免责声明 学习视频来自 B 站up主泷羽sec&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下代码、网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 泷羽sec官网&#xff1a;http…

00. Nginx-知识网络

知识目录 语雀知识网络&#xff0c;点击“”-- 点击“”查看知识网络 01. Nginx-基础知识 02. Nginx-虚拟主机 03. Nginx-Web模块 04. Nginx-访问控制 05. Nginx-代理服务 06. Nginx-负载均衡 07. Nginx-动静分离 08. Nginx-平滑升级 09. Nginx-日志切割 10. Nginx-…

【Springboot3+vue3】从零到一搭建Springboot3+vue3前后端分离项目之后端环境搭建

【Springboot3vue3】从零到一搭建Springboot3vue3前后端分离项目&#xff0c;整合knef4j和mybaits实现基础用户信息管理 后端环境搭建1.1 环境准备1.2 数据库表准备1.3 SpringBoot3项目创建1.4 MySql环境整合&#xff0c;使用druid连接池1.5 整合mybatis-plus1.5.1 引入mybatie…

【大数据技术基础】 课程 第3章 Hadoop的安装和使用 大数据基础编程、实验和案例教程(第2版)

第3章 Hadoop的安装和使用 3.1 Hadoop简介 Hadoop是Apache软件基金会旗下的一个开源分布式计算平台&#xff0c;为用户提供了系统底层细节透明的分布式基础架构。Hadoop是基于Java语言开发的&#xff0c;具有很好的跨平台特性&#xff0c;并且可以部署在廉价的计算机集群中。H…