文主要介紹了動(dòng)畫的原理相關(guān)概念,對(duì)其他平臺(tái)的動(dòng)畫做了一個(gè)簡(jiǎn)要的梳理,并簡(jiǎn)要的介紹了Flutter動(dòng)畫的一些知識(shí)。
1. 動(dòng)畫介紹
動(dòng)畫對(duì)于App來說,非常的重要。很多App,正是因?yàn)橛辛藙?dòng)畫,所以才會(huì)覺得炫酷。移動(dòng)端的動(dòng)畫庫有非常的多,例如iOS上的Pop、web端的animate.css、Android端的AndroidViewAnimations、跨平臺(tái)的Lottie等。正是因?yàn)橛辛诉@些封裝好的動(dòng)畫庫,我們制作酷炫的效果方便了不少。當(dāng)然了,這些庫都是基于各平臺(tái)基礎(chǔ)的動(dòng)畫API實(shí)現(xiàn)的,筆者今天要聊的,也就是基礎(chǔ)的動(dòng)畫及背后的原理。
1.1 動(dòng)畫的本質(zhì)
動(dòng)畫顧名思義,就是動(dòng)起來的畫面。畫面為什么會(huì)動(dòng)起來了呢?在回答這個(gè)問題之前,我們先引入一個(gè)概念。
人眼在觀察景物時(shí),光信號(hào)傳入大腦神經(jīng),需經(jīng)過一段短暫的時(shí)間,光的作用結(jié)束后,視覺形象并不立即消失,這種殘留的視覺稱“后像”,視覺的這一現(xiàn)象則被稱為“視覺暫留”。
視覺暫留被認(rèn)為是電影的最重要的一個(gè)理論基礎(chǔ)。我們看到的動(dòng)畫,實(shí)際上是一連串的畫面組成,只不過是以很快的速度去播放,人眼在下一個(gè)畫面出來之前,還殘留著上一個(gè)畫面的視覺,看起來就像是在沒有間隔的播放這一系列的圖片,也就是我們稱之為的動(dòng)畫。
1.2 相關(guān)概念
動(dòng)畫會(huì)有很多相關(guān)的概念,理解了這些概念,會(huì)對(duì)實(shí)際的使用更有幫助。
1.2.1 幀
剛才在介紹動(dòng)畫本質(zhì)的時(shí)候,用到了畫面這個(gè)詞匯,只是方便讀者去理解,這個(gè)畫面,在學(xué)術(shù)上叫做幀。
幀就是影像動(dòng)畫中最小單位的單幅影像畫面,一幀就是一副靜止的畫面。
幀里面又分為關(guān)鍵幀和過渡幀,這兩概念是理解一些動(dòng)畫的基礎(chǔ),例如Android中的補(bǔ)間動(dòng)畫。在一些場(chǎng)景中,我們可能不會(huì)給出一個(gè)動(dòng)畫的所有幀,所以將幀分成關(guān)鍵幀和過渡幀。關(guān)鍵幀可以理解為一個(gè)動(dòng)畫的起始狀態(tài),而過渡幀則是系統(tǒng)自動(dòng)完成插在關(guān)鍵幀之間的部分。
我們知道Android中的補(bǔ)間動(dòng)畫,基礎(chǔ)的有四種類型,平移、縮放、旋轉(zhuǎn)、透明度。而我們?cè)O(shè)置動(dòng)畫的時(shí)候,通常只是設(shè)置起始的狀態(tài),也就是關(guān)鍵幀,中間過程其實(shí)我們并不需要去考慮,如果關(guān)注動(dòng)畫速率的話,頂多加一個(gè)差值器去控制,但是中間生成的幀我們并沒有提供。
系統(tǒng)為什么能夠補(bǔ)齊過渡幀呢?我們看下這四種基本的動(dòng)畫類型,給定起始狀態(tài),中間狀態(tài)我們其實(shí)是可以通過計(jì)算推演出來的,這也是系統(tǒng)為什么能夠補(bǔ)齊的原因。
是不是只有這四種才可以通過系統(tǒng)填補(bǔ)過渡幀呢?顯然不是的,例如一個(gè)跳躍前進(jìn)的動(dòng)畫,添加一些限制條件,就可以推演出中間的狀態(tài)。系統(tǒng)提供的只是比較常見的四種,并不是說只有這四種,而是絕大部分動(dòng)畫都可以通過這四種組合實(shí)現(xiàn)。當(dāng)然了,肯定也是有實(shí)現(xiàn)不了的,這個(gè)時(shí)候有一個(gè)辦法就是通過canvas畫出來。
另外再插一嘴,Android系統(tǒng)提供的四種動(dòng)畫操作,也是變換矩陣是四維的原因,具體的就不多說了,之前文章也有介紹過。
最后一嘴,此處講解幀的概念,拿了很多Android相關(guān)的知識(shí)去講解,只是希望讀者能夠通過一些已知的概念,去理解一些未知的。動(dòng)畫的原理都一樣,具體到某個(gè)平臺(tái),可能頂多就是實(shí)現(xiàn)或者叫法不一樣罷了。
1.2.2 幀數(shù)與FPS
小時(shí)候很多人都玩過書角動(dòng)畫。在書或者本子的一角,每一頁都畫上一個(gè)畫面,然后撥書角,不同速度撥,動(dòng)畫的感受不一樣,撥的越快,動(dòng)畫越流暢。這是為什么呢?這就牽扯到幀數(shù)與FPS了。
幀數(shù),幀的數(shù)量。FPS(Frame per Second),即每秒顯示幀數(shù)。
這兩個(gè)概念,主要是FPS有什么作用呢?這是因?yàn)槿搜凵順?gòu)造的原因。人眼殘留鏡像的時(shí)間是有限的,如果過了這個(gè)時(shí)間,下一幀還沒有變化,就會(huì)感覺不流暢。但也不是幀數(shù)越大越好,畢竟人眼也是有極限的。
1.2.3 插值器
如果動(dòng)畫播放一直都是這種勻速的進(jìn)行,那表現(xiàn)形式就太單一了。那如何實(shí)現(xiàn)非線性的動(dòng)畫效果呢,這個(gè)時(shí)候就需要用到插值器了。
插值器其實(shí)并不復(fù)雜,就是一個(gè)數(shù)學(xué)函數(shù),設(shè)置屬性值從初始值過渡到結(jié)束值的變化規(guī)律。每個(gè)平臺(tái)都有自己定義好的一系列插值器,可以供開發(fā)者選擇使用,也提供自定義的接口,本質(zhì)上是一個(gè)貝塞爾函數(shù)。
一個(gè)勻速插值器如下:
屬性值百分比=時(shí)間百分比
1.3 如何實(shí)現(xiàn)
動(dòng)畫的基本原理和一些基本概念都介紹了一下,現(xiàn)在來聊一下動(dòng)畫的實(shí)現(xiàn)。
先拋開系統(tǒng)層級(jí)的各種渲染優(yōu)化,也僅僅是以補(bǔ)間動(dòng)畫為例,假設(shè)以現(xiàn)有的移動(dòng)平臺(tái)基礎(chǔ)上,去實(shí)現(xiàn)一套簡(jiǎn)單的動(dòng)畫框架,該如何去實(shí)現(xiàn)呢?
以Android的為例,要實(shí)現(xiàn)平移、縮放、旋轉(zhuǎn)、透明度這四種基礎(chǔ)的補(bǔ)間動(dòng)畫,可以看到,這些都是基于某個(gè)屬性的動(dòng)畫,平移是基于point、縮放是基于scale、旋轉(zhuǎn)是基于angle、透明度是基于alpha。
結(jié)合插值器,提煉出一個(gè)通用的動(dòng)畫類,這個(gè)類的作用是根據(jù)插值器,得到視圖某個(gè)時(shí)間點(diǎn)的屬性變化的狀態(tài)。
既然各個(gè)時(shí)間點(diǎn)的狀態(tài)已經(jīng)有了,剩下來的就是讓各個(gè)狀態(tài)渲染出來。底層的機(jī)制在此處不去討論,這個(gè)地方就需要一個(gè)定時(shí)器,定時(shí)器的作用是每隔一段時(shí)間就把素材渲染到屏幕上。
至此,一個(gè)簡(jiǎn)易的動(dòng)畫框架就出來了。如果對(duì)各平臺(tái)比較了解的話,就知道我說的是視圖動(dòng)畫,真正的動(dòng)畫引擎不是這么簡(jiǎn)單,涉及到的技術(shù)也比較復(fù)雜,但是大體的思想不會(huì)有錯(cuò),不管是哪種動(dòng)畫,都是跟時(shí)間相關(guān)的幀序列,只是實(shí)現(xiàn)方式不同。
這也是筆者為什么花這么多篇幅去介紹動(dòng)畫相關(guān)的概念,知道一些底層原理后,不管什么平臺(tái),怎么去實(shí)現(xiàn),底層的思想肯定都差不多,只是實(shí)現(xiàn)上的不同。
2. 其他平臺(tái)的動(dòng)畫
Flutter動(dòng)畫,與Android、iOS等平臺(tái)對(duì)比,其實(shí)本身并沒有什么特別之處。基本的原理是一樣的,只是提供的種類以及實(shí)現(xiàn)的方式不同罷了。
2.1 Android動(dòng)畫
Android的動(dòng)畫,大的分類有兩種:
視圖動(dòng)畫又可以分為兩類:
這之間的差別是什么呢?它們只有實(shí)現(xiàn)上的差別
可以看出Android的動(dòng)畫分類還是比較明晰的。
2.2 iOS動(dòng)畫
iOS很久沒弄了,在這里也簡(jiǎn)單說下,不對(duì)的話還請(qǐng)各位指正。
顯式動(dòng)畫又可以分為兩類:
這些動(dòng)畫類別之間的差別是什么呢?
通過動(dòng)畫這一塊兒,可以看出iOS的分類其實(shí)是比較的模糊的,有一些歷史包袱。
2.3 css動(dòng)畫
css動(dòng)畫大體上有兩種:
web中的動(dòng)畫分類簡(jiǎn)單的多了
計(jì)社區(qū)的免費(fèi)資源可以為不同的電子商務(wù)網(wǎng)站增加價(jià)值。以下是2019年秋季發(fā)布的新Web工具和設(shè)計(jì)元素,其中包括設(shè)計(jì)師和開發(fā)人員的應(yīng)用程序,編碼資源、顏色工具、字體等等。所有這些工具都是免費(fèi)的,但也有一些工具提供了付費(fèi)版本。
免費(fèi)設(shè)計(jì)工具
1、Art of Symbols是Emotive Brand咨詢公司設(shè)計(jì)團(tuán)隊(duì)對(duì)符號(hào)的探索成果。Art of Symbols是“100DayProject”(100天計(jì)劃)的一部分,在這個(gè)計(jì)劃中人們承諾用100天的時(shí)間探索自己的創(chuàng)造力。這個(gè)項(xiàng)目的重點(diǎn)是古代符號(hào)如何影響當(dāng)代品牌設(shè)計(jì)。
2、Lordicon提供了一套50個(gè)免費(fèi)的動(dòng)畫圖標(biāo)為網(wǎng)站添加設(shè)計(jì)。這些圖標(biāo)是可擴(kuò)展的、可定制的,并由Lottie(適用于Android和iOS的React JavaScript庫)提供支持。整套軟件包括500多個(gè)圖標(biāo),并提供免費(fèi)更新,售價(jià)99美元。
3、Spectrum是Adobe的新設(shè)計(jì)系統(tǒng),提供組件和工具幫助產(chǎn)品團(tuán)隊(duì)更有效地工作,并使Adobe的應(yīng)用程序更具凝聚力。可下載用戶界面工具包、Spectrum字體系列和圖標(biāo)。使用Spectrum CSS,這是Adobe設(shè)計(jì)系統(tǒng)的開源實(shí)現(xiàn)。
4、Izmir是一個(gè)免費(fèi)的迷你CSS庫,可以快速創(chuàng)建有吸引力的圖像懸停元素。將CSS庫加載到項(xiàng)目中,并將元素標(biāo)記與所選的樣式類結(jié)合起來,可以構(gòu)建自定義圖像懸停效果。
5、Hexometer Website Hygiene Attendant會(huì)定期掃描網(wǎng)站上大約2800個(gè)數(shù)據(jù)點(diǎn),以確保這些數(shù)字資產(chǎn)能夠正常運(yùn)行。它還提供了有關(guān)如何改善網(wǎng)站健康狀況以提高在線可見度和性能的提示和技巧。免費(fèi)版本每周可掃描一個(gè)站點(diǎn)。付費(fèi)版本每月8.25美元起。
6、HTTP Mock是HTTP Toolkit中的新工具,HTTP Toolkit是用于調(diào)試、測(cè)試和使用HTTP進(jìn)行構(gòu)建的一組開源工具。可捕獲HTTP進(jìn)行搜索、瀏覽和檢查。實(shí)時(shí)編輯請(qǐng)求和響應(yīng),以測(cè)試API和客戶端。可模擬HTTP(S)錯(cuò)誤、超時(shí)和連接失敗。付費(fèi)版本為1400多個(gè)API提供深入的bug工具、驗(yàn)證和文檔。
7、Facebook Design Devices是一組流行設(shè)備的圖片和草圖文件。每個(gè)文件都帶有設(shè)備的位圖(帶陰影和不帶陰影)以及該設(shè)備的原始Sketch文件。
8、Claro是一款全新的在線待辦事項(xiàng)應(yīng)用程序,設(shè)計(jì)是無干擾的。可一目了然地查看你的工作事項(xiàng)。今天尚未完成的待辦事項(xiàng)會(huì)延續(xù)到第二天。拖放待辦事項(xiàng),單擊以完成操作,然后拖動(dòng)到垃圾箱進(jìn)行刪除。注冊(cè)測(cè)試版,并邀請(qǐng)朋友可獲得免費(fèi)的一年使用時(shí)長(zhǎng)。
9、Fresh Folk是人物與對(duì)象的插圖庫。每個(gè)角色都有一系列的姿勢(shì)、服裝和膚色。可創(chuàng)建包含43個(gè)對(duì)象的多種場(chǎng)景。所有圖像均可免費(fèi)用于商業(yè)或個(gè)人用途。
10、Fliplet用于構(gòu)建自定義應(yīng)用程序的預(yù)制工具。預(yù)制應(yīng)用程序結(jié)合了拖放編輯器和可定制的開源組件。可使用現(xiàn)有的預(yù)制組件庫或創(chuàng)建自己的庫。為免費(fèi)帳戶提供一個(gè)實(shí)時(shí)網(wǎng)絡(luò)應(yīng)用程序。
11、Mozilla Developer視頻頻道提供的視頻可幫助Web設(shè)計(jì)師、開發(fā)人員或制作網(wǎng)站或應(yīng)用程序有關(guān)的其他人員。探索設(shè)計(jì)技術(shù),包括CSS樣式和針對(duì)Web專業(yè)人員的瀏覽器工具的Firefox系列。
12、Quark是一款軟件工具,可幫助創(chuàng)建用HTML、CSS和JavaScript格式的項(xiàng)目,并具有類似于桌面應(yīng)用程序的功能。Quark建立在Electron框架之上。Quark簡(jiǎn)單,易于學(xué)習(xí),任何有基本編程技能的人都可以使用。
13、8b是一個(gè)免費(fèi)、簡(jiǎn)單的在線網(wǎng)站構(gòu)建器,用于創(chuàng)建針對(duì)移動(dòng)設(shè)備優(yōu)化且對(duì)谷歌友好的網(wǎng)站。免費(fèi)版本可使用8b.io子網(wǎng)域,付費(fèi)版每月1.58美元起。
14、Doka.Photo是一個(gè)簡(jiǎn)單免費(fèi)的在線圖像編輯器,由Doka.js提供支持。可快速編輯和裁剪圖像、應(yīng)用過濾器、旋轉(zhuǎn)、調(diào)整大小、翻轉(zhuǎn)、調(diào)整顏色,并添加標(biāo)記。
15、Iubenda條款和條件生成器可輕松生成和管理專業(yè)的條款、條件文檔,該文檔可從100多個(gè)條款中進(jìn)行定制,并由8種語言提供,由國(guó)際法律團(tuán)隊(duì)起草,并與主要的國(guó)際法規(guī)保持一致。
16、Bootstrap模板和主題是由Designmodo提供的免費(fèi)Bootstrap模板集合,可使用啟動(dòng)應(yīng)用程序進(jìn)行下載和編輯。可選擇主題以構(gòu)建電子商務(wù)網(wǎng)站,登錄頁面,演示文稿或SaaS應(yīng)用。
17、CopyPalette是用于生成一致的單色調(diào)色板工具。可創(chuàng)建不同的色調(diào)和深度色調(diào),單擊即可導(dǎo)出調(diào)色板。
免費(fèi)字體
18、Recursive是一種五軸可變字體,可大大提高多功能性、控制力和性能。可從一系列預(yù)定義的樣式中進(jìn)行選擇,或者為每個(gè)軸準(zhǔn)確輸入所需的內(nèi)容:比例、等寬線、粗細(xì)、傾斜和斜體。
19、Bridamount是一款平滑時(shí)尚的手寫字體工具。使用它可以為設(shè)計(jì)項(xiàng)目添加耀斑。
20、Krisha是一種粗體的全大寫字體,來自品牌設(shè)計(jì)師和印刷商Daler Mukhiddinov。可為你的產(chǎn)品或項(xiàng)目創(chuàng)建令人印象深刻的標(biāo)題。
21、Leon Sans是由Jongmin Kim編寫的幾何無襯線字體。它允許用戶動(dòng)態(tài)更改字體粗細(xì),并在HTML5的Canvas元素中創(chuàng)建自定義動(dòng)畫、效果和形狀。
22、Grifter是一款干凈自信的字體工具,尤其是針對(duì)粗體。使用它可以添加現(xiàn)代的極簡(jiǎn)風(fēng)格并具有強(qiáng)烈的基調(diào)。粗體版本可免費(fèi)下載。
23、Camar是一款藝術(shù)裝飾風(fēng)格的復(fù)古字體,起初是為一組明信片設(shè)計(jì)的。它包括了187個(gè)用于商業(yè)廣告、橫幅、標(biāo)題、標(biāo)志和商標(biāo)的符號(hào)。
(來源:海外賣家兩三事)
以上內(nèi)容屬作者個(gè)人觀點(diǎn),不代表雨果網(wǎng)立場(chǎng)!本文經(jīng)原作者獨(dú)家授權(quán)轉(zhuǎn)載,轉(zhuǎn)載需經(jīng)雨果網(wǎng)授權(quán)同意。
擊右上方紅色按鈕關(guān)注“web秀”,讓你真正秀起來
“犸良” 是一款基于 Lottie 的動(dòng)效設(shè)計(jì)平臺(tái)。能夠快速生成設(shè)計(jì)師想要的動(dòng)態(tài)效果,并交付給開發(fā),極大地提高了設(shè)計(jì)效率和設(shè)計(jì)還原度。作為一站式動(dòng)效制作平臺(tái),通過海量的動(dòng)效素材以及可視化編輯能力,幫助零基礎(chǔ)的用戶輕松完成動(dòng)效制作。
上面說到了 Lottie ,那 Lottie 你了解嘛?
能夠解析渲染通過 AE 上的 Bodymovin 插件將 AE 中制作好的動(dòng)畫導(dǎo)出成的 json 文件 (1)、數(shù)據(jù)源多樣性—可從assets,sdcard,網(wǎng)絡(luò)加載動(dòng)畫資源,動(dòng)態(tài)更新 (2)、跨平臺(tái)—設(shè)計(jì)稿導(dǎo)出一份動(dòng)畫描述文件,android,ios,react native通用
Lottie動(dòng)畫Json結(jié)構(gòu) 分為4層:
ok,回歸正題。
有了 Lottie 的支撐,犸良支持全平臺(tái) iOS、Android、H5、小程序。無論是營(yíng)銷展位、活動(dòng)頁面、空狀態(tài)還是產(chǎn)品icon。犸良編輯器對(duì)接投放平臺(tái),一站式完成動(dòng)效創(chuàng)意制作和投放。
“我”就是這么強(qiáng)大!!!
相信大家一定急于知道,犸良 如何使用?其實(shí)也簡(jiǎn)單。
我們來到犸良 首頁,有很多個(gè)按鈕“創(chuàng)建動(dòng)畫”,可以點(diǎn)擊,我們只需要登錄支付寶賬號(hào)即可。
基于模版直接制作
1、選擇模版
2、從動(dòng)畫倉(cāng)庫選擇動(dòng)畫進(jìn)行當(dāng)前動(dòng)畫的替換
3、通過替換圖片或修改顏色來自定義動(dòng)畫
4、自定義模板文字內(nèi)容
5、選擇模板背景圖片
6、完成編輯選擇是否帶背景(banner模版默認(rèn)帶背景)
7、導(dǎo)出成功下載 json
有了這個(gè)JSON文件,我們?nèi)绻褂茫肯旅嬷饕v講web前端如何使用,給出簡(jiǎn)單示例。
我們?cè)谛枰捻撁嬉胠ottie.js文件。
<script src="js/lottie.js" type="text/javascript"></script> <script> lottie.loadAnimation({ container: element, // 動(dòng)畫的dom元素 renderer: 'svg', // 設(shè)置渲染器(svg/canvas/html) loop: true, // 是否循環(huán)播放 autoplay: true, // 是否自動(dòng)播放 path: 'data.json' // 動(dòng)畫json文件路徑 }); </script>
lottie.loadAnimation還提供,播放、暫停、停止等事件。
然后對(duì)Vue鐘情的小伙伴,也可以來試試vue中如果使用lottie?
如上代碼事件可以控制動(dòng)畫。
npm install --save vue-lottie
<template> <div id="app"> <lottie :options="defaultOptions" :height="400" :width="400" v-on:animCreated="handleAnimation" /> </div> </template> <script> import Lottie from './lottie.vue'; import * as animationData from './assets/pinjump.json'; export default { name: 'app', components: { 'lottie': Lottie }, data() { return { defaultOptions: { animationData: animationData }, animationSpeed: 1 } }, methods: { handleAnimation: function (anim) { this.anim=anim; }, stop: function () { this.anim.stop(); }, play: function () { this.anim.play(); }, pause: function () { this.anim.pause(); }, onSpeedChange: function () { this.anim.setSpeed(this.animationSpeed); } } } </script>
如上代碼事件可以控制動(dòng)畫。
有了lottie,前端再?gòu)?fù)雜的動(dòng)畫只需要有設(shè)計(jì)師也是可以搞定的,而且不用費(fèi)時(shí)費(fèi)力的寫CSS了。設(shè)計(jì)師小伙伴們可以去好好學(xué)習(xí)一下,相信這也是未來的方向,畢竟阿里在做,前途應(yīng)該還可以的。
喜歡小編或者覺得小編文章對(duì)你有幫助的,可以點(diǎn)擊一波關(guān)注哦!
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。