温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦!
TabsConcaveCircle是一个自定义的底部导航栏组件,它具有独特的凹陷圆形设计。本文将详细介绍该组件的基础结构和状态管理部分。
import animator, { AnimatorResult } from '@ohos.animator';
import componentUtils from '@ohos.arkui.componentUtils';
import inspector from '@ohos.arkui.inspector';
import { CanvasClipGroove, CanvasCreateRectangle, getImageUrl } from '../../utils/tabbar/Functions';
import { TabMenusInterfaceIRequired } from '../../types/TabMenusInterface';
import { ConcaveCircle } from '../../utils/tabbar/CircleClass';
animator
: 用于创建和管理动画效果componentUtils
: 提供组件相关的工具函数inspector
: 用于组件观察和监听CanvasClipGroove
: 用于创建凹槽效果CanvasCreateRectangle
: 用于创建矩形背景getImageUrl
: 处理图片URLTabMenusInterfaceIRequired
: 定义选项菜单的接口ConcaveCircle
: 处理凹陷圆形的相关计算@Component
export struct TabsConcaveCircle {
@Link @Watch("getAnimateSelectIndex") selectIndex: number;
@State animateSelectIndex: number = 0;
@Prop tabHeight: number = 60;
@Link tabsMenu: TabMenusInterfaceIRequired[];
@Prop tabsBgColor: string = "rgb(255, 255, 255)";
@Prop tabsSelectBgColor: Color | number | string | Resource = "rgba(92, 187, 183,1)";
@Prop tabsFontColor: Color = Color.Black;
@Prop tabsSelectFontColor: Color = Color.Black;
}
@Link
装饰器:selectIndex
: 当前选中项的索引,支持双向绑定tabsMenu
: 选项数据集合,支持双向绑定@State
装饰器:animateSelectIndex
: 用于控制动画的当前选中项circleInfo
: 存储凹陷圆球的信息animationPositionX
: 记录当前凹槽位置imageOffsetY
: 图片的垂直偏移量imageWH
: 图片的宽高@Prop
装饰器:tabHeight
: 定义Tabs的高度tabsBgColor
: 背景颜色tabsSelectBgColor
: 选中球的填充颜色tabsFontColor
: 字体颜色tabsSelectFontColor
: 选中时的字体颜色private settings: RenderingContextSettings = new RenderingContextSettings(true);
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
RenderingContextSettings
: 创建Canvas渲染上下文的设置CanvasRenderingContext2D
: Canvas的2D渲染上下文,用于绘制图形private canvasAnimator: AnimatorResult | undefined = undefined;
@State animateTime: number = 1000;
canvasAnimator
: 存储动画实例animateTime
: 动画执行时长,默认为1000毫秒本文介绍了TabsConcaveCircle组件的基础结构和状态管理部分,包括:
这些基础结构为实现一个具有凹陷圆形效果的底部导航栏提供了必要的框架。在后续文章中,我们将详细介绍组件的动画实现、交互处理和渲染逻辑。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。