Android動(dòng)畫(huà)分類:
1.View動(dòng)畫(huà)
2.幀動(dòng)畫(huà)
3.屬性動(dòng)畫(huà)
其中幀動(dòng)畫(huà)屬于View動(dòng)畫(huà)中的一種弟孟。
一.View動(dòng)畫(huà)
1.通過(guò)對(duì)場(chǎng)景里的對(duì)象做圖形變化(Translate搂擦,Scale捺氢,Rotate剑逃,Alpha)來(lái)產(chǎn)生一種動(dòng)畫(huà)效果宽涌,實(shí)際作用的View位置褐鸥,大小等不會(huì)跟隨變化似芝。
2.view的四種動(dòng)畫(huà):
TranslateAnimation那婉,ScaleAnimation,RotateAnimation党瓮,AlphaAnimation,繼承與Animation
3.View動(dòng)畫(huà)實(shí)現(xiàn)方式:
? ?xml實(shí)現(xiàn):
? ? ? ? ?對(duì)應(yīng)根節(jié)點(diǎn):alpha详炬,translate,scale寞奸,rotate以及組合set
? ? ? ? ? 通過(guò)AnimationUtils的loadAnimation方法加載
? ?代碼實(shí)現(xiàn):
? ? ? ? 常用類:TranslateAnimation呛谜,ScaleAnimation,RotateAnimation枪萄,AlphaAnimation隐岛, ? ?AnmationSet
? ?關(guān)鍵屬性:interpolator插值器,控制動(dòng)畫(huà)速度呻引,例如勻速礼仗,加速再減速,減速再加速等,可以自定義
4.自定義View動(dòng)畫(huà):
? ?繼承Animation,重載applyTransformation方法
5.LayoutAnimation
? (1). 作用于ViewGroup,添加這個(gè)屬性之后ViewGroup在子View出場(chǎng)的時(shí)候會(huì)顯示這個(gè)動(dòng)畫(huà)元践,例如給ListView指定LayoutAnimation
? (2).實(shí)現(xiàn)方式:
? ? ? xml:android:animation="@anim/xxx"
? ? ? code:targetViewGroup.setLayoutAnimation(layoutAnimatio);
二.幀動(dòng)畫(huà)
簡(jiǎn)單說(shuō)就是順序播放一連串圖片韭脊,達(dá)到動(dòng)畫(huà)效果,對(duì)于通過(guò)代碼實(shí)現(xiàn)起來(lái)很麻煩的動(dòng)畫(huà)效果可以使用幀動(dòng)畫(huà)實(shí)現(xiàn)单旁,盡量少用沪羔,不然會(huì)包會(huì)很大,而且占用內(nèi)存象浑。
實(shí)現(xiàn)方式:
xml:animation-list 指定item
code:AnimationDrawable
三.屬性動(dòng)畫(huà)
? ? ?1.API11以后引入蔫饰,可以對(duì)任何對(duì)象做動(dòng)畫(huà),其實(shí)就是改變對(duì)象的屬性值而達(dá)到一種視覺(jué)的動(dòng)畫(huà)效果愉豺,也可以單純的改變值篓吁,通過(guò)監(jiān)聽(tīng)值得變化做一些相應(yīng)的操作。
? ? 關(guān)鍵類:ValueAnimator蚪拦,ObjectAnimator杖剪,AnimatorSet
? ? 對(duì)應(yīng)的xml節(jié)點(diǎn):animator,objectAnimator驰贷,set
2.插值器(Interpolator)和估值器(TypeEvaluator)
? 插值器:控制當(dāng)前動(dòng)畫(huà)的百分比盛嘿,常用的插值器有TimeInterpolator(時(shí)間插值器),LinearInterpolator(線性插值 ? ? ? 器),AcceletateDecelerateInterpolator(加速減速插值器),
? ? 估值器:通過(guò)插值器提供的百分比括袒,以及動(dòng)畫(huà)設(shè)定的最大值和最小值來(lái)計(jì)算當(dāng)前的值次兆。
3.屬性動(dòng)畫(huà)監(jiān)聽(tīng)器
AnimatorUpdateListener:動(dòng)畫(huà)更新的時(shí)候觸發(fā),可以在動(dòng)畫(huà)的過(guò)程中做一些特殊處理
AnimatorListener:監(jiān)聽(tīng)動(dòng)畫(huà)的開(kāi)始锹锰,結(jié)束芥炭,取消和重復(fù)幾個(gè)事件。
4.屬性動(dòng)畫(huà)雖然可以多任意對(duì)象進(jìn)行動(dòng)畫(huà)恃慧,但是要真正有效需要滿足一定條件:
? ?(1).對(duì)象提供了屬性的set和get方法蚤认,set方法用于改變對(duì)象的屬性值,而get方法用戶在沒(méi)有設(shè)置屬性動(dòng)畫(huà)的默認(rèn)值的時(shí)候獲取默認(rèn)值
? ?(2).對(duì)象的set方法所做的改變必須能通過(guò)某種方式展現(xiàn)出來(lái)糕伐,比如UI上的變化等。
5.針對(duì)上面中的set和get方法蘸嘶,如果有的對(duì)象沒(méi)有提供相應(yīng)的方法的解決方案(官方提供)
(1).如果有權(quán)限的話給對(duì)象加上set和get方法
(2).用一個(gè)類來(lái)包裝原始對(duì)象良瞧,間接提供set和get方法
(3).采用ValueAnimator,監(jiān)聽(tīng)動(dòng)畫(huà)過(guò)程训唱,自己實(shí)現(xiàn)屬性的改變褥蚯。
總結(jié)一下屬性動(dòng)畫(huà)的工作原理:
根據(jù)傳遞的初始值和最終值,以及動(dòng)畫(huà)的參數(shù)况增,計(jì)算動(dòng)畫(huà)中的屬性值赞庶,通過(guò)set方法賦值,達(dá)到動(dòng)畫(huà)效果。