212.HarmonyOS NEXT系列教程之 TabsRaisedCircleSelect组件实现解析
2025-03-27 21:55:57
207次阅读
0个评论
温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦!

HarmonyOS NEXT系列教程之 TabsRaisedCircleSelect组件实现解析
本文将详细解析TabsRaisedCircleSelect组件的实现,这是一个用于处理选中状态视觉效果的组件。
效果演示

1. 组件结构定义
@Builder
export function TabsRaisedCircleSelect(TabItemSelectOptions: TabItemSelectType) {
  RelativeContainer() {
    // 选中时凸起的圆
    Column()
      .aspectRatio(1)
      .height(TabItemSelectOptions.chamfer.circleDiameter)
      .borderRadius(TabItemSelectOptions.chamfer.circleRadius)
      .borderWidth(TabItemSelectOptions.chamfer.circleDiameter * 0.1)
      .borderColor(TabItemSelectOptions.tabsBgColor)
      .radialGradient({
        center: [TabItemSelectOptions.chamfer.circleRadius, TabItemSelectOptions.chamfer.circleRadius],
        radius: TabItemSelectOptions.chamfer.circleRadius,
        colors: [[TabItemSelectOptions.tabsSelectBgColor,
          (TabItemSelectOptions.chamfer.circleDiameter - SURPLUSRADIUS) / TabItemSelectOptions.chamfer.circleDiameter],
          [Color.Transparent,
            (TabItemSelectOptions.chamfer.circleDiameter - SURPLUSRADIUS) /
            TabItemSelectOptions.chamfer.circleDiameter]]
      })
      .id(TabItemSelectOptions.selectBodyId)
    
    // 其他过渡效果
  }
}
组件结构说明:
- 
  组件类型: - 使用@Builder装饰器
- 接收配置参数
 
- 使用
- 
  布局容器: - 使用RelativeContainer
- 支持相对定位
 
- 使用
- 
  样式设置: - 保持宽高比1:1
- 设置圆形边框
- 应用渐变效果
 
2. 渐变效果实现
.radialGradient({
  center: [TabItemSelectOptions.chamfer.circleRadius, TabItemSelectOptions.chamfer.circleRadius],
  radius: TabItemSelectOptions.chamfer.circleRadius,
  colors: [[TabItemSelectOptions.tabsSelectBgColor,
    (TabItemSelectOptions.chamfer.circleDiameter - SURPLUSRADIUS) / TabItemSelectOptions.chamfer.circleDiameter],
    [Color.Transparent,
      (TabItemSelectOptions.chamfer.circleDiameter - SURPLUSRADIUS) /
      TabItemSelectOptions.chamfer.circleDiameter]]
})
渐变效果说明:
- 
  渐变中心: - 使用圆心坐标
- 基于圆半径计算
 
- 
  渐变范围: - 使用圆半径作为范围
- 确保覆盖整个区域
 
- 
  颜色配置: - 从选中颜色过渡到透明
- 计算过渡位置
 
3. 过渡效果实现
// 左边过渡
Column()
  .width(TabItemSelectOptions.chamfer.chamferXY[0])
  .height(TabItemSelectOptions.chamfer.chamferXY[1])
  .radialGradient({
    center: [0, 0],
    radius: TabItemSelectOptions.chamfer.chamferRadius,
    colors: [[Color.Transparent, 0.0], [Color.Transparent, 1], [TabItemSelectOptions.tabsBgColor, 1]]
  })
  .clipShape(new PathShape({
    commands: `M0 0 L0 ${vp2px(TabItemSelectOptions.chamfer.chamferXY[1])}   
              L${vp2px(TabItemSelectOptions.chamfer.chamferXY[0])} 
              ${vp2px(TabItemSelectOptions.chamfer.chamferXY[1])} Z`
  }))
过渡效果说明:
- 
  尺寸设置: - 根据凸起尺寸计算
- 保持比例一致
 
- 
  渐变配置: - 从边缘向内渐变
- 使用三个颜色节点
 
- 
  裁切形状: - 使用PathShape
- 创建三角形区域
 
4. 位置对齐
.alignRules({
  'right': { 'anchor': TabItemSelectOptions.selectBodyId, 'align': HorizontalAlign.Center },
  "bottom": { 'anchor': TabItemSelectOptions.selectBodyId, 'align': VerticalAlign.Center }
})
对齐规则说明:
- 
  水平对齐: - 相对选中项居中
- 使用right规则
 
- 
  垂直对齐: - 相对底部对齐
- 使用bottom规则
 
- 
  锚点设置: - 使用选中项ID
- 确保精确定位
 
5. 整体定位
.offset({
  x: -TabItemSelectOptions.chamfer.circleOffsetX,
  y: -TabItemSelectOptions.chamfer.circleOffsetY
})
.zIndex(-1)
.alignRules({
  'left': {
    'anchor': `${TabItemSelectOptions.tabItemId}${TabItemSelectOptions.selectIndex}`,
    'align': HorizontalAlign.Center
  }
})
定位实现说明:
- 
  偏移设置: - 计算X轴偏移
- 计算Y轴偏移
 
- 
  层级管理: - 设置zIndex
- 确保正确的显示顺序
 
- 
  对齐规则: - 相对选中项居中
- 使用left规则
 
总结
TabsRaisedCircleSelect组件通过:
- 精确的渐变效果
- 平滑的过渡处理
- 准确的位置计算
- 灵活的对齐规则
实现了一个:
- 视觉效果出色
- 过渡自然流畅
- 位置准确
- 易于集成
的选中状态处理组件。
00
- 0回答
- 5粉丝
- 0关注
相关话题
- 208.HarmonyOS NEXT系列教程之 CustomDrawTabbarComponent组件实现解析
- 211.HarmonyOS NEXT系列教程之 TabsRaisedCircle组件核心实现解析
- 207.HarmonyOS NEXT系列教程之 TabsConcaveCircle组件完整源码解析
- 213.HarmonyOS NEXT系列教程之 CustomDrawTabbarComponent组件功能解析
- 204.HarmonyOS NEXT系列教程之 TabsConcaveCircle组件动画系统实现
- 205.HarmonyOS NEXT系列教程之 TabsConcaveCircle组件Canvas渲染实现
- HarmonyOS NEXT 头像制作项目系列教程之 --- 侧边栏容器组件实现
- 217.HarmonyOS NEXT系列教程之 TabBar工具函数与Canvas绘制实现解析
- 170.HarmonyOS NEXT系列教程之列表交换组件基础架构解析
- 216.HarmonyOS NEXT系列教程之 TabBar凸起效果与图片偏移实现解析
- HarmonyOS NEXT 头像制作项目系列教程之 --- 侧边栏组件实现与交互
- 162.HarmonyOS NEXT系列教程之列表交换组件删除功能实现
- 166.HarmonyOS NEXT系列教程之列表交换组件性能优化实现
- 174.HarmonyOS NEXT系列教程之列表交换组件动画系统实现
- 177.HarmonyOS NEXT系列教程之列表交换组件性能优化实现

