Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 通過源碼,手把手帶你學屬性動畫(一) - 相關類總覽

通過源碼,手把手帶你學屬性動畫(一) - 相關類總覽

編輯:關於Android編程

在 Android 3.0(API level 11) 之後,Google 為 Android添加了屬性動畫(Property Animation),該動畫系統是一個強大的框架,允許開發者對幾乎任何對象進行動畫。

由此可知,屬性動畫致力於為開發者提供更好的動畫解決方案。值得注意的是,屬性動畫已不再針對View設計,而是更偏向於對值進行動畫變換,因此可以操作任何對象的任意屬性

相比於補間動畫,屬性動畫解決了補間動畫移動後點擊時間留在原位的問題,且屬性動畫擴展性高、定制性強,不再局限於縮放、旋轉、透明度、平移等操作。至於二者實際的效果差距不再對比,本系列的文章重點是剖析屬性動畫。

0. 寫本系列教程的初衷

網上有關屬性動畫的教程已經很多了,有很多都講的很好。但我之所以還會去寫這系列文章,只是想從一個不同的角度去分析屬性動畫,讓更多的人認識到源碼和官方教程的重要性。同時我也會拿捏好度,不會讓讀者過度的沉溺源碼,畢竟我的文章側重初中級開發人員,這一階段適當但不過分的接觸源碼,對以後很有幫助。

本系列文章,將帶你由淺入深剖析屬性動畫。我們主要的參考資料是源碼、官方API文檔,期間會不時通過源碼簡單的分析動畫的實現原理,以了解動畫的工作機制,知其然知其所以然,這樣才能更好的掌握屬性動畫。

注:參考的源碼API等級為23,望知曉。同時建議讀者在學習時,能夠對照源碼去看,這樣能夠加深理解。

學完本系列文章,你可以自如應對開發中大多數動畫效果。只是在一些復雜、定制性高的情況下,要求我們能夠融會貫通、舉一反三,但是所涉及的內容在本文都會提到,只是講解的篇幅會根據使用頻率的高低有所不同。

廣告:對屬性動畫感興趣的,歡迎關注我的公眾號,以及時獲取最新內容。

1. API 一覽

下面開始正式學習,讓我們先先了解一下與屬性動畫相關的類,以對此屬性動畫系統一個整體的認識,這樣有利於學習後面的知識。

屬性動畫主要依靠抽象類 Animator 的支持,Animator 類位於 android.animation 包下,源碼中對 Animator 類的注釋如下:

This is the superclass for classes which provide basic support for animations which can be started, ended, and have AnimatorListeners added to them.
該類是對動畫提供基礎支持的類的父類,這些動畫可以被開始、結束,並且可以被添加動畫監聽。

那麼,與屬性動畫相關的、繼承自 Animator 的類有哪些呢?先看一下 Google API 文檔對 Animator 類結構的介紹:

Google官方API鏈接點這裡

為了方便看,我截了一張圖:

Animator的API文檔<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPjxjb2RlPjxjb2RlPr/J0tS/tLP2o6xBbmltYXRvcrXE1rG909fTwODT0CBBbmltYXRvclNldCC6zSBWYWx1ZUFuaW1hdG9yo6y85L3T19PA4NPQIE9iamVjdEFuaW1hdG9yILrNIFRpbWVBbmltYXRvcqGjzqrBy7j81rG527XEse3KvrzMs9C52M+1o6zO0tPWu63By9K7uPazrLy2vPK1pbXEVU1MzbyjujwvY29kZT48L2NvZGU+PC9wPg0KPHA+PGNvZGU+PGNvZGU+PGltZyBhbHQ9"簡單的UML圖" src="/uploadfile/Collfiles/20160916/201609160943421657.png" title="\" />

這樣就比較直觀了,接下來,我們就來挨個簡單介紹一下各個類的作用。

2. API 詳解

以下對各個類的介紹,大部分翻譯自官方文檔,這樣才能保證准確性。同時,因水平有限,若有錯誤之處還望見諒。標記為“略”的表示不是後面重點介紹的對象。

2.1 Animator(略)

該類是對動畫提供基礎支持的類的父類,這些動畫可以被開始、結束,並且可以被添加動畫監聽。我們平時很少與這個類直接打交道,更多的是用到其子類(ValueAnimator、ObjectAnimator等),以及該類的內部靜態接口。

