更新记录

1.0.0(2026-10-19) 下载此版本

已验证安卓和鸿蒙系统


平台兼容性

uni-app x(3.8.6)

Chrome Safari Android iOS 鸿蒙 微信小程序
× × √ √ √ -

其他

多语言 暗黑模式 宽屏模式 蒸汽模式
× × √ √

djiz-radial-gradient

uni-app x 渐变容器组件插件。uni-app x 的 App 原生端不支持 CSS radial-gradient(linear-gradient 也不稳定),本插件通过各端原生能力自绘径向 + 线性渐变,并封装为可直接在模板中使用的容器组件。

平台支持

Android iOS 鸿蒙 HarmonyOS Web / 小程序
√(minSdk 21) √ √(API 11+,建议 API 14) -

特性

  • 径向(radial)+ 线性(linear)双渐变类型
  • 多色标渐变,色标位置可控
  • 径向:圆心位置可偏移、半径可调、支持圆形/椭圆
  • 线性:起终点归一化坐标任意定义方向
  • 支持圆角裁剪(圆角矩形、正圆)
  • 参数动态更新立即生效
  • 容器组件,内部可放置任意内容(默认插槽)

使用方式

easycom 自动引入,无需手动 import:

<!-- 径向(默认) -->
<djiz-radial-gradient
  style="width: 300rpx; height: 300rpx;"
  :colors="['#FF6B6B', '#5B8DEF']"
>
  <text style="color: #FFFFFF; margin: auto;">内容</text>
</djiz-radial-gradient>

<!-- 线性 -->
<djiz-radial-gradient
  style="width: 500rpx; height: 300rpx;"
  type="linear"
  :colors="['#4FACFE', '#00F2FE']"
  :start-x="0" :start-y="0" :end-x="1" :end-y="1"
></djiz-radial-gradient>

Props

属性 类型 默认值 说明
type string 'radial' 渐变类型:radial / linear
colors string[] ['#FF6B6B', '#5B8DEF'] 色标颜色,支持 #RGB/#RGBA/#RRGGBB/#RRGGBBAA
stops number[] [](均匀分布) 各色标位置 0~1,数量需与 colors 一致,否则按均匀分布处理
centerX number 0.5 圆心 X(0~1 比例),仅 radial
centerY number 0.5 圆心 Y(0~1 比例),仅 radial
radius number 0.5 渐变半径,相对组件对角线的比例。0.5 时渐变圆边缘经过矩形四角,仅 radial
shape string 'circle' 形状:circle / ellipse,仅 radial
borderRadius number 0 圆角半径(逻辑 px)。设为组件高度的一半即为正圆
startX number 0.5 线性渐变起点 X(0~1 比例),仅 linear
startY number 0 线性渐变起点 Y(0~1 比例),仅 linear
endX number 0.5 线性渐变终点 X(0~1 比例),仅 linear
endY number 1 线性渐变终点 Y(0~1 比例),仅 linear
fallbackColor string 自动取第一个渐变色 原生层初始化失败时的降级背景色。不传则取 colors[0](与原配色同色系,白字在深色渐变下大概率仍可读)

Events

事件 参数 说明
ready 无 原生渐变视图初始化成功
error reason: string 原生视图初始化失败。此时插件内部已自动切换为 fallbackColor 纯色兜底;业务侧监听此事件仍可做进一步处理(例如联动切换文字颜色)

监听 error 做联动的示例:

<djiz-radial-gradient
  :colors="['#1A2980', '#26D0CE']"
  fallback-color="#16215E"
  :border-radius="16"
  @error="onGradientError"
>
  <text :style="'margin:auto;color:'+(failed ? '#E8EAFF' : '#FFFFFF')">文字</text>
</djiz-radial-gradient>
const failed = ref<boolean>(false)
function onGradientError(reason: string) {
  failed.value = true
}

单位说明

  • 组件宽高遵循 uvue 规范,可使用 px / rpx。
  • radius 是相对对角线的比例值,与组件尺寸无关,跨尺寸效果一致。
  • borderRadius 使用逻辑 px(CSS px),非 rpx。
  • 线性渐变方向由 start→end 向量决定:默认 (0.5,0)→(0.5,1) 从上到下;(0,0)→(1,1) 为左上到右下对角线。

更多示例

<!-- 三色标 + 偏心 -->
<djiz-radial-gradient
  :colors="['#FF9A9E', '#A18CD1', '#FBC2EB']"
  :stops="[0, 0.55, 1]"
  :center-x="0.3"
  :center-y="0.25"
></djiz-radial-gradient>

<!-- 椭圆 -->
<djiz-radial-gradient shape="ellipse" :colors="['#FAD961', '#F76B1C']"></djiz-radial-gradient>

<!-- 圆角矩形 -->
<djiz-radial-gradient :border-radius="20" :colors="['#43E97B', '#38F9D7']"></djiz-radial-gradient>

<!-- 正圆 -->
<djiz-radial-gradient :border-radius="90" :colors="['#FA709A', '#FEE140']"></djiz-radial-gradient>

完整演示见项目页面:pages/radial-gradient-demo/demo.uvue。

实现原理

采用 UTS 标准模式组件(components/ 下跨端 uvue + utssdk/ 下各端原生实现),通过内置 native-view 组件承载原生视图:

  • Android:混编 RadialGradientView.kt,径向用 RadialGradient、线性用 LinearGradient 构建 shader;椭圆通过给 shader 套以圆心为支点的缩放 Matrix;圆角通过 ViewOutlineProvider + clipToOutline(硬件加速)。
  • iOS:CAGradientLayer,径向 type=radial、线性 type=axial(startPoint/endPoint 单位坐标系);椭圆通过对齐锚点后的 CATransform3DMakeScale;圆角通过容器视图 cornerRadius + masksToBounds。
  • 鸿蒙:builder.ets 使用 ArkUI 通用属性 .radialGradient() / .linearGradient()(API 11+),线性方向由 start/end 坐标转 angle;椭圆通过 .scale();圆角通过 .borderRadius() + .clip();实际布局尺寸由 onSizeChange 获取。

目录结构

djiz-radial-gradient/
├── components/djiz-radial-gradient/djiz-radial-gradient.uvue  # 跨端组件
├── utssdk/
│   ├── app-android/
│   │   ├── RadialGradientView.kt   # Android 自绘 View
│   │   └── index.uts
│   ├── app-ios/
│   │   └── index.uts
│   └── app-harmony/
│       ├── options.uts             # BuilderNode 参数
│       ├── builder.ets             # ArkUI 声明式实现
│       └── index.uts
└── package.json

隐私、权限声明

1. 本插件需要申请的系统权限列表:

无

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

许可协议

MIT协议

暂无用户评论。