Android中Animation動畫的介紹及用法

Bench 13年前發布 | 2K 次閱讀 Apache Gora Apache Cayenne 網絡開發

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″ />
<!--         
        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″ />
<!--
fromDegrees:動畫起始時物件的角度 toDegrees:動畫結束時物件旋轉的角度 可以大于360度 當角度為負數——表示逆時針旋轉 當角度為正數——表示順時針旋轉 (負數from——to正數:順時針旋轉) (負數from——to負數:逆時針旋轉) (正數from——to正數:順時針旋轉) (正數from——to負數:逆時針旋轉)

    pivotX;:為動畫相對于物件的X、Y坐標的開始位置
    pivotY: 為動畫相對于物件的X、Y坐標的開始位置
                50%為物件的X或Y方向坐標上的中點位置 --></pre> <p> </p>

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


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