<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
寫了一篇基礎的效能優化的內容,繼續我們的動畫相關的介紹。今天的主角是英雄 —— Hero 元件。Hero 元件非常適合從列表、概覽頁切換到詳情頁轉場動畫場合。因為可以將兩個頁面的元件串起來動畫,體驗上會覺得整個操作的連貫性非常好。下面是我們這篇要做的一個效果。
螢幕錄製2021-11-09 下午9.39.49.gif
Hero 本質是是在不同的路由頁面做了一箇中轉層,然後通過動畫完成過渡,下面用4張圖是官方演示的過程。
動畫開始前,會準備一個空的遮罩層(Overlay)。此時目標路由頁面還沒生成。
轉場前
t = 0.0,即動畫開始時,源頁面已經從螢幕消失,遮罩層出現在螢幕上,此時目標路由頁面已經構建好,並且在遮罩層下方不可見。但此時 Flutter 渲染引擎已經計算出從遮罩層到目標路由頁面的動畫路徑。
起始階段
動畫過程中,英雄飛起來,逐步飛到目標頁面。使用的是Tween<Rect>
方式更改外形和位置,預設是使用 MaterialRectArcTween
物件完成動畫。
飛行過程
動畫結束:遮罩層消失,只剩下目標路由頁面。而源頁面恢復到它對應的路由狀態(以便返回時使用逆向的動畫)。
動畫結束
下面來看我們本篇動畫效果的實現。對於 Hero 最簡單的應用,就是前後兩個路由頁面的 Hero 元件使用相同的 tag
標識,然後所有動畫都交給 Hero 來完成了 —— 果然是超級英雄,啥都不用我們管!當然,為了使用者體驗,前後兩個頁面的元件最好是具有相同的內容(比如圖片),然後如果元件樹結構是一致的話效果更好。
我們這個範例的第一個頁面就是兩張小尺寸的圖片,這裡的關鍵是 Hero 元件的 tag
標籤,兩張圖片使用了不同的 tag
,這是因為同一個頁面的多個 Hero 不能共用 tag 。
Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Hero 基礎動畫'), brightness: Brightness.dark, ), body: Center( child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, crossAxisAlignment: CrossAxisAlignment.center, children: [ Hero( tag: 'beauty1', child: RoundImage( onTap: () { Navigator.of(context).push( MaterialPageRoute( builder: (context) => HeroDetail( tag: 'beauty1', assetImageName: 'images/beauty.jpeg', ), ), ); }, assetImageName: 'images/beauty.jpeg', imageSize: 80.0, ), ), // 省略圖片2 ], ), ), ); }
詳情頁面只有一個居中的圖片,也是用的 Hero 元件。只是為了和源頁面一致,這裡的 tag
,圖片資源都是由源頁面傳遞進來。
class HeroDetail extends StatelessWidget { final String tag; final String assetImageName; const HeroDetail({Key? key, required this.tag, required this.assetImageName}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Hero 基礎動畫詳情'), brightness: Brightness.dark, ), body: Center( child: SizedBox( width: 200, height: 200, child: Hero( tag: this.tag, child: RoundImage( onTap: () { Navigator.of(context).pop(); }, assetImageName: this.assetImageName, imageSize: 200.0, ), ), ), ), ); } }
這樣就完成了我們前面的轉場動畫效果,原始碼已上傳至:動畫相關原始碼。怎麼樣?有了 Hero之後,是不是感覺英雄救場一樣,讓你的轉場輕鬆多了!
本篇介紹了 Hero 動畫的基本過程和基礎範例。藉助 Hero,對於我們很多場景可以讓轉場效果更好,比如說從商品列表切換到商品詳情,從資訊列表到資訊詳情。都可以給使用者帶來更好的體驗。
以上就是Android Flutter實現頁面切換轉場動畫效果的詳細內容,更多關於Android Flutter頁面切換轉場動畫的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45