最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

先來一張效果圖:

實現(xiàn)原理

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

@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);
 //開始動畫
 _animationController.forward();
 super.initState();
}

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

計算垂直方向的偏移:

_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)建一條最簡單的文字彈幕:

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

效果如下:

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

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

效果如下:

給文字加個圓角背景:

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)建一個送火箭的彈幕:

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),
  ),
  ],
 ),
 ),
);

效果如下:

火箭有點丑了,不過這不是重點。

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

如果覺得還不錯,給個小小的贊。

交流

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

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

總結(jié)

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

相關(guān)文章

最新評論

银川市| 玉树县| 永仁县| 寿光市| 上思县| 淮安市| 邯郸市| 武胜县| 任丘市| 巧家县| 胶州市| 金湖县| 安宁市| 垦利县| 宝丰县| 中宁县| 榆中县| 龙门县| 民县| 色达县| 鱼台县| 安泽县| 古田县| 望江县| 犍为县| 潢川县| 沾益县| 措美县| 澄江县| 上思县| 建昌县| 汉源县| 新郑市| 桃园县| 兴宁市| 岳阳市| 民权县| 区。| 磐石市| 岑巩县| 巍山|