Flutter使用AnimatedOpacity實(shí)現(xiàn)圖片漸現(xiàn)動(dòng)畫(huà)
前言
我們介紹了幾篇 Flutter 的動(dòng)畫(huà)控制類(lèi),相信大家對(duì)動(dòng)畫(huà)也有了一定的了解,可以通過(guò)這些基礎(chǔ)的動(dòng)畫(huà)控制類(lèi)實(shí)現(xiàn)自己想要的動(dòng)畫(huà)效果。在 Flutter 中也提供了一些封裝好的動(dòng)畫(huà)組件,以便我們快速應(yīng)用。本篇我們來(lái)介紹漸現(xiàn)效果 —— AnimatedOpacity
。
AnimatedOpacity 簡(jiǎn)介
顧名思義,AnimatedOpacity
就是用于動(dòng)態(tài)展示組件的透明度。實(shí)際上,它實(shí)現(xiàn)的是將其子組件的透明度動(dòng)態(tài)地從初始值過(guò)渡到指定值的動(dòng)畫(huà)效果。AnimatedOpacity
的構(gòu)造方法如下:
const?AnimatedOpacity({ ??Key??key, ??this.child, ??required?this.opacity, ??Curve?curve?=?Curves.linear, ??required?Duration?duration, ??VoidCallback??onEnd, ??this.alwaysIncludeSemantics?=?false, })?
對(duì)應(yīng)的參數(shù)為:
child
:要控制透明度的子組件;opacity
:最終的透明度值,需要是介于0-1之間的值;curve
:動(dòng)效曲線,默認(rèn)是線性的Curves.linear
,可以使用Curves
來(lái)構(gòu)建曲線效果;duration
:動(dòng)效時(shí)長(zhǎng);alwaysIncludeSemantics
:是否總是包含語(yǔ)義信息,默認(rèn)是false
。這個(gè)主要是用于輔助訪問(wèn)的,如果是true
,則不管透明度是多少,都會(huì)顯示語(yǔ)義信息(可以輔助朗讀),這對(duì)于視障人員來(lái)說(shuō)會(huì)更友好。onEnd
:動(dòng)畫(huà)結(jié)束回調(diào)方法。
AnimatedOpacity 應(yīng)用
應(yīng)用來(lái)說(shuō)就很簡(jiǎn)單了,只需要把需要漸現(xiàn)的組件作為 AnimatedOpacity
的子組件,然后在發(fā)生事件到時(shí)候更改透明度即可。我們實(shí)現(xiàn)下面的圖片漸現(xiàn)效果。
透明度漸變.gif
實(shí)現(xiàn)代碼如下:
class?AnimatedOpacityDemo?extends?StatefulWidget?{ ??const?AnimatedOpacityDemo({Key??key})?:?super(key:?key); ??@override ??_AnimatedOpacityDemoState?createState()?=>?_AnimatedOpacityDemoState(); } class?_AnimatedOpacityDemoState?extends?State<AnimatedOpacityDemo>?{ ??var?opacity?=?0.0; ??@override ??Widget?build(BuildContext?context)?{ ????return?Scaffold( ??????appBar:?AppBar( ????????title:?Text('AnimatedOpacity?動(dòng)畫(huà)'), ??????), ??????body:?Center( ????????child:?Stack( ??????????alignment:?Alignment.center, ??????????children:?[ ????????????Text('小姐姐在哪'), ????????????AnimatedOpacity( ??????????????duration:?Duration(seconds:?3), ??????????????opacity:?opacity, ??????????????child:?ClipOval( ????????????????child:?Image.asset( ??????????????????'images/beauty.jpeg', ??????????????????width:?300, ??????????????????height:?300, ????????????????), ??????????????), ??????????????curve:?Curves.ease, ????????????), ??????????], ????????), ??????), ??????floatingActionButton:?FloatingActionButton( ????????child:?Text( ??????????opacity?==?0???'Show'?:?'Hide', ??????????style:?TextStyle( ????????????color:?Colors.white, ??????????), ??????????textAlign:?TextAlign.center, ????????), ????????onPressed:?()?{ ??????????setState(()?{ ????????????opacity?=?opacity?==?0???1.0?:?0.0; ??????????}); ????????}, ??????), ????); ??} }
圖片漸現(xiàn)過(guò)渡
在相冊(cè)類(lèi)應(yīng)用中,我們經(jīng)常會(huì)看到一張圖片逐漸漸變?yōu)榱硪粡垐D片,從而提供更好的圖片瀏覽體驗(yàn),甚至造成一種時(shí)光如梭的感覺(jué)。這種效果可以使用 AnimatedOpactity
實(shí)現(xiàn)。將一張圖片的透明度逐漸降低到0,另一張的透明度逐漸升高到1,從而可以實(shí)現(xiàn)圖片漸變過(guò)渡的效果,例如下面的效果,是不是感覺(jué)小姐姐由清純風(fēng)變成高冷風(fēng)的過(guò)渡更自然?
小姐姐風(fēng)格變化.gif
實(shí)現(xiàn)的方式其實(shí)就是使用 Stack將兩張圖片堆疊在一起,然后讓兩張圖片的透明度往相反的方向變化就可以實(shí)現(xiàn)這樣的效果了,代碼如下:
class?_SwtichImageDemoState?extends?State<SwtichImageDemo>?{ ??var?opacity1?=?1.0; ??var?opacity2?=?0.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.center, ??????????children:?[ ????????????AnimatedOpacity( ??????????????duration:?Duration(milliseconds:?5000), ??????????????opacity:?opacity1, ??????????????child:?ClipOval( ????????????????child:?Image.asset( ??????????????????'images/beauty.jpeg', ??????????????????width:?300, ??????????????????height:?300, ????????????????), ??????????????), ??????????????curve:?Curves.ease, ????????????), ????????????AnimatedOpacity( ??????????????duration:?Duration(milliseconds:?5000), ??????????????opacity:?opacity2, ??????????????child:?ClipOval( ????????????????child:?Image.asset( ??????????????????'images/beauty2.jpeg', ??????????????????width:?300, ??????????????????height:?300, ????????????????), ??????????????), ??????????????curve:?Curves.ease, ????????????), ??????????], ????????), ??????), ??????floatingActionButton:?FloatingActionButton( ????????child:?Text( ??????????'變', ??????????style:?TextStyle( ????????????color:?Colors.white, ??????????), ??????????textAlign:?TextAlign.center, ????????), ????????onPressed:?()?{ ??????????setState(()?{ ????????????opacity1?=?0.0; ????????????opacity2?=?1.0; ??????????}); ????????}, ??????), ????); ??} }
總結(jié)
本篇介紹了 Flutter 自帶的漸現(xiàn)動(dòng)畫(huà)組件 AnimatedOpacity
的使用,借助 AnimatedOpacity
可以簡(jiǎn)化漸現(xiàn)動(dòng)畫(huà)的實(shí)現(xiàn),比如一個(gè)組件的消失動(dòng)畫(huà),兩張圖片的漸現(xiàn)切換過(guò)渡等效果。
以上就是Flutter使用AnimatedOpacity實(shí)現(xiàn)圖片漸現(xiàn)動(dòng)畫(huà)的詳細(xì)內(nèi)容,更多關(guān)于Flutter圖片漸現(xiàn)動(dòng)畫(huà)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- flutter FadeTransition實(shí)現(xiàn)透明度漸變動(dòng)畫(huà)
- Flutter使用AnimatedSwitcher實(shí)現(xiàn)場(chǎng)景切換動(dòng)畫(huà)
- Flutter?Animation實(shí)現(xiàn)縮放和滑動(dòng)動(dòng)畫(huà)效果
- 在Flutter中制作翻轉(zhuǎn)卡片動(dòng)畫(huà)的完整實(shí)例代碼
- Flutter 使用fluro的轉(zhuǎn)場(chǎng)動(dòng)畫(huà)進(jìn)行頁(yè)面切換
- Flutter實(shí)戰(zhàn)教程之酷炫的開(kāi)關(guān)動(dòng)畫(huà)效果
- 利用Flutter實(shí)現(xiàn)“孔雀開(kāi)屏”的動(dòng)畫(huà)效果
相關(guān)文章
Android實(shí)現(xiàn)短信驗(yàn)證功能的代碼
這篇文章主要介紹了Android實(shí)現(xiàn)短信驗(yàn)證功能的代碼的相關(guān)資料,需要的朋友可以參考下2016-07-07Android Studio一直處于Building的兩種解決方法
很多朋友都遇到過(guò)打開(kāi)別人的項(xiàng)目一直處于Building‘XXX’Gradle project info的情況。下面小編給大家?guī)?lái)了Android Studio一直處于Building的解決方法,感興趣的朋友一起看看吧2018-08-08Jetpack Compose自定義動(dòng)畫(huà)與Animatable詳解
在今年的Google/IO大會(huì)上,亮相了一個(gè)全新的 Android 原生 UI 開(kāi)發(fā)框架-Jetpack Compose, 與蘋(píng)果的SwiftIUI一樣,Jetpack Compose是一個(gè)聲明式的UI框架,這篇文章主要介紹了Jetpack Compose自定義動(dòng)畫(huà)與Animatable2022-10-10android實(shí)現(xiàn)圖片驗(yàn)證碼方法解析(自繪控件)
本文主要介紹了android自繪控件的應(yīng)用--實(shí)現(xiàn)圖片驗(yàn)證碼方法案例,具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01Android項(xiàng)目中引入aar包的正確方法介紹
生成aar之后下一步就是如何引用本地的aar文件,下面這篇文章主要給大家介紹了關(guān)于Android項(xiàng)目中引入aar包的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08Android 開(kāi)發(fā)隱藏標(biāo)題欄的方法總結(jié)
這篇文章主要介紹了android 開(kāi)發(fā)隱藏標(biāo)題欄的方法總結(jié)的相關(guān)資料,需要的朋友可以參考下2017-04-04Android ToolBar整合實(shí)例使用方法詳解
這篇文章主要為大家詳細(xì)介紹了Android ToolBar整合實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02Android App中ListView仿QQ實(shí)現(xiàn)滑動(dòng)刪除效果的要點(diǎn)解析
這篇文章主要介紹了Android App中ListView仿QQ實(shí)現(xiàn)滑動(dòng)刪除效果的要點(diǎn)解析,重點(diǎn)是要判斷手勢(shì)按下的位置坐標(biāo),需要的朋友可以參考下2016-04-04