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