服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - Flutter 实现网易云音乐字幕的代码

Flutter 实现网易云音乐字幕的代码

2022-12-09 13:45老孟程序员 Android

这篇文章主要介绍了Flutter 实现网易云音乐字幕的代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

没有接触过音乐字幕方面知识的话,会对字幕的实现比较迷茫,什么时候转到下一句?看了这篇文章,你就会明白字幕so easy。

先来一张效果图:

Flutter 实现网易云音乐字幕的代码

字幕格式

目前市面上有很多种字幕格式,比如srt, ssa, ass(文本形式)和idx+sub(图形格式),但不管哪一种格式都会包含2个属性:时间戳和字幕内容,格式如下:

00:00 歌词:
00:25 我要穿越这片沙漠
00:28 找寻真的自我
00:30 身边只有一匹骆驼陪我
00:34 这片风儿吹过
00:36 那片云儿飘过

上面字幕的意思是:在25秒的时候跳转到下一句,在28秒的时候跳转到下一句...

字幕实现

了解了字幕文件的形式,字幕实现起来就比较简单了,使用ListWheelScrollView控件,然后通过ScrollController在合适的时机进行滚动,使当前字幕始终保持在屏幕中间。

解析字幕文件,获取字幕数据:

loadData() async {
 var jsonStr =
 await DefaultAssetBundle.of(context).loadString("assets/subtitle.txt");
 var list = jsonStr.split(RegExp("
"));
 list.forEach((f) {
 if (f.isNotEmpty) {
 var r = f.split(RegExp(" "));
 if (r.length >= 2) {
 _subtitleList.add(SubtitleEntry(r[0], r[1]));
 }
 }
 });
 setState(() {});
}

设置字幕控件及背景图片:

@override
Widget build(BuildContext context) {
 return Scaffold(
 appBar: AppBar(
 title: Text("弹幕"),
 ),
 body: Stack(
 children: <Widget>[
 Positioned.fill(
  child: Image.asset(
  "assets/imgs/background.png",
  fit: BoxFit.cover,
 )),
 Positioned.fill(
  child: Subtitle(
  _subtitleList,
  selectedTextStyle: TextStyle(color: Colors.white,fontSize: 18),
  unSelectedTextStyle: TextStyle(
  color: Colors.black.withOpacity(.6),
  ),
  diameterRatio: 5,
  itemExtent: 45,
 ))
 ],
 ),
 );
}

字幕控件的构建:

@override
Widget build(BuildContext context) {
 if (widget.data == null || widget.data.length == 0) {
 return Container();
 }
 return ListWheelScrollView.useDelegate(
 controller: _controller,
 diameterRatio: widget.diameterRatio,
 itemExtent: widget.itemExtent,
 childDelegate: ListWheelChildBuilderDelegate(
 builder: (context, index) {
  return Container(
  alignment: Alignment.center,
  child: Text(
  "${widget.data[index].content}",
  style: _currentIndex == index
   ? widget.selectedTextStyle
   : widget.unSelectedTextStyle,
  ),
  );
 },
 childCount: widget.data.length),
 );
}

字幕控件封装了选中字体和未选中字体样式参数,用法如下:

Subtitle(
	_subtitleList,
	selectedTextStyle: TextStyle(color: Colors.white,fontSize: 18),
	unSelectedTextStyle: TextStyle(
 	color: Colors.black.withOpacity(.6),
	)
)

效果如下:

Flutter 实现网易云音乐字幕的代码

设置圆筒直径和主轴渲染窗口的尺寸的比,默认值是2,越小表示圆筒越圆

Subtitle(
	_subtitleList,
	diameterRatio: 5,
)

下面是1和5的对比:

 

Flutter 实现网易云音乐字幕的代码Flutter 实现网易云音乐字幕的代码

Github地址:https://github.com/781238222/flutter-do/tree/master/flutter_subtitle_example

交流

Github地址:https://github.com/781238222/flutter-do

170+组件详细用法:http://laomengit.com

总结

到此这篇关于Flutter 实现网易云音乐字幕的文章就介绍到这了,更多相关Flutter 实现网易云音乐字幕内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.cnblogs.com/mengqd/archive/2020/04/14/12701007.html

延伸 · 阅读

精彩推荐
  • AndroidAndroid接入支付宝和微信支付的方法

    Android接入支付宝和微信支付的方法

    这篇文章主要介绍了Android接入支付宝和微信支付的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友...

    xxq2dream9452022-10-20
  • Android新版Flutter集成到已有Android项目的实现

    新版Flutter集成到已有Android项目的实现

    这篇文章主要介绍了新版Flutter集成到已有Android项目的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    一禅小和尚5802022-12-07
  • Android四种Android数据存储方式

    四种Android数据存储方式

    这篇文章主要为大家详细介绍了四种Android数据存储方式,感兴趣的小伙伴们可以参考一下...

    Ron Ngai11412021-06-23
  • Android解析android截屏问题

    解析android截屏问题

    笔者做过一段时间的android截屏开发,稍微了解了一下这方面的知识,于是拿来分享一下,也许对你有一些帮助吧...

    Android开发网10862021-02-04
  • AndroidAndroid编程实现简单流量管理功能实例

    Android编程实现简单流量管理功能实例

    这篇文章主要介绍了Android编程实现简单流量管理功能的方法,结合实例形式分析了Android实现流量监控所涉及的功能模块与布局技巧,需要的朋友可以参考下...

    lg8783985096132021-06-07
  • AndroidAndroid实现退出时关闭所有Activity的方法

    Android实现退出时关闭所有Activity的方法

    这篇文章主要介绍了Android实现退出时关闭所有Activity的方法,主要通过自定义类CloseActivityClass实现这一功能,需要的朋友可以参考下...

    Android开发网12432021-03-08
  • AndroidAndroid 简单实现倒计时功能

    Android 简单实现倒计时功能

    在 Android 中倒计时功能是比较常用的一个功能,比如短信验证码,付款倒计时等。今天小编给大家分享Android 简单实现倒计时功能,感兴趣的朋友一起看看...

    是我ChaoYoung5802022-11-11
  • AndroidAndroid仿微信公众号界面

    Android仿微信公众号界面

    这篇文章主要为大家详细介绍了Android仿微信公众号界面,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    oxygen010611932022-03-02