• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 颜色渐变
2<!--Kit: ArkUI-->
3<!--Subsystem: ArkUI-->
4<!--Owner: @CCFFWW-->
5<!--Designer: @yangfan229-->
6<!--Tester: @lxl007-->
7<!--Adviser: @HelloCrease-->
8
9设置组件的颜色渐变效果。
10
11>  **说明:**
12>
13> 从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
14>
15> 颜色渐变属于组件内容,绘制在背景上方。
16>
17> 颜色渐变不支持宽高显式动画,执行宽高动画时颜色渐变会直接过渡到终点。
18
19## linearGradient
20
21linearGradient(value: LinearGradientOptions): T
22
23线性渐变。
24
25**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
26
27**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
28
29**系统能力:** SystemCapability.ArkUI.ArkUI.Full
30
31**参数:**
32
33| 参数名 | 类型                                                         | 必填 | 说明                                                         |
34| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
35| value  | [LinearGradientOptions](#lineargradientoptions18对象说明) | 是   | 线性渐变。 |
36
37**返回值:**
38
39| 类型   | 说明                     |
40| ------ | ------------------------ |
41| T | 返回当前组件。 |
42
43## linearGradient<sup>18+</sup>
44
45linearGradient(options: Optional\<LinearGradientOptions>): T
46
47线性渐变。与[linearGradient](#lineargradient)相比,options参数新增了对undefined类型的支持。
48
49**卡片能力:** 从API version 18开始,该接口支持在ArkTS卡片中使用。
50
51**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
52
53**系统能力:** SystemCapability.ArkUI.ArkUI.Full
54
55**参数:**
56
57| 参数名  | 类型                                                         | 必填 | 说明                                                         |
58| ------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
59| options | Optional\<[LinearGradientOptions](#lineargradientoptions18对象说明)> | 是   | 线性渐变。<br/>当options的值为undefined时,恢复为无线性渐变的效果。 |
60
61**返回值:**
62
63| 类型   | 说明                     |
64| ------ | ------------------------ |
65| T | 返回当前组件。 |
66
67## LinearGradientOptions<sup>18+</sup>对象说明
68
69线性渐变的参数。
70
71> **说明:**
72>
73> 为规范匿名对象的定义,API 18版本修改了此处的元素定义。其中,保留了历史匿名对象的起始版本信息,会出现外层元素@since版本号高于内层元素版本号的情况,但这不影响接口的使用。
74
75**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
76
77**系统能力:** SystemCapability.ArkUI.ArkUI.Full
78
79**卡片能力:** 从API version 18开始,该接口支持在ArkTS卡片中使用。
80
81| 名称                                       | 类型                                                         | 只读 | 可选 | 说明                                                         |
82| ------------------------------------------ | ------------------------------------------------------------ | ---- | ---- |------------------------------------------------------------ |
83| angle<sup>7+</sup>                                      | number&nbsp;\|&nbsp;string                                   | 否 | 是   | 线性渐变的起始角度。角度为0度时渐变方向为从下往上(即0点方向)。0点方向顺时针旋转为正向角度。<br/> 取值范围:(-∞,+∞),设置的值大于0时,按顺时针方向,小于0时,按逆时针方向。 </br>默认值:180 </br>角度为字符串时,合法的取值为纯数字或纯数字后带"deg"(度)、"rad"(弧度)、"grad"(梯度)、"turn"(圈)单位,例如:"90"、 "90deg"、"1.57rad"。<br/> **原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。|
84| direction<sup>7+</sup>                                  | [GradientDirection](ts-appendix-enums.md#gradientdirection)  | 否 | 是   | 线性渐变的方向,设置angle为非undefined后不生效。设置为GradientDirection.None时,按默认方向渐变。默认值:GradientDirection.Bottom。<br/> **原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。|
85| [colors](#radialgradientoptions18对象说明)<sup>7+</sup> | Array&lt;[[ResourceColor](ts-types.md#resourcecolor),&nbsp;number]&gt; | 否 | 否   | 指定渐变色颜色和其对应的百分比位置的数组,设置非法颜色直接跳过。ResourceColor表示颜色,number表示该颜色所处的位置,取值范围为[0, 1.0],设置的值小于0时,按0处理,设置的值大于1.0时,按1.0处理。0表示需要设置渐变色的开始处,1.0表示渐变色的结束处。为了实现多个颜色渐变效果,多个数组中的number类型参数应递增设置。如果后一个数组中的number类型参数小于前一个数组的number类型参数,将按照等于前一个数组number值处理。<br> 默认值:[],无渐变效果。<br/> **原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。|
86| repeating<sup>7+</sup>                                  | boolean                                                      | 否 | 是  | 为渐变的颜色重复着色。<br>默认值:false。<br>true:允许为渐变的颜色重复着色。<br>false:不允许为渐变的颜色重复着色。<br/> **原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。|
87
88## sweepGradient
89
90sweepGradient(value: SweepGradientOptions): T
91
92角度渐变。
93
94**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
95
96**系统能力:** SystemCapability.ArkUI.ArkUI.Full
97
98**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
99
100**参数:**
101
102| 参数名 | 类型                                                         | 必填 | 说明                                                         |
103| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
104| value  | [SweepGradientOptions](#sweepgradientoptions18对象说明) | 是   | 角度渐变,仅绘制0-360度范围内的角度,超出时不绘制渐变色,只绘制纯色。 |
105
106**返回值:**
107
108| 类型   | 说明                     |
109| ------ | ------------------------ |
110| T | 返回当前组件。 |
111
112## sweepGradient<sup>18+</sup>
113
114sweepGradient(options: Optional\<SweepGradientOptions>): T
115
116角度渐变。与[sweepGradient](#sweepgradient)相比,options参数新增了对undefined类型的支持。
117
118**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
119
120**系统能力:** SystemCapability.ArkUI.ArkUI.Full
121
122**卡片能力:** 从API version 18开始,该接口支持在ArkTS卡片中使用。
123
124**参数:**
125
126| 参数名  | 类型                                                         | 必填 | 说明                                                         |
127| ------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
128| options | Optional\<[SweepGradientOptions](#sweepgradientoptions18对象说明)> | 是   | 角度渐变。<br/>当options的值为undefined时,恢复为无角度渐变的效果。 |
129
130**返回值:**
131
132| 类型   | 说明                     |
133| ------ | ------------------------ |
134| T | 返回当前组件。 |
135
136## SweepGradientOptions<sup>18+</sup>对象说明
137
138角度渐变参数。
139
140> **说明:**
141>
142> 为规范匿名对象的定义,API 18版本修改了此处的元素定义。其中,保留了历史匿名对象的起始版本信息,会出现外层元素@since版本号高于内层元素版本号的情况,但这不影响接口的使用。
143
144**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
145
146**系统能力:** SystemCapability.ArkUI.ArkUI.Full
147
148**卡片能力:** 从API version 18开始,该接口支持在ArkTS卡片中使用。
149
150| 名称                                       | 类型                                                         | 只读 | 可选 | 说明                                                         |
151| ------------------------------------------ | ------------------------------------------------------------ | ---- | ---- |------------------------------------------------------------- |
152| center<sup>7+</sup>                                    | [[Length](./ts-types.md#length), Length]                     | 否 | 否   | 为角度渐变的中心点,即相对于当前组件左上角的坐标。<br/> **原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。           |
153| start<sup>7+</sup>                                     | number&nbsp;\|&nbsp;string                                   | 否 | 是   | 角度渐变的起点。&nbsp;默认值:0。<br/>角度为字符串时,合法的取值为纯数字或纯数字后带"deg"(度)、"rad"(弧度)、"grad"(梯度)、"turn"(圈)单位。例如:"90"、 "90deg"、"1.57rad"。取值有0~360度的限制,转换为度的单位之后,值在0~360度之间,设置为小于0度的值时,按值为0度处理,设置为大于360度的值时,按值为360度处理。<br/> **原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。                            |
154| end<sup>7+</sup>                                       | number&nbsp;\|&nbsp;string                                   | 否 | 是  | 角度渐变的终点。&nbsp;默认值:0。<br/>角度为字符串时,合法的取值为纯数字或纯数字后带"deg"(度)、"rad"(弧度)、"grad"(梯度)、"turn"(圈)单位。例如:"90"、 "90deg"、"1.57rad"。取值有0~360度的限制,转换为度的单位之后,值在0~360度之间,设置为小于0度的值时,按值为0度处理,设置为大于360度的值时,按值为360度处理。<br/> **原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。                            |
155| rotation<sup>7+</sup>                                   | number&nbsp;\|&nbsp;string                                   | 否 | 是   | 角度渐变的旋转角度。默认值:0。<br/>角度为字符串时,合法的取值为纯数字或纯数字后带"deg"(度)、"rad"(弧度)、"grad"(梯度)、"turn"(圈)单位。例如:"90"、 "90deg"、"1.57rad"。取值有0~360度的限制,转换为度的单位之后,值在0~360度之间,设置为小于0度的值时,按值为0度处理,设置为大于360度的值时,按值为360度处理。<br/> **原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。                              |
156| colors<sup>7+</sup> | Array&lt;[[ResourceColor](ts-types.md#resourcecolor),&nbsp;number]&gt; | 否 | 是   | 指定渐变色颜色和其对应的百分比位置的数组,设置非法颜色直接跳过。<br/> **原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。|
157| metricsColors<sup>20+</sup> | Array&lt;[[ColorMetrics](../js-apis-arkui-graphics.md#colormetrics12),&nbsp;number]&gt; | 否 | 是   | 指定渐变色颜色和其对应的百分比位置的数组,设置非法颜色直接跳过。设置metricsColors时colors失效。每个渐变ColorMetrics的色域属性应当统一,设置不同色域属性则认为非法。默认值为透明色。<br>**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。 |
158| repeating<sup>7+</sup>                                 | boolean                                                      | 否 | 是   | 为渐变的颜色重复着色。<br>默认值:false <br>true:允许为渐变的颜色重复着色。<br>false:不允许为渐变的颜色重复着色。<br/> **原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。                       |
159
160>  **说明:**
161>
162>  metricsColors参数的约束:
163>
164>  [ColorMetrics](../js-apis-arkui-graphics.md#colormetrics12)表示填充的颜色,可以使用[colorWithSpace](../js-apis-arkui-graphics.md#colorwithspace20)方法构造指定色域属性的颜色。number表示指定颜色所处的位置,取值范围为[0, 1.0],0表示需要设置渐变色的容器开始处,1.0表示容器的结束处。为了实现多个颜色渐变效果,多个数组中的number类型参数应递增设置。如果后一个数组中的number类型参数小于前一个数组的number类型参数,将按照等于前一个数组number值处理。
165
166## radialGradient
167
168radialGradient(value: RadialGradientOptions): T
169
170径向渐变。
171
172**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
173
174**系统能力:** SystemCapability.ArkUI.ArkUI.Full
175
176**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
177
178**参数:**
179
180| 参数名 | 类型                                                         | 必填 | 说明                                                         |
181| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
182| value  | [RadialGradientOptions](#radialgradientoptions18对象说明) | 是   | 径向渐变。 |
183
184**返回值:**
185
186| 类型   | 说明                     |
187| ------ | ------------------------ |
188| T | 返回当前组件。 |
189
190## radialGradient<sup>18+</sup>
191
192radialGradient(options: Optional\<RadialGradientOptions>): T
193
194径向渐变。与[radialGradient](#radialgradient)相比,options参数新增了对undefined类型的支持。
195
196**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
197
198**系统能力:** SystemCapability.ArkUI.ArkUI.Full
199
200**卡片能力:** 从API version 18开始,该接口支持在ArkTS卡片中使用。
201
202**参数:**
203
204
205| 参数名     | 类型                                         | 必填                             | 说明                               |
206| -------------- | -------------------------------------------- | ----------------------------------- | ----------------------------------- |
207| options | Optional\<[RadialGradientOptions](#radialgradientoptions18对象说明)> | 是 | 径向渐变。<br/>当options的值为undefined时,恢复为无径向渐变的效果。 |
208
209**返回值:**
210
211| 类型   | 说明                     |
212| ------ | ------------------------ |
213| T | 返回当前组件。 |
214
215## RadialGradientOptions<sup>18+</sup>对象说明
216
217径向渐变参数。
218
219> **说明:**
220>
221> 为规范匿名对象的定义,API 18版本修改了此处的元素定义。其中,保留了历史匿名对象的起始版本信息,会出现外层元素@since版本号高于内层元素版本号的情况,但这不影响接口的使用。
222
223**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
224
225**系统能力:** SystemCapability.ArkUI.ArkUI.Full
226
227**卡片能力:** 从API version 18开始,该接口支持在ArkTS卡片中使用。
228
229| 名称      | 类型                                                         | 只读 | 可选 | 说明                                                   |
230| --------- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------------------------ |
231| center<sup>7+</sup>    | &nbsp;[[Length](./ts-types.md#length), Length]               | 否| 否   | 径向渐变的中心点,即相对于当前组件左上角的坐标。 <br/> **原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。      |
232| radius<sup>7+</sup>    | [Length](./ts-types.md#length)                                  | 否 | 否   | 径向渐变的半径。<br/>取值范围:[0,+∞)。设置的值小于0时,按值为0处理。设置的值为undefined时,系统会自适应渐变半径。   <br/> **原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。           |
233| colors<sup>7+</sup>    | Array&lt;[[ResourceColor](ts-types.md#resourcecolor),&nbsp;number]&gt; | 否 | 否   | 指定渐变色颜色和其对应的百分比位置的数组,设置非法颜色直接跳过。<br> 默认值:[],无渐变效果。<br/> **原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。 |
234| repeating<sup>7+</sup> | boolean                                                     | 否 | 是   | 为渐变的颜色重复着色。默认值:false。 <br>true:允许为渐变的颜色重复着色。<br>false:不允许为渐变的颜色重复着色。    <br/> **原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。             |
235
236>  **说明:**
237>
238>  colors参数的约束:
239>
240>  [ResourceColor](ts-types.md#resourcecolor)表示填充的颜色,number表示指定颜色所处的位置,取值范围为[0,1.0],0表示需要设置渐变色的容器的开始处,1.0表示容器的结尾处。想要实现多个颜色渐变效果时,多个数组中number参数建议递增设置,如后一个数组number参数比前一个数组number小的话,按照等于前一个数组number的值处理。
241
242
243## 示例
244
245### 示例1(颜色从右向左线性渐变)
246
247该示例通过linearGradient来实现组件的颜色线性渐变。
248
249```ts
250// xxx.ets
251@Entry
252@Component
253struct ColorGradientExample {
254  build() {
255    Column({ space: 5 }) {
256      Text('linearGradient').fontSize(12).width('90%').fontColor(0xCCCCCC)
257      Row()
258        .width('90%')
259        .height(50)
260        .linearGradient({
261          angle: 90,
262          colors: [[0xff0000, 0.0], [0x0000ff, 0.3], [0xffff00, 1.0]]
263        })
264      Text('linearGradient Repeat').fontSize(12).width('90%').fontColor(0xCCCCCC)
265      Row()
266        .width('90%')
267        .height(50)
268        .linearGradient({
269          direction: GradientDirection.Left, // 渐变方向
270          repeating: true, // 渐变颜色是否重复
271          colors: [[0xff0000, 0.0], [0x0000ff, 0.3], [0xffff00, 0.5]] // 数组末尾元素占比小于1时满足重复着色效果
272        })
273    }
274    .width('100%')
275    .padding({ top: 5 })
276  }
277}
278```
279
280![zh-cn_image_0000001219864149](figures/gradientColor1.png)
281
282### 示例2(颜色按旋转角度渐变)
283
284该示例通过sweepGradient来实现组件颜色旋转角度渐变。
285
286```ts
287// 设置P3色域时需要在ets/entryability/EntryAbility.ets中,通过setColorSpace接口将当前窗口设置为广色域。
288import { ColorMetrics } from '@kit.ArkUI';
289
290@Entry
291@Component
292struct ColorGradientExample {
293  @State p3Red: ColorMetrics = ColorMetrics.colorWithSpace(ColorSpace.DISPLAY_P3, 1, 0, 0, 1);
294  @State p3Green: ColorMetrics = ColorMetrics.colorWithSpace(ColorSpace.DISPLAY_P3, 0, 1, 0, 1);
295  @State p3Blue: ColorMetrics = ColorMetrics.colorWithSpace(ColorSpace.DISPLAY_P3, 0, 0, 1, 1);
296
297  build() {
298    Column({ space: 5 }) {
299      Text('sweepGradient').fontSize(12).width('90%').fontColor(0xCCCCCC)
300      Row()
301        .width(100)
302        .height(100)
303        .sweepGradient({
304          center: [50, 50],
305          start: 0,
306          end: 359,
307          colors: [[0xff0000, 0.0], [0x0000ff, 0.3], [0xffff00, 1.0]]
308        })
309
310      Text('sweepGradient Repeat').fontSize(12).width('90%').fontColor(0xCCCCCC)
311      Row()
312        .width(100)
313        .height(100)
314        .sweepGradient({
315          center: [50, 50],
316          start: 0,
317          end: 359,
318          rotation: 45, // 旋转角度
319          repeating: true, // 渐变颜色是否重复
320          colors: [[0xff0000, 0.0], [0x0000ff, 0.3], [0xffff00, 0.5]] // 数组末尾元素占比小于1时满足重复着色效果
321        })
322
323      Text('sweepGradient with metricsColors').fontSize(12).width('90%').fontColor(0xCCCCCC)
324      Row()
325        .width(100)
326        .height(100)
327        .sweepGradient({
328          center: [50, 50],
329          start: 0,
330          end: 359,
331          rotation: 45,
332          repeating: true,
333          colors: [[0xff0000, 0.0], [0x0000ff, 0.3], [0xffff00, 0.5]], // 数组末尾元素占比小于1时满足重复着色效果
334          metricsColors: [[this.p3Red, 0.0], [this.p3Green, 0.5], [this.p3Blue, 1.0]]  // 设置metricsColors时colors设置的颜色失效,metricsColors的颜色生效
335        })
336    }
337    .width('100%')
338    .padding({ top: 5 })
339  }
340}
341```
342
343![zh-cn_image_0000001219864149](figures/gradientColor2_1.png)
344
345### 示例3(颜色按径向渐变)
346
347该示例通过radialGradient来实现组件颜色径向渐变。
348
349```ts
350// xxx.ets
351@Entry
352@Component
353struct ColorGradientExample {
354  build() {
355    Column({ space: 5 }) {
356      Text('radialGradient').fontSize(12).width('90%').fontColor(0xCCCCCC)
357      Row()
358        .width(100)
359        .height(100)
360        .radialGradient({
361          center: [50, 50],
362          radius: 60,
363          colors: [[0xff0000, 0.0], [0x0000ff, 0.3], [0xffff00, 1.0]]
364        })
365      Text('radialGradient Repeat').fontSize(12).width('90%').fontColor(0xCCCCCC)
366      Row()
367        .width(100)
368        .height(100)
369        .radialGradient({
370          center: [50, 50],
371          radius: 60,
372          repeating: true,
373          colors: [[0xff0000, 0.0], [0x0000ff, 0.3], [0xffff00, 0.5]] // 数组末尾元素占比小于1时满足重复着色效果
374        })
375    }
376    .width('100%')
377    .padding({ top: 5 })
378  }
379}
380```
381
382![zh-cn_image_0000001219864149](figures/gradientColor3.png)
383