Android 和 iOS 提供的動畫效果是如何繪製出來的?

時間 2021-05-31 08:45:21

1樓:

可以,不過系統的會考慮全面一點。

比如丟幀,如果自己寫,20毫秒變化一點,可有時計算超時,會感覺明顯卡頓。

安卓有objectanimal,就是定義乙個變數,單位時間改變值,你只需要考慮值對應的圖就行了。

-搬冰淇淋的安卓程式猿。

2樓:王旭競

複雜了。頂層的封裝不說了,比如css的動畫,這種可以理解為編寫動畫指令碼。動畫分影象變形和顯示兩部分,影象變形,高層一點可以用opengl、directx、sdl來處理,再往底層就是這幾個庫用的一些圖形處理演算法。

影象變形完畢,要從記憶體裡提交給顯示卡驅動。這就涉及到作業系統的圖形系統,顯示卡驅動是統一註冊到圖形系統的。所以資料提交給圖形系統,圖形系統呼叫顯示卡驅動,從顯示器裡展現出來。

大致上這樣。實際上,很多影象變形處理都不是cpu處理的,由opengl等間接交給顯示卡驅動處理。或程式直接交給顯示卡驅動或顯示卡gpu處理。

所以通常程式設計師只需要學習opengl這一層就可以,其他部分的研究人員叫驅動開發、圖形系統開發、圖形演算法工程師等等。

3樓:Cyandev

由於 iOS 的閉源,總結一句話就是 Core Animation,所以我來簡單談談 Android 吧。

首先說動畫效果,所謂的動畫效果就是乙個屬性(屬性組)的數值隨時間從乙個值變化到另乙個值得過程。Android 目前提供了兩個機制來實現動畫:

一種是比較古老的 Animation 機制,對應的也是 Animation 類和它的子類,但是這些類並不負責排程動畫。什麼意思呢,動畫的執行需要讓數值隨著時間變化,怎麼隨時間變化?通常來說我們需要乙個 Timer,但是 Animation 機制沒有使用所謂的 Timer,而採用了自重新整理的方式,所謂自重新整理就是當一幀繪製完的時候馬上再計畫繪製下一幀,直到動畫到達終點。

具體的邏輯在View#draw(Canvas canvas, ViewGroup parent, long drawingTime)這個方法中。Animation 類及子類的作用就是根據乙個時間,計算出對應的屬性值,然後設定到 View 上。

另外一種是在 Android 3.0 之後出現的 Animator,它的原理就有點類似 Timer 了。上面說到的 Animation 有侷限性,就是它只能控制極少數的 View 屬性,有的時候你想動畫一些其他屬性就不行了。

Animator 則可以直接通過設定 listener 和 updater,靈活控制各種屬性值。由於不依託系統框架,Animator 也有第三方相容庫存在,便於在 Android 2.x 下使用。

然而 Android 4.1 為了實現更高的渲染效率和效果(所謂的 Project Butter),引入了 Choreographer 這個東西,關於它我這裡就不展開說了,簡單來講就是引入了 VSync 技術,有關 VSync 的概念和好處大家可以自行 Google。原生 Animator 自動得到 Choreographer 的加持,而 Android 2.

x 就不行了,只能用老的計時器方案。

關於 alpha、transform 之類的屬性是如何實現的,這個說簡單也不簡單,說複雜也不複雜,實際上很多 2D 圖形渲染庫都能很輕易實現這些。只不過 Android 5.0 之後引入 RenderNode 的機制,每個單一的 View 實際都是 RenderNode-backing 的一層皮,實際的渲染內容是包含在 RenderNode 中的,這也就是為什麼 Android 5.

0 才能實現陰影(Elevation 或 Z 軸)、檢視裁切等高階特性。Canvas 在 Android 5.0 之後直接向 DisplayList 中繪製,也就是記錄下來繪製指令,然後將這些一併送到渲染服務中進行合成,以 View 為單位的 alpha、transform 可以得到硬體加速(OpenGL、Vulkan)的支援,而面向 Bitmap(或舊版本 Android 的 View)的 Canvas 繪製有透明度的東西就是純 CPU 計算了,由 Skia 庫實現演算法。

其實上面說的每一點拿出來都相當複雜和系統,我這裡也是簡單拋磚引玉一下,希望對題主有一定幫助。

大家認為塞班和Android和iOS相比主要的缺點是什麼?

周德強 塞班的設計理念就完全沒有考慮到要把手機作成電腦,一切都是從手機的角度出發,所以很笨,轉型也很難。android單單從智慧型機角度來說,並不比ios差多少,但是ios的生態系統不是android能比的,再加上很多人性化的設定蘋果都是預先使用了專利的,android不能使用,所以有些時候從操控的...

iOS和android最大的區別在哪呢?

蘆瑞彩 我覺得IOS和Android的最大區別在於,前者更像是乙個優秀的玩具,而後者則是乙個正在不斷進步的生產率工具。具體可以體現在下面幾個方面。1.應用生態的偏重 2019領先應用商店中可用的應用數量 2.操作邏輯 拿到一台新裝置時 新裝置指平板備用機之類的不考慮手機資料直接轉移的情況 在Andr...

Android 和 iOS 開發哪個成本低?

梁晨 個人認為,開發成本是跟要開發的應用型別相關的。如果說開發遊戲,普通上層應用,那兩個平台的開發成本個人覺得還是IOS的低一些,畢竟不需要有那麼多的機型去適配。但是如果開發涉及到系統底層的應用的情況,那個人認為還是android的成本要低。原因我覺得就不用多說了。 梁永浩 都是做c語言為主的話,a...