Flutter利用SizeTransition實(shí)現(xiàn)組件飛入效果
前言
繼續(xù) Transition
系列動(dòng)畫組件的介紹,本篇來(lái)介紹 SizeTransition
。SizeTransition
用于更改子組件的尺寸來(lái)實(shí)現(xiàn)動(dòng)畫。支持垂直方向或水平方向修改動(dòng)畫,同時(shí)尺寸更改的起始位置可以從頂部、中部、底部(垂直方向)或左側(cè)、中間、右側(cè)(水平方向)開始。通過(guò)這些特性,我們可以構(gòu)建組件飛入的效果。
SizeTransition 介紹
SizeTransition
的構(gòu)造方法定義如下。
const?SizeTransition({ ??Key??key, ??this.axis?=?Axis.vertical, ??required?Animation<double>?sizeFactor, ??this.axisAlignment?=?0.0, ??this.child, })?
參數(shù)對(duì)應(yīng)的說(shuō)明如下:
axis
:枚舉,vertical
標(biāo)識(shí)縱向更改組件尺寸,即更改組件高度;horizontal
表示橫向更改組件尺寸,即更改組件寬度。
sizeFactor
:即控制組件尺寸變化的 Animation
對(duì)象。實(shí)際上在動(dòng)畫過(guò)程中就是組件尺寸的寬度(horizontal
)或高度(vertical
)乘以**Animation**的值。
axisAlignment
:即動(dòng)畫過(guò)程中,子組件的對(duì)齊位置,默認(rèn)為0.0,是從中間開始更改尺寸;當(dāng)axis
為vertical
時(shí),-1.0代表頂部對(duì)齊開始動(dòng)畫(即尺寸從上到下開始變大);當(dāng) axis
為horizontal
時(shí),開始的方向和文本的反向有關(guān)(TextDirection.ltr
還是 TextDirection.rtl
),當(dāng)文本為從左到右時(shí)(TextDirection.ltr,默認(rèn)
),-1.0表示從左側(cè)開始動(dòng)畫(即尺寸從左到右開始變大)。
應(yīng)用
對(duì)于我們的飛入動(dòng)畫來(lái)說(shuō),我們要實(shí)現(xiàn)從左向右飛入動(dòng)畫效果,因此需要設(shè)置 axis
為水平方向,然后 axisAligment
為右側(cè)。對(duì)于圖片,找一個(gè)橫向飛行的超人,然后加上動(dòng)畫后就可以實(shí)現(xiàn)超人飛入的效果了。完整源碼如下:
class?SizeTransitionDemo?extends?StatefulWidget?{ ??SizeTransitionDemo({Key??key})?:?super(key:?key); ??@override ??_SizeTransitionDemoState?createState()?=>?_SizeTransitionDemoState(); } class?_SizeTransitionDemoState?extends?State<SizeTransitionDemo> ????with?SingleTickerProviderStateMixin?{ ??late?AnimationController?_controller?= ??????AnimationController(duration:?const?Duration(seconds:?3),?vsync:?this) ????????..repeat(); ??//使用自定義曲線動(dòng)畫過(guò)渡效果 ??late?Animation<double>?_animation?=?CurvedAnimation( ??????parent:?_controller,?curve:?Curves.fastLinearToSlowEaseIn); ??@override ??Widget?build(BuildContext?context)?{ ????return?Scaffold( ??????appBar:?AppBar( ????????title:?Text('SizeTransition'), ????????brightness:?Brightness.dark, ????????backgroundColor:?Colors.blue, ??????), ??????body:?SizeTransition( ????????child:?Center( ??????????child:?Image.asset( ????????????'images/superman.png', ????????????width:?300.0, ????????????height:?300.0, ??????????), ????????), ????????sizeFactor:?_animation, ????????axis:?Axis.horizontal, ????????axisAlignment:?1.0, ??????), ????); ??} ??@override ??void?dispose()?{ ????_controller.stop(); ????_controller.dispose(); ????super.dispose(); ??} }
使用 SizeTransition 實(shí)現(xiàn)其他動(dòng)畫效果
我們可以設(shè)置動(dòng)畫從中間開始,這樣會(huì)有一種卷軸打開的效果,比如我們找一幅卷軸畫來(lái)看看效果。
這個(gè)動(dòng)畫的實(shí)現(xiàn)代碼如下:
Widget?build(BuildContext?context)?{ ??return?Scaffold( ????appBar:?AppBar( ??????title:?Text('SizeTransition'), ??????brightness:?Brightness.dark, ??????backgroundColor:?Colors.blue, ????), ????body:?Container( ??????alignment:?Alignment.center, ??????child:?SizeTransition( ????????child:?Image.asset( ??????????'images/juanzhou.png', ????????), ????????sizeFactor:?_animation, ????????axis:?Axis.horizontal, ????????axisAlignment:?0.0, ??????), ????), ??); }
總結(jié)
本篇介紹了使用 SizeTransition
控制組件尺寸更改來(lái)實(shí)現(xiàn)飛入或展開的動(dòng)畫效果。SizeTransition
也可以用于那種滑入滑出的動(dòng)畫場(chǎng)合,比如列表元素的插入使用下滑入,列表元素的刪除使用上滑出。
以上就是Flutter利用SizeTransition實(shí)現(xiàn)組件飛入效果的詳細(xì)內(nèi)容,更多關(guān)于Flutter組件飛入的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android基于OpenCV實(shí)現(xiàn)Harris角點(diǎn)檢測(cè)
角點(diǎn)就是極值點(diǎn),即在某方面屬性特別突出的點(diǎn)。當(dāng)然,你可以自己定義角點(diǎn)的屬性(設(shè)置特定熵值進(jìn)行角點(diǎn)檢測(cè))。角點(diǎn)可以是兩條線的交叉處,也可以是位于相鄰的兩個(gè)主要方向不同的事物上的點(diǎn)。本文介紹如何基于OpenCV實(shí)現(xiàn)Harris角點(diǎn)檢測(cè)2021-06-06Android實(shí)現(xiàn)朋友圈評(píng)論回復(fù)列表
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)朋友圈評(píng)論回復(fù)列表,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11Android實(shí)現(xiàn)選擇相冊(cè)圖片并顯示功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)選擇相冊(cè)圖片并顯示功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04android獲取當(dāng)前運(yùn)行Activity名字的方法
這篇文章主要介紹了android獲取當(dāng)前運(yùn)行Activity名字的方法,對(duì)比分析了兩種實(shí)現(xiàn)方法供大家選擇,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-01-01怎樣實(shí)現(xiàn)android http-post方法實(shí)例說(shuō)明
android http-post方法在開發(fā)中如何實(shí)現(xiàn),具體代碼如下,感興趣的朋友可以參考下哈,希望對(duì)大家有所幫助2013-06-06Android ListView position詳解及實(shí)例代碼
這篇文章主要介紹了Android ListView position的相關(guān)資料,在開發(fā)Android 應(yīng)用的時(shí)候你真的用對(duì)了嗎?這里給大家徹底解釋下,需要的朋友可以參考下2016-10-10Android 序列化的存儲(chǔ)和讀取總結(jié)及簡(jiǎn)單使用
這篇文章主要介紹了Android 序列化的存儲(chǔ)和讀取總結(jié)及簡(jiǎn)單使用的相關(guān)資料,Serializable接口和Parcelable接口,本文對(duì)這兩種方式進(jìn)行簡(jiǎn)單的總結(jié)和使用,需要的朋友可以參考下2016-12-12