天天看點

Android應用程式資源——Animation動畫資源

Android動畫分為兩種:屬性動畫和檢視動畫 這裡主要講檢視動畫。 檢視動畫分為:逐幀(Frame)動畫和補間(Tween)動畫 AnimationDrawable類是可繪制動畫的基礎。

一、逐幀動畫 FrameAnimation(又叫可繪制動畫)

逐幀動畫: 它要求開發者把動畫過程的每張靜态圖檔都收集起來,然後由Android來控制依次顯示這些靜态圖檔,然後利用人眼“視覺暫留”的原理,給使用者造成動畫的效果,就像看電影一樣。

使用:存在于res/drawable/xxx.xml目錄中(若沒有drawable目錄,就建立一個drawable檔案夾) 1,用xml檔案建立動畫

建立時使用根元素<animation-list.../>,再使用<item.../>子元素定義動畫的全部幀,并制定各幀的持續時間即可。 例如本應用程式的:anim_frame_useing.xml <animation-list.../>中的屬性:          android:oneshot="false"  動畫是否隻運作一次,true運作一次然後停止在最後一幀;false重複運作          android:visible="true"    Drawable對象的初始能見度狀态,true可見,false不可見(預設為false)          android:variablePadding="true"   boolean型,預設為false,當設定為true時,則drawable的padding值随目前選擇的狀态而改變。 <item.../>中的屬性:

         android:drawable參數是每幀圖檔

         android:duration是每幀的時間長度(機關為毫秒) 2,直接用代碼寫幀動畫:

利用AnimationDrawable對象,每次調用addFrame(Drawable frame,int duration)向該動畫添加幀,每調用一次,就往<animation-list../>中添加一個<item.../>子元素。

二、補間動畫

就是指開發者隻需指定動畫開始、動畫結束“關鍵幀”,而動畫變化的“中間幀”由系統計算、并補齊。 補間動畫又分為四大類:         移動補間動畫,         縮放補間動畫,         旋轉補間動畫,         透明補間動畫。  
Android使用Animation代表抽象的動畫類,它包括以下子類:
AlphaAnimation:透明度改變的動畫。建立時要指定動畫開始時、結束時的透明度和動畫持續時間,透明度變化值(0-1) ScaleAnimation:大小縮放的動畫。建立時要指定動畫開始時縮放比、動畫結束時縮放比,并指定動畫持續時間。縮放時可以以不同中心點來(通過pivoteX、pivotY來指定“縮放中心的坐标”) TranslateAnimation:位移變化的動畫。建立時指定動畫開始時為止(通過x、y坐标)、結束時位置(通過x、y坐标),并指定動畫持續時間。 RotateAnimation:旋轉動畫。建立時指定動畫開始時的旋轉角度、結束時旋轉角度,并指定動畫持續時間,還可以通過pivotX、pivotY來指定旋轉中心的坐标。
Interpolator負責控制動畫的變化速度,使得(Alpha、Scale、Translate、Rotate)能以勻速、加速、減速、抛物線速度等各種速度變化。 它是一個接口,android為它提供了如下幾個實作類,分别用于實作不同動畫變化速度。

LinearInterpolator    動畫以勻速改變 AccelerateInterpolator  在動畫開始的地方速度較慢,然後開始加速 AccelerateDecelerateInterpolator 在動畫開始、結束的地方改變速度較慢,在中間的時候加速。 CycleInterpolator  動畫循環播放特定的次數,變化速度按正弦曲線改變

DecelerateInterpolator 在動畫開始的地方改變速度較快,然後開始減速

