首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >205.HarmonyOS NEXT系列教程之 TabsConcaveCircle组件Canvas渲染实现

205.HarmonyOS NEXT系列教程之 TabsConcaveCircle组件Canvas渲染实现

原创
作者头像
全栈若城
发布于 2025-03-27 12:45:42
发布于 2025-03-27 12:45:42
670
举报

温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦!

HarmonyOS NEXT系列教程之 TabsConcaveCircle组件Canvas渲染实现

本文将详细介绍TabsConcaveCircle组件中Canvas的渲染实现,包括背景绘制和凹槽效果的创建。

效果演示

1. Canvas初始化

代码语言:typescript
AI代码解释
复制
private settings: RenderingContextSettings = new RenderingContextSettings(true);
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);

initCanvas() {
  this.circleInfo = new ConcaveCircle(this.context, this.tabsMenu.length);
  let ratio = 0.7;
  this.imageWH = this.circleInfo.circleDiameter * ratio;
  this.createAnimation()
}

初始化过程说明:

  1. Canvas上下文创建:
    • 创建渲染设置对象
    • 初始化2D渲染上下文
  2. 凹陷圆形初始化:
    • 创建ConcaveCircle实例
    • 设置图片尺寸(圆直径的70%)
    • 启动初始动画

2. Canvas渲染实现

代码语言:typescript
AI代码解释
复制
createCanvas() {
  if (this.circleInfo) {
    this.context.reset()
    CanvasCreateRectangle({
      context: this.context,
      tabsBgColor: this.tabsBgColor
    })
    CanvasClipGroove({
      context: this.context,
      menuLength: this.tabsMenu.length,
      center: this.animationPositionX,
    })
  }
}

渲染流程解析:

  1. 重置画布:
    • 清除之前的绘制内容
    • 准备新一帧的绘制
  2. 绘制背景:
    • 调用CanvasCreateRectangle创建背景
    • 使用配置的背景颜色
  3. 创建凹槽效果:
    • 调用CanvasClipGroove绘制凹槽
    • 传入菜单长度和当前位置

3. Canvas组件集成

代码语言:typescript
AI代码解释
复制
build() {
  Stack() {
    // 背景和凹槽部分
    Canvas(this.context)
      .width('100%')
      .height('100%')
      .onReady(() => this.initCanvas())
    
    // 凹槽上方球体部分
    if (this.circleInfo) {
      Column()
        .width(this.circleInfo.circleDiameter)
        .height(this.circleInfo.circleDiameter)
        .borderRadius(this.circleInfo.circleRadius)
        .backgroundColor(this.tabsSelectBgColor)
        .position({
          x: this.circleInfo.positionX,
          y: this.circleInfo.positionY
        })
        .id('ball')
    }
    
    // 菜单选项
    Row() {
      ForEach(this.tabsMenu, (item: TabMenusInterfaceIRequired, index: number) => {
        this.TabItem(item, index)
      })
    }
    .width("100%")
    .height("100%")
  }
  .width("100%")
  .height(this.tabHeight)
  .id('concavity_tabBar')
}

组件结构说明:

  1. Stack布局:
    • 使用堆叠布局实现层次效果
    • 包含三个主要层:Canvas层、球体层、菜单层
  2. Canvas层:
    • 占满容器
    • 组件就绪时初始化
  3. 球体层:
    • 根据circleInfo配置尺寸和位置
    • 使用圆角实现圆形效果
    • 应用选中背景色
  4. 菜单层:
    • 使用Row布局横向排列选项
    • 通过ForEach渲染菜单项

4. 关键工具函数

代码语言:typescript
AI代码解释
复制
// 创建矩形背景
CanvasCreateRectangle({
  context: this.context,
  tabsBgColor: this.tabsBgColor
})

// 创建凹槽效果
CanvasClipGroove({
  context: this.context,
  menuLength: this.tabsMenu.length,
  center: this.animationPositionX,
})

工具函数说明:

  1. CanvasCreateRectangle:
    • 创建组件的基础背景
    • 应用配置的背景颜色
  2. CanvasClipGroove:
    • 创建凹陷效果
    • 根据菜单长度计算位置
    • 使用当前动画位置确定凹槽中心