public static interface AnimatorListener{
    //...
}

該接口是一個動畫監聽器,負責接收動畫過程中的通知,這些通知標識了與動畫相關的事件。這些事件通過接口的回調方法公開出來,我簡單翻譯整理了一下,如下所示:

public static interface AnimatorListener {
    /**
     * 通知動畫開始
     */
    void onAnimationStart(Animator animation);
    /**
     * 通知動畫結束
     * 當動畫的重復次數為INFINITE(無數次)時,該回調方法將不會被調用
     */
    void onAnimationEnd(Animator animation);
    /**
     * 通知當動畫取消
     * 同上,當動畫的重復次數為INFINITE(無數次)時,該回調方法將不會被調用
     */
    void onAnimationCancel(Animator animation);
    /**
     * 通知動畫重復
     */
    void onAnimationRepeat(Animator animation);
}

有關動畫監聽的使用,將在後續文章中更新。

2.2 ValueAnimator

class ValueAnimator extends Animator

ValueAnimator 繼承自 Animator,其可以幫助我們對值進行動畫操作。

源碼中有關該類的注釋翻譯過來就是:

本類為運行動畫提供了一個簡單的計時引擎(timing engine),用來計算動畫完成值(animated values)並設置到目標對象上。

有關該類的注釋並沒有提及 View ,因為其僅針對Value(值)進行動畫變換。盡管如此,它卻是屬性動畫的核心類,後面要介紹的 ObjectAnimator 就是在 ValueAnimator 基礎上進行的二次封裝。

2.3 ObjectAnimator

class ObjectAnimator extends ValueAnimator

ObjectAnimator 繼承自 ValueAnimator,支持對目標對象的屬性進行動畫(animating properties on target objects),但正如上面所說,其實現動畫的核心功能是由 ValueAnimator 支持的。

使用時,通過參數定義需要進行動畫操作的目標對象,以及動畫所針對的屬性名稱。對於屬性名稱,我們要確保對象內部存在相應的 getter 和 setter 方法,這樣動畫才可以在必要時調用以對屬性進行動畫。

2.4 TimeAnimator(略)

class TimeAnimator extends ValueAnimator

TimeAnimator 與 ObjectAnimator一樣,都繼承自 Animator。該類提供了一個簡單的回調機制,去監聽當前動畫與系統中其他動畫是否同步。該類在實際開發中很少會用,後面也不會再講解,感興趣的可以自己看一下。

2.5 AnimatorSet

class AnimatorSet extends Animator

AnimatorSet 主要用來支持組合動畫,其可以幫助我們在特定的順序下播放一組 Animator 動畫(plays a set of Animator objects in the specified order)。動畫可以被設置為同時播放、異步播放或者在特定的延時之後播放。

AnimatorSet 操作的對象為 Animator,而 ValueAnimator 和 ObjectAnimator 都是 Animator 的子類,所以都可以借助 AnimatorSet 實現組合動畫。

我們可以借助該類定制出許多炫酷的動畫效果,要問有多炫酷,我只能說局限於你的想象力!

3. 總結

本文就到這兒了,主要就是系統的看了一下與屬性動畫相關的一些類。如果你接觸過屬性動畫,你可能會覺得太簡單了,但是對於一些初學者,簡單的講一些原理性的東西,對於後面的理解十分有幫助。

下面回顧一下本文的內容:

本系列文章的主要目標,以及我們最終能達到什麼樣的一個水平。 從Animator出發,了解了與熟悉動畫相關的幾個類,並附上了UML圖,你應該對圖中的層級結構了然於心; 著重介紹了一下每個類的作用,以及動畫監聽器AnimatorListener。

通過本文,我們認識了與屬性動畫相關的幾個類,但我們關注的重點只有 ValueAnimator、ObjectAnimator 和 AnimatorSet。當然還有一些輔助屬性動畫的類沒有提及,在後續實戰中會提及,並延伸一些屬性動畫的高級用法,比如插值器、估值器等,以及如何讓自定義它們實現系統沒有提供的效果。

4. 下篇預告

講解 ValueAnimator 和 ObjectAnimator的使用,以及使用動畫監聽器AnimatorListener監聽動畫的過程,具體內容會根據篇幅決定,過完節回來及時更新,敬請期待。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved