
目录
- 案例介绍
- 代码实现
- 代码详解
- 歌词数据结构
- 歌词显示区实现
- 与Column组件的结合应用
- 总结
案例介绍
在上一篇教程中,我们已经实现了音乐播放器的顶部导航栏和封面展示区域。本篇教程将继续探索Column组件的应用,重点介绍如何实现音乐播放器的歌词显示功能。歌词显示是音乐播放器中非常重要的一部分,它能够增强用户的音乐体验,让用户更好地理解和感受音乐内容。
代码实现
在实现歌词显示功能之前,我们需要确保已经定义了歌词数据结构。以下是完整的歌词显示部分代码:
// 歌词数据结构定义
private lyrics: Array<{
time: number,
text: string
}> = [
{ time: 0, text: '星辰大海' },
{ time: 15, text: '词:唐恬' },
{ time: 30, text: '曲:钱雷' },
{ time: 45, text: '让我为你唱一首歌' },
{ time: 60, text: '唱一首让你心动的歌' },
{ time: 75, text: '让我为你写一首诗' },
{ time: 90, text: '写一首让你心醉的诗' }
]
// 在build方法中的歌词显示部分
build() {
Column() {
// 前面的顶部导航栏和封面区域代码省略...
// 歌词显示
Column() {
List() {
ForEach(this.lyrics, (lyric) => {
ListItem() {
Text(lyric.text)
.fontSize(14)
.fontColor(lyric.time === 75 ? '#000000' : '#999999')
.fontWeight(lyric.time === 75 ? FontWeight.Medium : FontWeight.Regular)
}
.height(30)
.width('100%')
.justifyContent(FlexAlign.Center)
})
}
.width('100%')
.height(150)
}
.width('100%')
.margin({ top: 30, bottom: 30 })
// 后面的进度条和控制按钮代码省略...
}
.width('100%')
.height('100%')
.backgroundColor(Color.White)
}
代码详解
歌词数据结构
首先,我们定义了一个包含时间和文本的数组来存储歌词数据:
private lyrics: Array<{
time: number,
text: string
}> = [
{ time: 0, text: '星辰大海' },
{ time: 15, text: '词:唐恬' },
{ time: 30, text: '曲:钱雷' },
{ time: 45, text: '让我为你唱一首歌' },
{ time: 60, text: '唱一首让你心动的歌' },
{ time: 75, text: '让我为你写一首诗' },
{ time: 90, text: '写一首让你心醉的诗' }
]
每个歌词项包含两个属性:
time:表示歌词出现的时间点(以秒为单位)text:表示歌词的文本内容
歌词显示区实现
歌词显示区使用了嵌套的Column和List组件来实现:
Column() {
List() {
ForEach(this.lyrics, (lyric) => {
ListItem() {
Text(lyric.text)
.fontSize(14)
.fontColor(lyric.time === 75 ? '#000000' : '#999999')
.fontWeight(lyric.time === 75 ? FontWeight.Medium : FontWeight.Regular)
}
.height(30)
.width('100%')
.justifyContent(FlexAlign.Center)
})
}
.width('100%')
.height(150)
}
.width('100%')
.margin({ top: 30, bottom: 30 })
这段代码的关键点是:
外层Column容器:
- 设置了
width('100%')使其占据父容器的全部宽度 - 通过
margin({ top: 30, bottom: 30 })设置上下边距,与其他区域保持适当间隔
- 设置了
List组件:
- 用于显示可滚动的歌词列表
- 设置了固定高度
height(150),限制了歌词显示区域的大小
ForEach循环:
- 遍历
lyrics数组,为每个歌词项创建一个ListItem - 每个ListItem包含一个Text组件,显示歌词文本
- 遍历
高亮当前歌词:
- 通过条件表达式
lyric.time === 75 ? '#000000' : '#999999'判断是否为当前播放的歌词 - 当前歌词使用黑色和中等字重显示,其他歌词使用灰色和常规字重显示
- 在实际应用中,这个条件应该根据当前播放时间动态变化
- 通过条件表达式
ListItem布局:
- 设置了固定高度
height(30),使每行歌词有统一的高度 - 通过
justifyContent(FlexAlign.Center)使歌词在垂直方向居中对齐
- 设置了固定高度
与Column组件的结合应用
在这个歌词显示功能中,我们可以看到Column组件的几个重要应用:
- 嵌套使用:外层Column作为容器,内部再嵌套List组件,形成复杂的布局结构
- 边距控制:通过margin属性控制与其他区域的间距
- 宽度设置:通过width属性确保组件占据全宽
这种嵌套使用的方式非常灵活,可以根据需要组合不同的组件,实现复杂的UI效果。
总结
在本篇文章中,我们学习了如何使用Column组件结合List组件实现音乐播放器的歌词显示功能。通过合理的组件嵌套和属性设置,我们成功创建了一个可滚动的歌词列表,并实现了当前歌词的高亮显示。
关键要点:
- 使用嵌套的Column和List组件创建歌词显示区
- 通过ForEach循环遍历歌词数据,动态创建ListItem
- 使用条件表达式实现当前歌词的高亮显示
- 设置适当的高度、宽度和边距,确保布局美观
- 通过justifyContent属性控制歌词的垂直对齐方式
在下一篇教程中,我们将继续探索如何实现音乐播放器的进度条和控制按钮,完成整个音乐播放器界面的构建。
498

被折叠的 条评论
为什么被折叠?



