
HarmonyOS Next实战教程:实现中间凹陷的异形tabbar 原创
今天要和大家分享的实战案例是实现中间凹陷的tabar
前些天在做墨迹天气的时候看到了这种异形的tabbar,看起来比较有挑战性,因为鸿蒙版的墨迹天气app还没有这个东西,我决定尝试做一下。
系统的Tabs肯定是不行了,我们需要自定义。
难度直接拉满,直接做最难的部分,就是这个中间有凹陷的矩形,这怎么整呢?
我们一点一点来,先不管矩形,先尝试画一条上边的曲线,这里需要使用三次贝塞尔曲线路径方法bezierCurveTo。
要画贝塞尔曲线,就要知道线上的坐标,尤其是曲线部分,坐标越多越好。
那么问题来了,直线部分的坐标很容易知道,曲线部分的坐标是多少呢?
我们需要做一道几何题,看一下这个曲线,它像是一个半圆又不像是一个半圆。我把它分解了一下,可以看到它是由三个同样大小的圆的三个部分拼凑起来,这三个圆的排列也比较有规律。
我们根据笛卡尔坐标系,计算出圆上的坐标点,越多越好。
我把这段曲线分为相等的4段,每一段都获取24个坐标点:
这样曲线部分的坐标就有了。
现在我们开始画线,先画左边的直线:
这里说一下y坐标为什么不是0,因为这个tabbar上方还有一些阴影,要把阴影这一部分留出来。
再画曲线部分:
再画右边的直线:
同样的把其他三个边也都画线形成闭环。
接下来我们就可以进行填充:
刚才说了tabbar有阴影,很多同学不知道贝塞尔曲线可以设置阴影,下面给大家示范一下:
这样就实现了沿着曲线的阴影,非常完美。
现在我们要在画布上添加切换页面的按钮,很明显要使用层叠布局,而且中间的按钮要给它特殊处理一下
现在一个完整的tabbar样式就完成了,接下来要用它替换系统的tabbar并且实现页面的切换,虽然说是替换掉系统tabbar,但是还是要使用它。你会发现在系统的tabbar中不设置tabBar属性的话页面底部就会是一片空白:
正好可以将我们的tabbar放在那,你还可以使用barHeight属性调整高度:
这样我们就成功实现了异形的自定义tabbar,非常完美。
