配置動畫資源
android支持3種類型的動畫
-
屬性動畫 補間動畫
tweened animation.
通過在目標對象的任何屬性的兩個值之間應用增量變化,可以產生一種動畫效果。包括顏色、透明度、字體大小。 - 視圖動畫 補間動畫tweened animation.用來旋轉、移動和拉伸一個視圖
- 幀動畫 逐幀的格子動畫,用來顯示一系列的Drawable圖片
屬性動畫: 每一個屬性動畫都存儲在項目的res/animator文件夾下的一個單獨的XML文件中。動畫的文件名被用作它的資源標識符,使用屬性動畫器為目標對象的幾乎任何屬性生成動畫。
視圖動畫: 每一個屬性動畫都存儲在項目的res/animator文件夾下的一個單獨的XML文件中。動畫的文件名被用作它的資源標識符。一個動畫可以定義為按以下方式改變:alpha(淡入/淡出),scale(縮放)、translate(移動)或者rotate(旋轉),可以使用set標簽創建一個動畫的組合。一個動畫集包含了一個或多個動畫變換,并且支持使用多個額外標簽和屬性來定制動畫集合中德每個動畫何時以及如何播放
可用的set標簽:
-
duration
持續時間 -
startOffset
動畫開始之前的延遲,以毫秒為單位 -
fillBeforeture
在動畫開始之前應用動畫變形 -
fillAftertrue
在動畫開始之后應用動畫變形 -
interpolator
設置這種效果隨時間改變的速度要指定一個插值器,需要引用android:anim/interpolatorName
處的系統動畫資源
如果沒有startOffset標簽,那么動畫集合眾的所有動畫效果都將會同時執行
逐幀動畫可以用來創建Drawable的序列,每個Drawable都會在視圖的背景中持續一定的時間。
因為逐幀動畫代表的是可以動的Drawable,所以它們存儲在res/drawable文件夾中,并且使用文件名(沒有,xml擴展名)來作為其資源Id的要播放動畫,首先將資源分配給要播放動畫的視圖,然后獲得對Animation Drawable對象的引用并開始播放
使用動畫
補間View動畫 應用于View ,關于位置、大小、旋轉和透明度的改變。
逐幀動畫 每一幀顯示一個不同的Drawable。逐幀動畫可以在一個View中顯示,并使用它的Canvas作為投影屏幕。
差值屬性動畫 可以讓應用程序中的任何對象動起來。它是一個框架,在一定時間內,通過使用指定的內插技術來影響任意的對象屬性。
補間View動畫
提供一種簡單的,以最小資源消耗向用戶提供深度、移動或反饋。
補間動畫經常用于:
- Activity間的轉換
- Activity內的布局間的轉換
- 相同View中的不同內容間的轉換
- 為用戶提供反饋,例如提供進度、通過“晃動”輸入框來說明錯誤或者無效的數據輸入
1.創建補間View動畫####
補間動畫是使用Animation類創建的。
可用的動畫類型:
-
AlphaAnimation
改變透明度 -
RotateAnimation
在平面上旋轉選中的View Canvas
-
ScaleAnimation
允許縮放選中的View -
TranslateAnimation
移動選中的View
Android提供了AnimationSet類來對動畫進行分組和配置,從而讓它們作為一個集合運行。
可以定義集合中的每一個動畫的開始時間和持續時間,以此來控制動畫序列的時刻安排和順序。
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator"> <scale android:fromXScale="0.0" android:toXScale="1.0" android:fromYScale="0.0" android:toYScale="1.0" android:pivotX="50%" android:pivotY="50%" android:duration="1000" /> </set>
設置一個子動畫的開始偏移時間和持續時間是很重要的,否則它們就會同時開始和結束
2.應用補間動畫####
通過調用startAnimation
方法,可以將動畫應用到任意View
中,只需要傳遞給這個方法要應用的動畫或者動畫集合即可
動畫序列將會運行一次,然后停止,除非使用動畫或者動畫集合中的setRepeatMode
和setRepeatCount
方法來修改這種行為。可以通過把重復模式設置為RESTART
或者REVERSE
來強制動畫循環或者反向運行。設置重復計數可以控制動畫重復的次數
myAnimation.setRepeatMode(Animation.RESTART); myAnimation.setRepeatCount(Animation.INFINITE); myView.startAnimation(myAnimation);
3.使用動畫監聽器####
AnimationListener
創建一個事件處理程序,當動畫開始或者結束的時候觸發它,這樣就可以在動畫之前或者結束之后執行某些操作,例如改變View的內容或者鏈接多個動畫
對Animation
對象調用setAnimationListener,并傳遞它一個新的setAnimationListener
實現,同時按要求重寫onAnimationEnd,onAnimationStart
和onAnimationRepeat