温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦!
本文将详细介绍TabsConcaveCircle组件中Canvas的渲染实现,包括背景绘制和凹槽效果的创建。
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()
}
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,
})
}
}
CanvasCreateRectangle
创建背景CanvasClipGroove
绘制凹槽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')
}
// 创建矩形背景
CanvasCreateRectangle({
context: this.context,
tabsBgColor: this.tabsBgColor
})
// 创建凹槽效果
CanvasClipGroove({
context: this.context,
menuLength: this.tabsMenu.length,
center: this.animationPositionX,
})
CanvasCreateRectangle
:CanvasClipGroove
:TabsConcaveCircle组件的Canvas渲染实现主要包含:
通过这些实现,创造出了具有独特视觉效果的底部导航栏组件。Canvas的使用让组件具有了更灵活的绘制能力,能够实现传统组件难以达到的视觉效果。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。