91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Flutter如何實現網易云音樂字幕

發布時間:2020-08-04 09:24:09 來源:億速云 閱讀:476 作者:小豬 欄目:移動開發

這篇文章主要為大家展示了Flutter如何實現網易云音樂字幕,內容簡而易懂,希望大家可以學習一下,學習完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。

先來一張效果圖:

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('\n'));
 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
   &#63; 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如何實現網易云音樂字幕

以上就是關于Flutter如何實現網易云音樂字幕的內容,如果你們有學習到知識或者技能,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

濉溪县| 盐城市| 上林县| 聂荣县| 滦南县| 宝丰县| 右玉县| 麻栗坡县| 丰城市| 楚雄市| 赣榆县| 开阳县| 都兰县| 伊通| 朔州市| 大同县| 广州市| 资溪县| 荔浦县| 义乌市| 成安县| 庄浪县| 营山县| 宜黄县| 沁源县| 云龙县| 灵宝市| 台东县| 茂名市| 岢岚县| 郁南县| 手游| 荔浦县| 武强县| 齐河县| 任丘市| 通江县| 香河县| 喀喇沁旗| 云浮市| 文昌市|