Android中Animation動畫的介紹及用法

jopen 11年前發布 | 19K 次閱讀 Android Android開發 移動開發

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類派生出了AlphaAnimationScaleAnimationTranslateAnimationRotateAnimation分別實現了平移、旋轉、漸變尺寸和透明度等動畫。

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資源和當前幀持續的時間。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!