跳到主要内容

Decorations 装饰图元

3 个用于沉浸式屏 / hero 区的视觉装饰原子,全部基于 react-native-svg 渲染,可与任何容器组合用。它们是 absolute 定位的纯装饰,不接管 hit area / 布局,放在屏底部图层即可。

组件用途
GradientWash线性渐变带 —— 屏顶 / 屏底 的颜色淡入淡出
RadialHalo圆 / 椭圆径向光晕 —— hero 区点缀光斑
ScreenBackdrop整屏沉浸式预设 —— 渐变底 + 多个 halo 组合(如 warmOrange)

实时预览

下方渲染的就是 src/components/business/Decorations/*.tsx 本体。

GradientWash · 单色顶部 wash
RadialHalo · 单光晕
ScreenBackdrop warmOrange · 整屏预设(在 ScreenBackdrop 内层叠加 wash + 3 个 halo)

用法

import { GradientWash, RadialHalo, ScreenBackdrop } from '@unif/react-native-design';

{/* 名片屏整屏沉浸式背景(预设) */}
<View style={{ flex: 1 }}>
<ScreenBackdrop preset="warmOrange" />
{/* 真实内容 */}
</View>

{/* 自定义 hero 区:屏顶橙色 wash + 右上 halo 点缀 */}
<View style={{ height: 220, position: 'relative' }}>
<GradientWash height={220} color={c.primary} fromOpacity={0.18} toOpacity={0} />
<RadialHalo
size={180}
color={c.primary}
maxOpacity={0.20}
style={{ position: 'absolute', top: -30, right: -30 }}
/>
<View>{/* hero 内容 */}</View>
</View>

GradientWash API

PropType默认说明
heightnumber渐变带高度
colorstring单色模式必填(顶 fromOpacity → 底 toOpacity)
fromOpacitynumber?0.1顶部透明度(单色模式)
toOpacitynumber?0底部透明度(单色模式)
stopsReadonlyArray<GradientStop>?完全自定义 stops(与 color/fromOpacity 互斥)
gradientIdstring?自动同屏多 GradientWash 需要不同 id
styleStyleProp<ViewStyle>容器附加样式

RadialHalo API

PropType默认说明
sizenumber宽(圆模式即直径)
heightnumber?size椭圆高度,不传 = 圆
colorstring中心颜色
maxOpacitynumber?0.16简化用法的中心最大透明度,自动生成 3 stop
stopsReadonlyArray<{offset, opacity}>?完全自定义透明度分布(覆盖 maxOpacity)
gradientIdstring?自动同屏多 halo 需要不同 id
styleStyleProp<ViewStyle>absolute 定位用

ScreenBackdrop API

PropType默认说明
presetScreenBackdropPreset?'warmOrange'预设名,目前只有 'warmOrange'(暖橙渐变 + 3 halo)

不要

  • 不要在装饰组件上挂 onPress —— 它们是纯视觉图层,加交互会拦截真内容的 hit
  • 不要在屏内放超过 3 个 RadialHalo —— SVG 太多影响渲染性能,真要多就考虑 Image 静态导出
  • 不要把 ScreenBackdrop 用在普通业务屏 —— 用于品牌 hero(名片 / Splash / 扫码屏);普通 ScreenLayout 自带白底就够了
  • 不要忘传 gradientId —— 同屏多 GradientWash / RadialHalo 共享一个默认 id,SVG defs 互覆盖导致后一个生效