总结

TabsConcaveCircle组件的Canvas渲染实现主要包含:

  1. Canvas的初始化和配置
  2. 背景和凹槽的绘制过程
  3. 组件的层次结构设计
  4. 工具函数的协同工作

通过这些实现,创造出了具有独特视觉效果的底部导航栏组件。Canvas的使用让组件具有了更灵活的绘制能力,能够实现传统组件难以达到的视觉效果。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
207.HarmonyOS NEXT系列教程之 TabsConcaveCircle组件完整源码解析
本文将对TabsConcaveCircle组件的完整源码进行详细解析,帮助开发者深入理解组件的实现原理。
全栈若城
2025/03/27
690
203.HarmonyOS NEXT系列教程之 TabsConcaveCircle组件基础结构与状态管理
TabsConcaveCircle是一个自定义的底部导航栏组件,它具有独特的凹陷圆形设计。本文将详细介绍该组件的基础结构和状态管理部分。
全栈若城
2025/03/27
640
210.HarmonyOS NEXT系列教程之 TabsConcaveCircle组件动画系统详解
本文将深入解析TabsConcaveCircle组件的动画系统实现,包括选项切换动画和圆球移动动画。
全栈若城
2025/03/27
1030
鸿蒙开发实战案例:自定义TabBar页签凸起和凹陷案例
本文基于已有的模块自定义TabBar思路,完善了凸起的选择时凸起点交界处的圆滑过度,并扩展了一个 凹陷选择时不遮挡原本内容。
小帅聊鸿蒙
2025/02/25
2100
鸿蒙开发实战案例:自定义TabBar页签凸起和凹陷案例
鸿蒙开发:了解Canvas绘制
系统的组件无法满足我们的需求,这种情况下就不得不自己自定义组件,除了自定义组合组件,拓展组件,还有一种方式,那就是完全的自绘制组件,这种情况,常见的场景有,比如金融软件中的股票行情图,基金折线图,当然了也有其它的需要高度绘制的地方,鸿蒙开发中,和其它的语言类似,都是采用Canvas画布进行绘制,但是绘制的方式更趋向于Web前端中的方式。
程序员一鸣
2025/03/28
1400
鸿蒙开发:了解Canvas绘制
217.HarmonyOS NEXT系列教程之 TabBar工具函数与Canvas绘制实现解析
本文将详细解析TabBar中的工具函数和Canvas绘制实现,包括图片处理、尺寸计算和Canvas绘制等核心功能。
全栈若城
2025/03/27
760
HarmonyOS NEXT仓颉开发语言实现画板案例
最近总是有同学说我写ArkTS冒充仓颉,为了自证清白,截图给大家看一下,确实是仓颉文件:
幽蓝计划
2025/06/27
860
214.HarmonyOS NEXT系列教程之 自定义TabBar组件系列总结与最佳实践
本文将对整个自定义TabBar组件系列进行总结,并提供最佳实践指南,帮助开发者更好地理解和使用这些组件。
全栈若城
2025/03/27
930
【愚公系列】2023年12月 HarmonyOS教学课程 046-Stage模型(开发卡片页面)
HarmonyOS元服务卡片页面(Metaservice Card Page)是指在HarmonyOS系统中,用于展示元服务的页面界面。元服务是指一组提供特定功能或服务的组件,例如天气服务、音乐播放服务等。元服务卡片页面可以显示元服务的相关信息和操作选项,用户可以通过点击卡片页面上的按钮或交互元素来使用相关的元服务功能。元服务卡片页面提供了一种快速访问和使用元服务的方式,方便用户进行各种操作和任务。
愚公搬代码
2025/06/02
520
【愚公系列】2023年12月 HarmonyOS教学课程 046-Stage模型(开发卡片页面)
鸿蒙Next数据量环形图标Gauge介绍
当我们需要环形展示数据进度,但是又不想使用一个完整的圆环时,Progress组件就不能满足我们的需求,例如汽车的速度表盘,这时我们就需要用引入Gauge组件,他可以满足环形进度展示的同时,设置起始角度,达到不封闭环形的数据展示。 看一下简单的实现效果:
用户4773577
2025/06/28
630
鸿蒙开发:简单自定义一个绘制画板
本篇文章,主要是使用Canvas绘制一个简单的画板,可以更改颜色,画笔粗细以及删除操作,主要运用到了CanvasRenderingContext2D中的绘制路径功能,我们可以看下基本实现的效果。
程序员一鸣
2024/12/28
1540
鸿蒙开发:简单自定义一个绘制画板
鸿蒙OS创新实践:动态声控话筒开发指南
在鸿蒙OS的生态中,开发者们不断探索和创新,以期为用户带来更丰富的交互体验。最近,我萌生了一个想法:制作一个能够随着声音动态变化的话筒组件。尽管网络上缺乏现成的参考案例,但我决定亲自动手,将这一创意变为现实。本文将深入解析这一开发过程,分享我的实战经验和技术细节。
用户2475552
2025/06/22
630
215.HarmonyOS NEXT系列教程之 CircleClass基础类与圆形效果实现原理解析
本文将详细解析CircleClass基础类及其子类的实现原理,这些类是实现TabBar圆形效果的核心。
全栈若城
2025/03/27
980
鸿蒙开发:绘制服务卡片
绘制卡片就非常的简单了,和平时的应用开发是一样的,但是并不是所有的组件都支持卡片,这里,在官方文档中,每个组件也都有明确的标记,如果支持,那么就会有一个卡片能力显示。
程序员一鸣
2025/06/23
720
鸿蒙开发:绘制服务卡片
分享之前使用HarmonyOS NEXT Canvas做的动态GIF视频的一个案例,没有感情,全是技术。
什么!你还不知道我封装了什么图表组件,我不允许你不知道,还不快去看看:莓创开源图表快速地址
陈杨
2025/03/14
1140
分享之前使用HarmonyOS NEXT Canvas做的动态GIF视频的一个案例,没有感情,全是技术。
HarmonyOS NEXT实战:页面水印
##HarmonyOS Next实战##HarmonyOS SDK应用服务##教育##
中雨
2025/06/25
910
如何利用OpenHarmony ArkUI的Canvas组件实现涂鸦功能?
ArkUI是一套UI开发框架,提供了开发者进行应用UI开发时所需具备的能力。随着OpenAtom OpenHarmony(以下简称“OpenHarmony”)不断更新迭代,ArkUI也提供了很多新的组件,例如Canvas、OffscreenCanvas、XComponent组件等。
小帅聊鸿蒙
2025/04/20
1610
如何利用OpenHarmony ArkUI的Canvas组件实现涂鸦功能?
使用 HarmonyOS NEXT 实现签名板的功能
大家好,我是一只会打代码的羊。今天来分享一篇之前使用 ArkTS API9 版本实现的签名板功能,目前鸿蒙已经推出 API12 了,对比 API9 的时候,现在实现一个功能太简单了。这期主要讲一下之前实现功能有多难受,以及如何实现。,现在这套代码也是可以直接迁移到 API12 版本的。
陈杨
2025/03/15
1030
使用 HarmonyOS NEXT 实现签名板的功能
鸿蒙特效教程04-直播点赞动画效果实现教程
在时下流行的直播、短视频等应用中,点赞动画是提升用户体验的重要元素。当用户点击屏幕时,屏幕上会出现飘动的点赞图标。
苏杰豪
2025/03/26
1730
鸿蒙特效教程04-直播点赞动画效果实现教程
HarmonyOS 开发实践 —— 基于Progress组件的进度条
注意:这个Progress组件最常见的是和通用属性rotate一起使用,除了上图这种逆向倒计时,还有那种类似于温度计(从下到上加载)的效果,全都是利用rotate。
小帅聊鸿蒙
2024/12/04
2990
HarmonyOS 开发实践 —— 基于Progress组件的进度条
推荐阅读
相关推荐
207.HarmonyOS NEXT系列教程之 TabsConcaveCircle组件完整源码解析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档