[圖片上傳失敗...(image-c939db-1650550552942)]
創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站建設(shè)、成都做網(wǎng)站與策劃設(shè)計,麻城網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務涵蓋:麻城等地區(qū)。麻城做網(wǎng)站價格咨詢:18982081108
大家好,在這篇文章中,我們將學習如何添加動畫,同時從一個頁面到其他在 Flutter。我們將覆蓋不同類型的動畫和實現(xiàn)基本動畫 Flutter 使用包頁動畫過渡。
page_animation_transition
[圖片上傳失敗...(image-1c5f15-1650550552942)]
動畫在提升用戶體驗方面起著至關(guān)重要的作用,但動畫到底是什么呢?
設(shè)計語言,例如 Material,定義了在路線(或屏幕)之間轉(zhuǎn)換時的標準行為。不過,有時候,自定義屏幕之間的轉(zhuǎn)換可以使應用程序更加獨特。
在本教程中,我們將使用包頁面 page_animation_transition 來簡化在頁面上添加轉(zhuǎn)換。
使用插件探索不同的轉(zhuǎn)換
page_animation_transition
[圖片上傳失敗...(image-6b6c30-1650550552943)]
假設(shè)您正在從 PageOne 過渡到 PageTwo
以下是圖書館支持的動畫類型:
對于預定義的路由:
Navigator.pushNamed(context, '/pageTwo');
Pushnamed (context,’/pageTwo’) ;
Output:
輸出:
[圖片上傳失敗...(image-aaf4a9-1650550552943)]
輸出:
[圖片上傳失敗...(image-8bd8a1-1650550552943)]
希望這個博客能幫助你深入了解 Flutter 的轉(zhuǎn)變。謝謝閱讀!如果有任何錯誤,請在評論中讓我知道,這樣我可以改進。如果這個博客對你有幫助,就鼓掌吧!
? 貓哥
在補間動畫中,定義了開始點和結(jié)束點、時間線以及定義轉(zhuǎn)換時間和速度的曲線。然后由框架計算如何從開始點過渡到結(jié)束點。
Animation 對象,是 Flutter 動畫庫中的核心類,插入用于引導動畫的值。
Animation 對象知道當前動畫的狀態(tài)(如:動畫是否開始,停止,前進或者后退),但對屏幕上顯示的內(nèi)容一無所知。
AnimationController 對象管理著 Animation。
CurvedAnimation 將動畫定義成非線性運動的動畫。
交錯動畫由序列或重疊的動畫組成,
要創(chuàng)建交錯動畫,使用多個動畫對象,
一個AnimationController控制所有動畫。
每個動畫對象在間隔期間指定動畫。
實際開發(fā)中,我們經(jīng)常會遇到切換UI元素的場景,比如Tab切換、路由切換。為了增強用戶體驗,通常在切換時都會指定一個動畫,以使切換過程顯得平滑。
1.動畫原理:在一段時間內(nèi)快速的多次改變UI外觀,由于人眼會產(chǎn)生視覺暫留所以最終看到的就是一個連續(xù)的動畫。
UI的一次改變稱為一個動畫幀,對應一次屏幕刷新。
FPS:幀率,每秒的動畫幀數(shù)。
flutter動畫分為兩類:
常見動畫模式:
是一個抽象類,主要的功能是保存動畫的值和狀態(tài)。常用的一個Animation類是Animation double ,是一個在一段時間內(nèi)依次生成一個區(qū)間之間的值的類,可以是線性或者曲線或者其他。
可以生成除double之外的其他類型值,如:Animation Color 或 Animation Size 。
是一個動畫控制器,控制動畫的播放狀態(tài),在屏幕刷新的每一幀,就會生成一個新的值。
包含動畫的啟動forward()、停止stop() 、反向播放 reverse()等方法,在給定的時間段內(nèi)線性的生成從0.0到1.0(默認區(qū)間)的數(shù)字。
curve:描述動畫的曲線過程。
curvedAnimation:指定動畫的曲線。
常用Curve:
繼承自Animatable T ,表示的就是一個 Animation 對象的取值范圍,只需要設(shè)置開始和結(jié)束的邊界值(值也支持泛型)。 它唯一的工作就是定義輸入范圍到輸出范圍的映射。
例如,Tween可能會生成從紅到藍之間的色值,或者從0到255。
Tween.animate:返回一個Animation。
映射過程:
1). Tween.animation通過傳入 aniamtionController 獲得一個_AnimatedEvaluation 類型的 animation 對象(基類為 Animation), 并且將 aniamtionController 和 Tween 對象傳入了 _AnimatedEvaluation 對象。
2). animation.value方法即是調(diào)用 _evaluatable.evaluate(parent)方法, 而 _evaluatable 和 parent 分別為 Tween 對象和 AnimationController 對象。
3). 這里的 animation 其實就是前面的 AnimationController 對象, transform 方法里面的 animation.value則就是 AnimationController 線性生成的 0.0~1.0 直接的值。 在 lerp 方法里面我們可以看到這個 0.0~1.0 的值被映射到了 begin 和 end 范圍內(nèi)了。
接收一個TickerProvider類型的對象,它的主要職責是創(chuàng)建Ticker。
防止屏幕外動畫消耗資源。
[圖片上傳失敗...(image-115b94-1636441483468)]
過程:
回調(diào):
不使用addListener()和setState()來給widget添加動畫。
使用AnimatedWidget,將widget分離出來,創(chuàng)建一個可重用動畫的widget,AnimatedWidget中會自動調(diào)用addListener()和setState()
AnimatedModalBarrier、DecoratedBoxTransition、FadeTransition、PositionedTransition、RelativePositionedTransition、RotationTransition、ScaleTransition、SizeTransition、SlideTransition
如何渲染過渡,把渲染過程也抽象出來:
AnimatedBuilder的示例包括: BottomSheet、 PopupMenu、ProgressIndicator、RefreshIndicator、Scaffold、SnackBar、TabBar。
MaterialPageRoute:平臺風格一致的路由切換動畫
CupertinoPageRoute:左右切換風格
自定義:PageRouteBuilder
1.要創(chuàng)建交織動畫,需要使用多個動畫對象(Animation)。
2.一個AnimationController控制所有的動畫對象。
3.給每一個動畫對象指定時間間隔(Interval)
可以同時對其新、舊子元素添加顯示、隱藏動畫.
當AnimatedSwitcher的child發(fā)生變化時(類型或Key不同),舊child會執(zhí)行隱藏動畫,新child會執(zhí)行執(zhí)行顯示動畫。
希望大家支持一下,感謝