Android中Animation動畫的介紹及用法
Android SDK介紹了2種Animation:
Tween Animation(漸變動畫):通過對特定的對象做圖像變換如平移、縮放、旋轉、淡出/淡入等產生動畫效果
Frame Animation(幀動畫):創建一個Drawable序列,這些Drawable可以按照指定的時間間隔一個一個的顯示,也就是順序播放事先做好的圖像。
1、Tween Animation動畫:
(1)Tween Animation有4種樣式:
Alpha:漸變透明度動畫效果
Scale:漸變尺寸伸縮動畫效果
Translate:移動動畫效果
Rotate:旋轉動畫效果
(2)Tween Animation有 2種使用方法:
a、在XML資源中定義Animation,使用AnimationUtils中的loadAnimation()函數加載動畫;
b、使用Animation子類的構造函數來初始化Animation對象。
在XML資源中定義Animation:
Alpha:
<alpha android:interpolator= “@android:anim/accelerate_decelerate_interpolator” android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="3000" ></alpha> <!-- interpolator:指定一個動畫的插入器,用來控制動畫的速度變化 fromAlpha:動畫起始時透明度 0.0表示完全透明 1.0表示完全不透明 以上值取0.0-1.0之間的float數據類型的數字 toAlpha:動畫結束時透明度 duration:持續時間 -->Scale:
<scale android:interpolator= “@android:anim/accelerate_decelerate_interpolator” android:fromXScale=”0.0″ android:toXScale=”1.4″ android:fromYScale=”0.0″ android:toYScale=”1.4″ android:pivotX=”50%” android:pivotY=”50%” android:fillAfter=”false” android:startOffset=“700” android:duration=”700″ android:repeatCount=”10″ /> <!-- fromXScale[float]:為動畫起始時,X坐標上的伸縮尺寸,0.0表示收縮到沒有 fromYScale[float]:為動畫起始時,Y坐標上的伸縮尺寸,0.0表示收縮到沒有 1.0表示正常無伸縮 值小于1.0表示收縮 值大于1.0表示放大 toXScale[float]:為動畫結束時,X坐標上的伸縮尺寸 toYScale[float]:為動畫結束時,X坐標上的伸縮尺寸 pivotX[float]:為動畫相對于物件的X坐標的開始位置 pivotY[float]:為動畫相對于物件的X、Y坐標的開始位置 50,50%,50%p。這三種寫法就分別代表了ABSOLUTE,RELATIVE_TO_SELF和RELATIVE_TO_PARENT。 屬性值說明:從0%-100%中取值,50%為物件的X或Y方向坐標上的中點位置 fillAfter[boolean]:當設置為true ,該動畫轉化在動畫結束后被應用 startOffset[long]:動畫之間的時間間隔,從上次動畫停多少時間開始執行下個動畫 repeatCount[int]:動畫的重復次數 -->
Translate:
<translate android:interpolator=”@android:anim/accelerate_decelerate_interpolator” android:fromXDelta=”30″ android:toXDelta=”-80″ android:fromYDelta=”30″ android:toYDelta=”300″ android:duration=”2000″ /> t;!-- fromXDelta:為動畫起始時 X坐標上的位置 toXDelta: 為動畫結束時 X坐標上的位置 fromYDelta: 為動畫起始時 Y坐標上的位置 toYDelta:為動畫結束時 Y坐標上的位置 -->Rotate:
<rotate android:interpolator=”@android:anim/accelerate_decelerate_interpolator” android:fromDegrees=”0″ android:toDegrees=”+350″ android:pivotX=”50%” android:pivotY=”50%” android:duration=”3000″ /> t;!-- fromDegrees:動畫起始時物件的角度 toDegrees:動畫結束時物件旋轉的角度 可以大于360度 當角度為負數——表示逆時針旋轉 當角度為正數——表示順時針旋轉 (負數from——to正數:順時針旋轉) (負數from——to負數:逆時針旋轉) (正數from——to正數:順時針旋轉) (正數from——to負數:逆時針旋轉) pivotX;:為動畫相對于物件的X、Y坐標的開始位置 pivotY: 為動畫相對于物件的X、Y坐標的開始位置 50%為物件的X或Y方向坐標上的中點位置 -->
使用Animation子類的構造函數來初始化Animation對象:
在Android SDK中提供了相應的類,Animation類派生出了AlphaAnimation、ScaleAnimation、TranslateAnimation、RotateAnimation分別實現了平移、旋轉、漸變尺寸和透明度等動畫。
Tween Animation通過對 View 的內容完成一系列的圖形變換 (包括平移、縮放、旋轉、改變透明度)來實現動畫效果。具體來講,預先定義一組指令,這些指令指定了圖形變換的類型、觸發時間、持續時間。這些指令可以是以 XML 文件方式定義,也可以是以源代碼方式定義。程序沿著時間線執行這些指令就可以實現動畫效果。
(3)Android SDK中通過interpolator控制動畫的運行
interpolator定義一個動畫的變化率(the rate of change)。這使得基本的動畫效果(alpha, scale, translate, rotate)得以加速,減速,重復等。
Interpolator是基類,Android 提供了幾個 Interpolator 子類,實現了不同的速度曲線,如下:
AccelerateDecelerateInterpolator 在動畫開始與結束的時候減速,在中間的時候加速
AccelerateInterpolator 在動畫開始的時候減速,然后開始加速
CycleInterpolator 動畫循環播放特定的次數,速率改變沿著正弦曲線
DecelerateInterpolator 在動畫開始的時候加速,然后開始減速
LinearInterpolator 在動畫的以均勻的速率改變
(4)動畫的運行模式
動畫的運行模式有兩種:
獨占模式:即程序主線程進入一個循環,根據動畫指令不斷刷新屏幕,直到動畫結束;
中斷模式:即有單獨一個線程對時間計數,每隔一定的時間向主線程發通知,主線程接到通知后更新屏幕
2、Frame Animation動畫:
前面已經說過,Frame Animation是順序播放事先做好的圖像,與電影類似。Android SDK提供了類AnimationDrawable來定義、使用Frame Animation。
Frame Animation可以在XML Resource定義,也可以使用AnimationDrawable中的API定義。由于Tween Animation與Frame Animation有著很大的不同,因此XML定義的格式也完全不一樣,其格式是:首先是animation-list根節點,animation- list根節點中包含多個item子節點,每個item節點定義一幀動畫:當前幀的drawable資源和當前幀持續的時間。