您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“基于Flutter怎么制作一個火箭發射動畫”,內容詳細,步驟清晰,細節處理妥當,希望這篇“基于Flutter怎么制作一個火箭發射動畫”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
AnimatedPositioned
介紹AnimatedPositioned
組件的使用方式其實和 AnimatedContainer 類似。只是AnimatedPositioned
是 Positioned
組件的替代。構造方法定義如下:
const AnimatedPositioned({ Key? key, required this.child, this.left, this.top, this.right, this.bottom, this.width, this.height, Curve curve = Curves.linear, required Duration duration, VoidCallback? onEnd, })
前面的參數和 Positioned
一樣,后面是動畫控制參數,這些參數的定義和 AnimatedContainer
的是一樣的:
curve
:動畫效果曲線;
duration
:動畫時長;
onEnd
:動畫結束后回調。
我們可以改變 left
,top
,width
等參數來實現動畫過渡的效果。比如我們的火箭發射,就是修改 bottom
(飛行高度控制)和 width
(尺寸大小控制)來實現的。
有了上面的兩個分析,火箭發射動畫就簡單了!完整代碼如下:
class RocketLaunch extends StatefulWidget { RocketLaunch({Key? key}) : super(key: key); @override _RocketLaunchState createState() => _RocketLaunchState(); } class _RocketLaunchState extends State<RocketLaunch> { var rocketBottom = -80.0; var rocketWidth = 160.0; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('火箭發射'), brightness: Brightness.dark, backgroundColor: Colors.black, ), backgroundColor: Colors.black, body: Center( child: Stack( alignment: Alignment.bottomCenter, children: [ Image.asset( 'images/earth.jpeg', height: double.infinity, fit: BoxFit.fill, ), AnimatedPositioned( child: Image.asset( 'images/rocket.png', fit: BoxFit.fitWidth, ), bottom: rocketBottom, width: rocketWidth, duration: Duration(seconds: 5), curve: Curves.easeInCubic, ), ], ), ), floatingActionButton: FloatingActionButton( child: Text( '發射', style: TextStyle( color: Colors.white, ), textAlign: TextAlign.center, ), onPressed: () { setState(() { rocketBottom = MediaQuery.of(context).size.height; rocketWidth = 40.0; }); }, ), ); } }
其中一開始設置 bottom
為負值,是為了隱藏火箭的焰火,這樣會更有感覺一些。然后就是在點擊發射按鈕的時候,通過 setState
更改底部距離和火箭尺寸就可以搞定了。
讀到這里,這篇“基于Flutter怎么制作一個火箭發射動畫”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。