1# 颜色渐变 2 3设置组件的颜色渐变效果。 4 5> **说明:** 6> 7> 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 8> 9> 颜色渐变属于组件内容,绘制在背景上方。 10> 11> 颜色渐变不支持宽高显式动画,执行宽高动画时颜色渐变会直接过渡到终点。 12 13## linearGradient 14 15linearGradient(value: {angle?: number | string; direction?: GradientDirection; colors: Array\<[ResourceColor, number]>; repeating?: boolean;}) 16 17线性渐变。 18 19**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。 20 21**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 22 23**系统能力:** SystemCapability.ArkUI.ArkUI.Full 24 25**参数:** 26 27| 参数名 | 类型 | 必填 | 说明 | 28| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | 29| value | {<br/>angle?: number \| string,<br/>direction?: [GradientDirection](ts-appendix-enums.md#gradientdirection),<br/>colors: Array<[[ResourceColor](ts-types.md#resourcecolor), number]>,<br/>repeating?: boolean<br/>} | 是 | 线性渐变。<br/>- angle: 线性渐变的起始角度。0点方向顺时针旋转为正向角度。<br/> 默认值:180<br/>角度为字符串时仅支持类型deg,grad,rad,trun。<br/>- direction: 线性渐变的方向,设置angle后不生效。<br/> 默认值:GradientDirection.Bottom <br/>- colors: 指定某百分比位置处的渐变色颜色,设置非法颜色直接跳过。<br/>- repeating: 为渐变的颜色重复着色。 <br/> 默认值:false | 30 31## sweepGradient 32 33sweepGradient(value: {center: [Length, Length]; start?: number | string; end?: number | string; rotation?: number | string; colors: Array\<[ResourceColor, number]>; repeating?: boolean;}) 34 35角度渐变。 36 37**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 38 39**系统能力:** SystemCapability.ArkUI.ArkUI.Full 40 41**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。 42 43**参数:** 44 45| 参数名 | 类型 | 必填 | 说明 | 46| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | 47| value | {<br/>center: [[Length](./ts-types.md#length), Length],<br/>start?: number \| string,<br/>end?: number \| string,<br/>rotation?: number \| string,<br/>colors: Array<[[ResourceColor](ts-types.md#resourcecolor), number]>,<br/>repeating?: boolean<br/>} | 是 | 角度渐变,仅绘制0-360度范围内的角度,超出时不绘制渐变色,只绘制纯色。<br/>- center:为角度渐变的中心点,即相对于当前组件左上角的坐标。<br/>- start:角度渐变的起点。<br/> 默认值:0<br/>角度为字符串时仅支持类型deg,grad,rad,trun。<br/>- end:角度渐变的终点。<br/> 默认值:0<br/>角度为字符串时仅支持类型deg,grad,rad,trun。<br/>- rotation: 角度渐变的旋转角度。<br/> 默认值:0<br/>角度为字符串时仅支持类型deg,grad,rad,trun。<br/>- colors: 指定某百分比位置处的渐变色颜色,设置非法颜色直接跳过。<br/>- repeating: 为渐变的颜色重复着色。<br/> 默认值:false<br/>**说明:** <br/>设置为小于0的值时,按值为0处理,设置为大于360的值时,按值为360处理。<br/>当start、end、rotation的数据类型为string,合法的取值为纯数字或纯数字后带"deg"(度)、"rad"(弧度)、"grad"(梯度)、"turn"(圈)单位,例如:"90"、 "90deg"、"1.57rad"。 | 48 49## radialGradient 50 51radialGradient(value: { center: [Length, Length]; radius: number | string; colors: Array\<[ResourceColor, number]>; repeating?: boolean }) 52 53径向渐变。 54 55**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 56 57**系统能力:** SystemCapability.ArkUI.ArkUI.Full 58 59**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。 60 61**参数:** 62 63 64| 参数名 | 类型 | 必填 | 说明 | 65| -------------- | -------------------------------------------- | ----------------------------------- | ----------------------------------- | 66| value | {<br/>center: [[Length](./ts-types.md#length), Length],<br/> radius: number \| string,<br/>colors: Array<[[ResourceColor](ts-types.md#resourcecolor), number]>,<br/>repeating?: boolean<br/>} | 是 | 径向渐变。<br/>- center:径向渐变的中心点,即相对于当前组件左上角的坐标。<br/>- radius:径向渐变的半径。<br/> 取值范围:[0,+∞)<br>**说明:** <br/>设置为小于的0值时,按值为0处理。<br/>- colors: 指定某百分比位置处的渐变色颜色,设置非法颜色直接跳过。<br/>- repeating: 为渐变的颜色重复着色。<br/> 默认值:false | 67 68> **说明:** 69> 70> colors参数的约束: 71> 72> [ResourceColor](ts-types.md#resourcecolor)表示填充的颜色,number表示指定颜色所处的位置,取值范围为[0,1.0],0表示需要设置渐变色的容器的开始处,1.0表示容器的结尾处。想要实现多个颜色渐变效果时,多个数组中number参数建议递增设置,如后一个数组number参数比前一个数组number小的话,按照等于前一个数组number的值处理。 73 74 75## 示例 76 77### 示例1(颜色从右向左线性渐变) 78 79该示例通过linearGradient来实现组件颜色线性渐变。 80 81```ts 82// xxx.ets 83@Entry 84@Component 85struct ColorGradientExample { 86 build() { 87 Column({ space: 5 }) { 88 Text('linearGradient').fontSize(12).width('90%').fontColor(0xCCCCCC) 89 Row() 90 .width('90%') 91 .height(50) 92 .linearGradient({ 93 angle: 90, 94 colors: [[0xff0000, 0.0], [0x0000ff, 0.3], [0xffff00, 1.0]] 95 }) 96 Text('linearGradient Repeat').fontSize(12).width('90%').fontColor(0xCCCCCC) 97 Row() 98 .width('90%') 99 .height(50) 100 .linearGradient({ 101 direction: GradientDirection.Left, // 渐变方向 102 repeating: true, // 渐变颜色是否重复 103 colors: [[0xff0000, 0.0], [0x0000ff, 0.3], [0xffff00, 0.5]] // 数组末尾元素占比小于1时满足重复着色效果 104 }) 105 } 106 .width('100%') 107 .padding({ top: 5 }) 108 } 109} 110``` 111 112 113 114### 示例2(颜色按旋转角度渐变) 115 116该示例通过sweepGradient来实现组件颜色旋转角度渐变。 117 118```ts 119@Entry 120@Component 121struct ColorGradientExample { 122 build() { 123 Column({ space: 5 }) { 124 Text('sweepGradient').fontSize(12).width('90%').fontColor(0xCCCCCC) 125 Row() 126 .width(100) 127 .height(100) 128 .sweepGradient({ 129 center: [50, 50], 130 start: 0, 131 end: 359, 132 colors: [[0xff0000, 0.0], [0x0000ff, 0.3], [0xffff00, 1.0]] 133 }) 134 135 Text('sweepGradient Reapeat').fontSize(12).width('90%').fontColor(0xCCCCCC) 136 Row() 137 .width(100) 138 .height(100) 139 .sweepGradient({ 140 center: [50, 50], 141 start: 0, 142 end: 359, 143 rotation: 45, // 旋转角度 144 repeating: true, // 渐变颜色是否重复 145 colors: [[0xff0000, 0.0], [0x0000ff, 0.3], [0xffff00, 0.5]] // 数组末尾元素占比小于1时满足重复着色效果 146 }) 147 } 148 .width('100%') 149 .padding({ top: 5 }) 150 } 151} 152``` 153 154 155 156### 示例3(颜色按径向渐变) 157 158该示例通过radialGradient来实现组件颜色径向渐变。 159 160```ts 161// xxx.ets 162@Entry 163@Component 164struct ColorGradientExample { 165 build() { 166 Column({ space: 5 }) { 167 Text('radialGradient').fontSize(12).width('90%').fontColor(0xCCCCCC) 168 Row() 169 .width(100) 170 .height(100) 171 .radialGradient({ 172 center: [50, 50], 173 radius: 60, 174 colors: [[0xff0000, 0.0], [0x0000ff, 0.3], [0xffff00, 1.0]] 175 }) 176 Text('radialGradient Repeat').fontSize(12).width('90%').fontColor(0xCCCCCC) 177 Row() 178 .width(100) 179 .height(100) 180 .radialGradient({ 181 center: [50, 50], 182 radius: 60, 183 repeating: true, 184 colors: [[0xff0000, 0.0], [0x0000ff, 0.3], [0xffff00, 0.5]] // 数组末尾元素占比小于1时满足重复着色效果 185 }) 186 } 187 .width('100%') 188 .padding({ top: 5 }) 189 } 190} 191``` 192 193 194