欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Flutter 實(shí)現(xiàn)虎牙/斗魚 彈幕功能

 更新時(shí)間:2020年04月14日 08:36:43   作者:老孟程序員  
這篇文章主要介紹了Flutter 實(shí)現(xiàn)虎牙/斗魚 彈幕功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

用Flutter實(shí)現(xiàn)彈幕功能,輕松實(shí)現(xiàn)虎牙、斗魚的彈幕效果。

先來一張效果圖:

實(shí)現(xiàn)原理

彈幕的實(shí)現(xiàn)原理非常簡(jiǎn)單,即將一條彈幕從左側(cè)平移到右側(cè),當(dāng)然我們要計(jì)算彈幕垂直方向上的偏移,不然所有的彈幕都會(huì)在一條直線上,相互覆蓋。平移代碼如下:

@override
void initState() {
 _animationController =
  AnimationController(duration: widget.duration, vsync: this)
 ..addStatusListener((status){
 if(status == AnimationStatus.completed){
  widget.onComplete('');
 }
 });
 var begin = Offset(-1.0, .0);
 var end = Offset(1.0, .0);
 
 _animation = Tween(begin: begin, end: end).animate(_animationController);
 //開始動(dòng)畫
 _animationController.forward();
 super.initState();
}

@override
 Widget build(BuildContext context) {
 return SlideTransition(
  position: _animation,
  child: widget.child,
 );
 }

計(jì)算垂直方向的偏移:

_computeTop(int index, double perRowHeight) {
 //第幾輪彈幕
 int num = (index / widget.showCount).floor();
 var top;
 top = (index % widget.showCount) * perRowHeight + widget.padding;

 if (num % 2 == 1 && index % widget.showCount != widget.showCount - 1) {
 //第二輪在第一輪2行彈幕中間
 top += perRowHeight / 2;
 }
 if (widget.randomOffset != 0 && top > widget.randomOffset) {
 top += _random.nextInt(widget.randomOffset) * 2 - widget.randomOffset;
 }
 return top;
}

這些準(zhǔn)備好后,就是創(chuàng)建一條彈幕了,現(xiàn)創(chuàng)建一條最簡(jiǎn)單的文字彈幕:

Text(
 text,
 style: TextStyle(color: Colors.white),
);

效果如下:

創(chuàng)建一條VIP用戶的彈幕,其實(shí)就是字體變下顏色:

Text(
 text,
 style: TextStyle(color: Color(0xFFE9A33A)),
)

效果如下:

給文字加個(gè)圓角背景:

return Center(
 child: Container(
 padding: EdgeInsets.only(left: 10, right: 10, top: 3, bottom: 3),
 decoration: BoxDecoration(
  color: Colors.red.withOpacity(.8),
  borderRadius: BorderRadius.circular(50)),
 child: Text(
  text,
  style: TextStyle(color: Colors.white),
 ),
 ),
);

效果如下:

創(chuàng)建一個(gè)送火箭的彈幕:

return Center(
 child: Container(
 padding: EdgeInsets.only(left: 10, right: 10, top: 3, bottom: 3),
 decoration: BoxDecoration(
  color: Colors.red.withOpacity(.8),
  borderRadius: BorderRadius.circular(50)),
 child: Row(
  mainAxisSize: MainAxisSize.min,
  children: <Widget>[
  Text(
   text,
   style: TextStyle(color: Colors.white),
  ),
  Image.asset('assets/images/timg.jpeg',height: 30,width: 30,),
  Text(
   'x $count',
   style: TextStyle(color: Colors.white, fontSize: 18),
  ),
  ],
 ),
 ),
);

效果如下:

火箭有點(diǎn)丑了,不過這不是重點(diǎn)。

其實(shí)實(shí)現(xiàn)彈幕效果沒有我開始想的那么簡(jiǎn)單,過程中也遇到了一些問題,不過好在最終都解決了,獻(xiàn)上Github地址:https://github.com/781238222/flutter-do/tree/master/flutter_barrage_sample

如果覺得還不錯(cuò),給個(gè)小小的贊。

交流

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

170+組件詳細(xì)用法:http://laomengit.com

總結(jié)

到此這篇關(guān)于Flutter 實(shí)現(xiàn)虎牙/斗魚 彈幕功能的文章就介紹到這了,更多相關(guān)Flutter 實(shí)現(xiàn)虎牙斗魚 彈幕內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論