HarmonyOS 鸿蒙Next中“仿抖音快手”App开发技术分享(三)利用相对布局叠加交互图标
HarmonyOS 鸿蒙Next中“仿抖音快手”App开发技术分享(三)利用相对布局叠加交互图标
上一节我们利用photoAccessHelper实现了从相册挑选视频的功能,但在短视频APP界面,视频画面上还叠加了若干交互图标,包括但不限于:点赞、收藏、评论、分享等等。那么在某个组件上叠加显示其他组件,就用到了相对布局这个容器。
鸿蒙SDK提供的相对布局叫做RelativeContainer组件,相对布局内部的各个子组件按照指定位置排列,如果两个子组件同时覆盖了某块区域,后来的子组件画面将覆盖先来的子组件画面。
所谓相对布局,指的是内部组件相对于其他组件来决定自身的位置。而被其他组件拿来参考位置的标记组件,鸿蒙系统称之为锚点。这个锚点既可能是子组件的上级容器也就是相对布局,也可能是子组件的平级组件。
对于相对布局的锚点标识,SDK固定分配了"container"表示当前RelativeContainer组件。对于内部组件的锚点标识,则需提前给锚点组件分配id,也就是在引入锚点组件时添加".id(‘tx_center’)",其中tx_center可替换为自己定义的锚点标识。
RelativeContainer的子组件通过alignRules方法指定自身的相对位置,该方法有middle和center两个参数,其中middle用于设置水平方向的位置,center用于设置垂直方向的位置。不管是水平方向还是垂直方向,都要指定当前方向的锚点标识anchor,以及该方向上的对齐方式align。具体的alignRules方法调用格式如下所示:
.alignRules({
middle:{ anchor: '水平方向的锚点标识', align: 水平方向的对齐方式}, // middle表示水平方向
center:{ anchor: '垂直方向的锚点标识', align: 垂直方向的对齐方式} // center表示垂直方向
})
若想让某个子组件位于相对布局的正中央,则可调用下面的alignRules方法。在水平和垂直两个方向上都把上级容器__container__作为锚点,对齐方式也都采用了居中对齐。
.alignRules({
middle:{ anchor: '__container__', align: HorizontalAlign.Center},
center:{ anchor: '__container__', align: VerticalAlign.Center}
})
水平方向的对齐方式除了HorizontalAlign.Center表示居中对齐,还有HorizontalAlign.Start表示靠左对齐,以及HorizontalAlign.End表示靠右对齐。垂直方向的对齐方式除了VerticalAlign.Center表示居中对齐,还有VerticalAlign.Top表示靠上对齐,以及VerticalAlign.Bottom表示靠下对齐。
除了以上级容器作为锚点,还能以平级组件作为锚点,注意锚点组件要提前分配id标识,然后目标组件在alignRules方法的anchor属性设置锚点的id,表示参考该id的锚点组件来决定自身位置。比如下面代码先放入一个居中的文本组件,再放入两个参考中央文本位置的另外两个文本组件。
RelativeContainer() {
Text('我在中间').fontSize(17)
.id('tx_center') // 锚点组件需要分配id标识
.alignRules({
middle:{ anchor: '__container__', align: HorizontalAlign.Center},
center:{ anchor: '__container__', align: VerticalAlign.Center}
})
Text('中间上面').fontSize(17)
.backgroundColor('#ffff00')
.alignRules({
left:{ anchor: 'tx_center', align: HorizontalAlign.Start},
bottom:{ anchor: 'tx_center', align: VerticalAlign.Top}
})
Text('中间右边').fontSize(17)
.backgroundColor('#ffff00')
.alignRules({
left:{ anchor: 'tx_center', align: HorizontalAlign.End},
top:{ anchor: 'tx_center', align: VerticalAlign.Top}
})
}
.width('100%').height(300)
从上面代码可知,第一个文本组件相对于上级容器居中放置,并且分配了tx_center的id标识。第二个和第三个文本组件都参考了第一个名叫tx_center的平级组件,且第二个文本组件与tx_center锚点朝左朝上对齐,第三个文本组件与tx_center锚点朝右朝上对齐。完整的相对布局效果如下所示。
下一篇文章会介绍如何使用滑块Swiper来轮播图片。
更多关于HarmonyOS 鸿蒙Next中“仿抖音快手”App开发技术分享(三)利用相对布局叠加交互图标的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在鸿蒙Next中实现"仿抖音快手"的交互图标叠加,可以使用ArkUI的相对布局(RelativeContainer)。通过设置锚点规则(alignRules)实现图标精准定位,例如:点赞图标右侧20vp、底部50vp。关键属性包括:id(组件标识)、alignRules(定位规则)、zIndex(层级控制)。交互动效可通过显式动画(animateTo)实现缩放和透明度变化,配合手势事件(onClick/onTouch)触发。图标资源建议使用svg矢量图保持清晰度,尺寸推荐48vp*48vp。
更多关于HarmonyOS 鸿蒙Next中“仿抖音快手”App开发技术分享(三)利用相对布局叠加交互图标的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
RelativeContainer组件确实是实现短视频App中交互图标叠加布局的理想选择。您对RelativeContainer的使用讲解得很清晰,特别是关于锚点定位和alignRules方法的说明非常到位。
补充几点关于RelativeContainer的实用技巧:
- 对于短视频App的交互图标布局,建议将视频播放器作为基础组件,然后通过RelativeContainer叠加点赞、评论等操作按钮。可以设置这些按钮相对于容器右边缘对齐,如:
.alignRules({
middle:{ anchor:'__container__', align:HorizontalAlign.End},
center:{ anchor:'__container__', align:VerticalAlign.Bottom}
})
- 多个交互按钮可以采用链式相对定位,比如评论按钮可以相对于点赞按钮定位:
.alignRules({
middle:{ anchor:'like_btn', align:HorizontalAlign.Start},
bottom:{ anchor:'like_btn', align:VerticalAlign.Top}
})
- 对于需要响应点击事件的叠加按钮,要注意设置合适的zIndex值确保点击区域正确响应。
RelativeContainer的性能优化提示:当容器内子组件较多时,建议为静态定位的组件设置固定尺寸,减少布局计算开销。