#跟着晓明学鸿蒙# HarmonyOS NEXT:音乐播放器的歌词显示功能 - Column组件应用(二)

img

目录

  • 案例介绍
  • 代码实现
  • 代码详解
  • 歌词数据结构
  • 歌词显示区实现
  • 与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 })

这段代码的关键点是:

  1. 外层Column容器

    • 设置了width('100%')使其占据父容器的全部宽度
    • 通过margin({ top: 30, bottom: 30 })设置上下边距,与其他区域保持适当间隔
  2. List组件

    • 用于显示可滚动的歌词列表
    • 设置了固定高度height(150),限制了歌词显示区域的大小
  3. ForEach循环

    • 遍历lyrics数组,为每个歌词项创建一个ListItem
    • 每个ListItem包含一个Text组件,显示歌词文本
  4. 高亮当前歌词

    • 通过条件表达式lyric.time === 75 ? '#000000' : '#999999'判断是否为当前播放的歌词
    • 当前歌词使用黑色和中等字重显示,其他歌词使用灰色和常规字重显示
    • 在实际应用中,这个条件应该根据当前播放时间动态变化
  5. ListItem布局

    • 设置了固定高度height(30),使每行歌词有统一的高度
    • 通过justifyContent(FlexAlign.Center)使歌词在垂直方向居中对齐

与Column组件的结合应用

在这个歌词显示功能中,我们可以看到Column组件的几个重要应用:

  1. 嵌套使用:外层Column作为容器,内部再嵌套List组件,形成复杂的布局结构
  2. 边距控制:通过margin属性控制与其他区域的间距
  3. 宽度设置:通过width属性确保组件占据全宽

这种嵌套使用的方式非常灵活,可以根据需要组合不同的组件,实现复杂的UI效果。

总结

在本篇文章中,我们学习了如何使用Column组件结合List组件实现音乐播放器的歌词显示功能。通过合理的组件嵌套和属性设置,我们成功创建了一个可滚动的歌词列表,并实现了当前歌词的高亮显示。

关键要点:

  1. 使用嵌套的Column和List组件创建歌词显示区
  2. 通过ForEach循环遍历歌词数据,动态创建ListItem
  3. 使用条件表达式实现当前歌词的高亮显示
  4. 设置适当的高度、宽度和边距,确保布局美观
  5. 通过justifyContent属性控制歌词的垂直对齐方式

在下一篇教程中,我们将继续探索如何实现音乐播放器的进度条和控制按钮,完成整个音乐播放器界面的构建。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值