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的每一幀的圖片。

這裏面主要是有關於應用程序資源的總結學習,其中包含了動畫資源。以後還有專門的有關動畫的鏈接。


發佈了31 篇原創文章 · 獲贊 2 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章