Android 屬性動畫:屬性動畫 總結&攻略
轉載:http://blog.csdn.net/carson_ho/article/details/72909894
更多內容請參考: 1. 屬性動畫1:基礎知識和ValueAnimator:http://blog.csdn.net/wangxiaocheng16/article/details/73951049 http://blog.csdn.net/wangxiaocheng16/article/details/74202424前言
- 動畫的使用 是
Android
開發中常用的知識 - 本文將詳細介紹
Android
動畫中 屬性動畫的原理 & 使用
目錄
1. 屬性動畫出現的原因
- 屬性動畫(
Property Animation
)是在Android 3.0
(API 11
)後才提供的一種全新動畫模式 - 那麼為什麼要提供屬性動畫(
Property Animation
)?
1.1 背景
實現動畫效果在Android
開發中非常常見,因此Android
系統一開始就提供了兩種實現動畫的方式:
- 逐幀動畫(
Frame Animation
) - 補間動畫(
Tweened animation
)
1.2 問題
逐幀動畫 & 補間動畫存在一定的缺點:
a. 作用物件侷限:View
即補間動畫 只能夠作用在檢視View
Button
、TextView
、甚至是LinearLayout
、或者其它繼承自View
的元件進行動畫操作,但無法對非View
的物件進行動畫操作
- 有些情況下的動畫效果只是檢視的某個屬性 & 物件而不是整個檢視;
- 如,現需要實現檢視的顏色動態變化,那麼就需要操作檢視的顏色屬性從而實現動畫效果,而不是針對整個檢視進行動畫操作
b. 沒有改變View的屬性,只是改變視覺效果
- 補間動畫只是改變了
View
的視覺效果,而不會真正去改變View
的屬性。 - 如,將螢幕左上角的按鈕 通過補間動畫 移動到螢幕的右下角
- 點選當前按鈕位置(螢幕右下角)是沒有效果的,因為實際上按鈕還是停留在螢幕左上角,補間動畫只是將這個按鈕繪製到螢幕右下角,改變了視覺效果而已。
c. 動畫效果單一
- 補間動畫只能實現平移、旋轉、縮放 & 透明度這些簡單的動畫需求
- 一旦遇到相對複雜的動畫效果,即超出了上述4種動畫效果,那麼補間動畫則無法實現。
即在功能 & 可擴充套件性有較大侷限性
1.3 問題
- 為了解決補間動畫的缺陷,在
Android 3.0
(API 11)開始,系統提供了一種全新的動畫模式:屬性動畫(Property Animation
) - 下面,我將全面介紹屬性動畫(
Property Animation
)
2. 簡介
- 作用物件:任意
Java
物件
不再侷限於 檢視View物件
- 實現的動畫效果:可自定義各種動畫效果
不再侷限於4種基本變換:平移、旋轉、縮放 & 透明度
3. 特點
- 作用物件進行了擴充套件:不只是View物件,甚至沒物件也可以
- 動畫效果:不只是4種基本變換,還有其他動畫效果
- 作用領域:API11後引入的
4. 工作原理
-
在一定時間間隔內,通過不斷對值進行改變,並不斷將該值賦給物件的屬性,從而實現該物件在該屬性上的動畫效果
可以是任意物件的任意屬性
-
具體的工作原理邏輯如下:
- 從上述工作原理可以看出屬性動畫有兩個非常重要的類:
ValueAnimator
類 &ObjectAnimator
類 - 其實屬性動畫的使用基本都是依靠這兩個類
- 所以,在下面介紹屬性動畫的具體使用時,我會著重介紹這兩個類。
5. 具體使用
5.1 ValueAnimator類
- 定義:屬性動畫機制中 最核心的一個類
- 實現動畫的原理:通過不斷控制 值 的變化,再不斷 手動 賦給物件的屬性,從而實現動畫效果。如圖下:
從上面原理可以看出:ValueAnimator
類中有3個重要方法:
1. ValueAnimator.ofInt(int values)
2. ValueAnimator.ofFloat(float values)
3. ValueAnimator.ofObject(int values)
下面我將逐一介紹。
5.1.1 ValueAnimator.ofInt(int values)
- 作用:將初始值 以整型數值的形式 過渡到結束值
即估值器是整型估值器 -
IntEvaluator
- 工作原理:
- 具體使用:
特別說明:
1. 因為ValueAnimator本質只是一種值的操作機制,所以下面的介紹先是展示如何改變一個值的過程(下面的例項主要講解:如何將一個值從0平滑地過渡到3)
2. 至於如何實現動畫,是需要開發者手動將這些 值 賦給 物件的屬性值。關於這部分在下節會進行說明。
操作值的方式 分為
XML
設定
/ Java
程式碼設定 設定方式1:Java程式碼設定
實際開發中,建議使用Java程式碼實現屬性動畫:因為很多時候屬性的起始值是無法提前確定的(無法使用XML設定),這就需要在
Java
程式碼裡動態獲取。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
效果圖
值 從初始值 過度到 結束值 的過程如下:
設定方法2:在XML 程式碼中設定
具備重用性,即將通用的動畫寫到XML裡,可在各個介面中去重用它
-
步驟1:在路徑
res/animator
的資料夾裡建立相應的動畫.xml
檔案此處設定為res/animator/set_animation.xml
-
步驟2:設定動畫引數
set_animation.xml
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 步驟3:在Java程式碼中啟動動畫
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
效果圖
效果同第一種方式是一樣的。
例項說明
- 下面,我將結合 手動賦值給物件屬性 這一步驟,從而實現一個完整的動畫效果
- 實現的動畫效果:按鈕的寬度從
150px
放大到500px
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
效果圖
5.1.2 ValueAnimator.oFloat(float values)
-
作用:將初始值 以浮點型數值的形式 過渡到結束值
-
工作原理:
- 具體使用:分為 XML 設定 / Java 程式碼設定
設定方法1:在 Java 程式碼中設定
- 1
- 2
設定方法2:在XML 程式碼中設定
-
步驟1:在路徑
res/animator
的資料夾裡建立相應的動畫.xml
檔案此處設定為res/animator/set_animation.xml
-
步驟2:設定動畫引數
set_animation.xml
- 1
- 2
- 3
- 4
- 5
- 6
- 步驟3:在Java程式碼中啟動動畫