使用:存在于res/anim/xxx.xml目錄中(若沒有anim目錄,就建立一個anim檔案夾) 建立時使用根元素<set.../>、<alpha.../>、<scale.../>、<translate.../>或<rotate.../>,再使用其中的各種屬性來繪畫動畫 例如本應用程式的:tween_alpha_useing.xml、tween_rotate_useing.xml、tween_scale_useing.xml、tween_set_useing.xml、tween_translate_useing.xml

 <!--          透明度控制動畫效果 alpha         浮點型值:             fromAlpha 屬性為動畫起始時透明度             toAlpha   屬性為動畫結束時透明度(0.0表示完全透明,1.0表示完全不透明)                                  以上值取0.10-1.0之間的float資料類型的數字         長整型值:             duration  屬性為動畫持續時間(時間以毫秒為機關)             android:fillBefore    指動畫結束時畫面停留在此動畫的第一幀; 預設值為true             android:fillAfter    指動畫結束是畫面停留在此動畫的最後一幀。預設值為false             android:fillEnabled                 解釋:

                1,FillEnable = false 時,FillBefore 和FillAfter的值将被忽略,此時FillEnable=Flase時和FillBefore = true且FillAfter=true,                 且FillEnabled=true等價,也就是開始結束都會被fill坑爹。。。,一般寫成false                 2,FillEnable = true時,FillBefore = true,FillAfter = false;隻在第一幀fill                 3,FillEnable = true時,FillBefore = false,FillAfter=true;隻在最後一幀fill                 4,FillEnable = true時,FillBefore = false,FillAfter=false           startOffset    設定啟動時間     -->     <alpha         android:duration="3000"         android:fromAlpha="0.1"         android:toAlpha="1.0"          android:fillBefore="true"         android:fillAfter="true"         android:fillEnabled="true"/>

    <!--          尺寸伸縮動畫效果 scale         interpolator  指定一個動畫的插入器                    accelerate_decelerate_interpolator  加速-減速 動畫插入器                    accelerate_interpolator        加速-動畫插入器                    decelerate_interpolator        減速- 動畫插入器            其他的屬于特定的動畫效果

         fromXScale 屬性為動畫起始時 X坐标上的伸縮尺寸              toXScale   屬性為動畫結束時 X坐标上的伸縮尺寸               fromYScale 屬性為動畫起始時Y坐标上的伸縮尺寸              toYScale   屬性為動畫結束時Y坐标上的伸縮尺寸                       浮點值:0.0表示收縮到沒有 ; 1.0表示正常無伸縮    ;   值小于1.0表示收縮  ;  值大于1.0表示放大           pivotX     屬性為動畫相對于物件的X坐标的開始位置           pivotY     屬性為動畫相對于物件的Y坐标的開始位置                  值:以上兩個屬性值 從0%-100%中取值 ;    50%為物件的X或Y方向坐标上的中點位置           duration  屬性為動畫持續時間(同上)           fillAfter 屬性 當設定為true ,該動畫轉化在動畫結束後被應用     -->     <scale         android:duration="3000"         android:fillAfter="true"         android:fromXScale="0.0"         android:fromYScale="0.0"         android:interpolator="@android:anim/decelerate_interpolator"         android:pivotX="20%"         android:pivotY="30%"         android:toXScale="0.8"         android:toYScale="0.6" />

    <!--          位置轉移動畫效果  translate             fromXDelta 屬性為動畫起始時 X坐标上的位置                 toXDelta   屬性為動畫結束時 X坐标上的位置             fromYDelta 屬性為動畫起始時 Y坐标上的位置             toYDelta   屬性為動畫結束時 Y坐标上的位置                    注意:                       沒有指定fromXType toXType fromYType toYType 時候,                       預設是以自己為相對參照物                          duration  屬性為動畫持續時間(時間以毫秒為機關)     -->     <translate         android:fromXScale="0.0"         android:fromYScale="0.0"         android:toXScale="0.8"         android:toYScale="0.6"          android:duration="3000"/>

    <!--          旋轉動畫效果 rotate             interpolator 指定一個動畫的插入器                      有三種動畫插入器:                         accelerate_decelerate_interpolator   加速-減速 動畫插入器                         accelerate_interpolator               加速-動畫插入器                         decelerate_interpolator               減速- 動畫插入器                      其他的屬于特定的動畫效果

            fromDegrees 屬性為動畫起始時物件的角度                 toDegrees   屬性為動畫結束時物件旋轉的角度 可以大于360度                    浮點數:                     當角度為負數——表示逆時針旋轉                                 當角度為正數——表示順時針旋轉                                    (負數from——to正數:順時針旋轉)                         (負數from——to負數:逆時針旋轉)                       (正數from——to正數:順時針旋轉)                       (正數from——to負數:逆時針旋轉) 

            pivotX     屬性為動畫相對于物件的X坐标的開始位置             pivotY     屬性為動畫相對于物件的Y坐标的開始位置                 值:以上兩個屬性值 從0%-100%中取值 ;    50%為物件的X或Y方向坐标上的中點位置             duration  屬性為動畫持續時間(時間以毫秒為機關)        -->      <rotate           android:interpolator="@android:anim/accelerate_decelerate_interpolator"          android:fromDegrees="0.0"          android:toDegrees="120"          android:pivotX="20%"          android:pivotY="30%"          android:duration="3000"          />

自定義補間動畫:

GIF動畫播放: 要想播放GIF圖檔,首先需要對GIF進行解碼,然後将GIF中的每一幀分别提取出來儲存到一個容器種,然後根據需要繪制每一幀,這樣就可以輕松實作GIF動畫的播放。 建立解碼類; GIF幀管理器來管理GIF的每一幀的圖檔; 最後使用這兩個類來播放一張GIF的每一幀的圖檔。

簡單總結使用代碼下載下傳位址:https://git.oschina.net/22889/Android_ApplicationResource_Animation.git 這裡面主要是有關于應用程式資源的總結學習,其中包含了動畫資源。以後還有專門的有關動畫的連結。 android官網動畫使用:http://developer.android.com/guide/topics/resources/animation-resource.html