Android中的動(dòng)畫(huà)--筆記

android中的動(dòng)畫(huà)分 View Animation和Property Animation兩大類(lèi)

View Animation包括Tween Animation(補(bǔ)間動(dòng)畫(huà))和Frame Animation(逐幀動(dòng)畫(huà));

Tween Animation:通過(guò)對(duì)場(chǎng)景里的對(duì)象不斷做圖像變換(平移、縮放蝇棉、旋轉(zhuǎn))產(chǎn)生動(dòng)畫(huà)效果,即是一種漸變動(dòng)畫(huà)偎蘸;

Frame Animation:順序播放事先做好的圖像,是一種畫(huà)面轉(zhuǎn)換動(dòng)畫(huà)瞬内。

Property Animation? 包括ValueAnimator和ObjectAnimator迷雪;

Property Animation:屬性動(dòng)畫(huà),通過(guò)動(dòng)態(tài)地改變對(duì)象的屬性從而達(dá)到動(dòng)畫(huà)效果虫蝶,屬性動(dòng)畫(huà)為API 11新特性章咧。

屬性動(dòng)畫(huà)是怎么實(shí)現(xiàn)的?

屬性動(dòng)畫(huà)的運(yùn)行機(jī)制是通過(guò)不斷地對(duì)值進(jìn)行操作來(lái)實(shí)現(xiàn)的能真,而初始值和結(jié)束值之間的動(dòng)畫(huà)過(guò)渡就是由ValueAnimator這個(gè)類(lèi)來(lái)負(fù)責(zé)計(jì)算的赁严。它的內(nèi)部使用一種時(shí)間循環(huán)的機(jī)制來(lái)計(jì)算值與值之間的動(dòng)畫(huà)過(guò)渡调限,我們只需要將初始值和結(jié)束值提供給ValueAnimator,并且告訴它動(dòng)畫(huà)所需運(yùn)行的時(shí)長(zhǎng)误澳,那么ValueAnimator就會(huì)自動(dòng)幫我們完成從初始值平滑地過(guò)渡到結(jié)束值這樣的效果。除此之外秦躯,ValueAnimator還負(fù)責(zé)管理動(dòng)畫(huà)的播放次數(shù)忆谓、播放模式、以及對(duì)動(dòng)畫(huà)設(shè)置監(jiān)聽(tīng)器等

為什么要有屬性動(dòng)畫(huà)?

Property Animator能實(shí)現(xiàn)補(bǔ)間動(dòng)畫(huà)無(wú)法實(shí)現(xiàn)的功能

View Animation僅能對(duì)指定的控件做動(dòng)畫(huà)踱承,而Property Animator是通過(guò)改變控件某一屬性值來(lái)做動(dòng)畫(huà)的倡缠。

補(bǔ)間動(dòng)畫(huà)雖能對(duì)控件做動(dòng)畫(huà),但并沒(méi)有改變控件內(nèi)部的屬性值茎活。而Property Animator則是恰恰相反昙沦,Property Animator是通過(guò)改變控件內(nèi)部的屬性值來(lái)達(dá)到動(dòng)畫(huà)效果的

View Animation和PropertyAnimation有什么不同?

1、引入時(shí)間不同:View Animation是API Level 1就引入的载荔。Property Animation是API Level 11引入的盾饮,即Android 3.0才開(kāi)始有Property ? ? ? ?Animation相關(guān)的API。

2懒熙、所在包名不同:View Animation在包android.view.animation中丘损。而Property Animation API在包 android.animation中。

3工扎、動(dòng)畫(huà)類(lèi)的命名不同:View Animation中動(dòng)畫(huà)類(lèi)取名都叫XXXXAnimation,而在Property Animator中動(dòng)畫(huà)類(lèi)的取名則叫XXXXAnimator

Tween Animation有四種形式:

l? alpha???? ???????? 漸變透明度動(dòng)畫(huà)效果

l? scale ? ? ? ? ? ? ? 漸變尺寸伸縮動(dòng)畫(huà)效果

l? translate ? ? ? ? 畫(huà)面位置移動(dòng)動(dòng)畫(huà)效果

l? rotate ? ? ? ? ? ? ?畫(huà)面旋轉(zhuǎn)動(dòng)畫(huà)效果

使用方法

Tween動(dòng)畫(huà)的實(shí)現(xiàn)原理

通過(guò)view的matrix和alpha變量對(duì)view進(jìn)行修改徘钥,但是并不會(huì)修改view自身屬性。

Frame Animation

Frame Animation是順序播放事先做好的圖像肢娘,跟電影類(lèi)似呈础。不同于animation package,Android SDK提供了另外一個(gè)類(lèi)AnimationDrawable來(lái)定義使用Frame Animation橱健。

這里有點(diǎn)不同的是而钞,利用AnimationDrawable實(shí)現(xiàn)動(dòng)畫(huà)時(shí),本身并沒(méi)有提供接口來(lái)監(jiān)聽(tīng)動(dòng)畫(huà)的狀態(tài)(開(kāi)始拘荡,結(jié)束)笨忌,需要自己處理。

Property Animation? 包括ValueAnimator和ObjectAnimator俱病;

ValueAnimator和ObjectAnimator有什么不同官疲?

ValueAnimator只不過(guò)是對(duì)值進(jìn)行了一個(gè)平滑的動(dòng)畫(huà)過(guò)渡,而ObjectAnimator就不同了亮隙,它是可以直接對(duì)任意對(duì)象的任意屬性進(jìn)行動(dòng)畫(huà)操作的途凫,比如說(shuō)View的alpha屬性。雖說(shuō)ObjectAnimator會(huì)更加常用一些溢吻,但是它其實(shí)是繼承自ValueAnimator的维费,底層的動(dòng)畫(huà)實(shí)現(xiàn)機(jī)制也是基于ValueAnimator來(lái)完成的

ObjectAnimator? 動(dòng)畫(huà)的執(zhí)行類(lèi)

為了能讓動(dòng)畫(huà)直接與對(duì)應(yīng)控件相關(guān)聯(lián)果元,以使我們從監(jiān)聽(tīng)動(dòng)畫(huà)過(guò)程中解放出來(lái),谷歌的開(kāi)發(fā)人員在ValueAnimator的基礎(chǔ)上犀盟,又派生了一個(gè)類(lèi)ObjectAnimator;

ObjectAnimator做動(dòng)畫(huà)而晒,并不是根據(jù)控件xml中的屬性來(lái)改變的,而是通過(guò)指定屬性所對(duì)應(yīng)的set方法來(lái)改變的

(1)阅畴、setRotationX倡怎、setRotationY與setRotation

? ? ? setRotationX(float rotationX):表示圍繞X軸旋轉(zhuǎn),rotationX表示旋轉(zhuǎn)度數(shù)

? ? ? setRotationY(rotationY):表示圍繞Y軸旋轉(zhuǎn)贱枣,rotationY表示旋轉(zhuǎn)度數(shù)

? ? ? setRotation(float rotation):表示圍繞Z旋轉(zhuǎn),rotation表示旋轉(zhuǎn)度數(shù)

(2)监署、setTranslationX與setTranslationY?

? ? setTranslationX(float translationX) :表示在X軸上的平移距離,以當(dāng)前控件為原點(diǎn),向右為正方向纽哥,參數(shù)translationX表示移動(dòng)的距離钠乏。

? ? setTranslationY(float translationY) :表示在Y軸上的平移距離,以當(dāng)前控件為原點(diǎn)春塌,向下為正方向晓避,參數(shù)translationY表示移動(dòng)的距離。

(3)只壳、setScaleX與setScaleY

? setScaleX(float scaleX):在X軸上縮放够滑,scaleX表示縮放倍數(shù)

? setScaleY(float scaleY):在Y軸上縮放,scaleY表示縮放倍數(shù)

ObjectAnimator

ValueAnimator 動(dòng)畫(huà)的執(zhí)行類(lèi)

這個(gè)Animation是針對(duì)值的吕世!ValueAnimator不會(huì)對(duì)控件做任何操作 我們可以給它設(shè)定從哪個(gè)值運(yùn)動(dòng)到哪個(gè)值彰触,通過(guò)監(jiān)聽(tīng)這些值的漸變過(guò)程來(lái)自己操作控件。以前我們?cè)v過(guò)Scroller類(lèi)命辖,Scroller類(lèi)也是不會(huì)對(duì)控件操作的况毅,也是通過(guò)給他設(shè)定滾動(dòng)值和時(shí)長(zhǎng),它會(huì)自己計(jì)算滾動(dòng)過(guò)程尔艇,然后我們需要監(jiān)聽(tīng)它的動(dòng)畫(huà)過(guò)程來(lái)自己操作控件尔许,ValueAnimator的原理與Scroller類(lèi)相似?

第一步:創(chuàng)建ValueAnimator實(shí)例

創(chuàng)建實(shí)例

ValueAnimator.ofInt創(chuàng)建了一個(gè)值從0到400的動(dòng)畫(huà),動(dòng)畫(huà)時(shí)長(zhǎng)是1s

第二步:添加監(jiān)聽(tīng)

AnimatorListener

AnimatorListener中终娃,主要是監(jiān)聽(tīng)Animation的四個(gè)狀態(tài)味廊,start、end棠耕、cancel余佛、repeat;當(dāng)動(dòng)畫(huà)開(kāi)始時(shí)窍荧,會(huì)調(diào)用onAnimationStart(Animator animation)方法辉巡,當(dāng)動(dòng)畫(huà)結(jié)束時(shí)調(diào)用onAnimationEnd(Animator animation),當(dāng)動(dòng)畫(huà)取消時(shí)蕊退,調(diào)用onAnimationCancel(Animator animation)函數(shù)郊楣,當(dāng)動(dòng)畫(huà)重復(fù)時(shí)憔恳,會(huì)調(diào)用onAnimationRepeat(Animator animation)函數(shù)。

AnimatorUpdateListener

監(jiān)聽(tīng)動(dòng)畫(huà)的實(shí)時(shí)變化狀態(tài)

三净蚤、移除監(jiān)聽(tīng)

針對(duì)AnimatorUpdateListener和AnimatorListener钥组,每個(gè)監(jiān)聽(tīng)器都有兩個(gè)方法來(lái)移除

PropertyValuesHolder與Keyframe

ValueAnimator和ObjectAnimator除了通過(guò)ofInt(),ofFloat(),ofObject()創(chuàng)建實(shí)例外,還都有一個(gè)ofPropertyValuesHolder()方法來(lái)創(chuàng)建實(shí)例

PropertyValuesHolder 這個(gè)類(lèi)的意義就是今瀑,它其中保存了動(dòng)畫(huà)過(guò)程中所需要操作的屬性和對(duì)應(yīng)的值

AnimatorSet 用于控制一組動(dòng)畫(huà)的執(zhí)行:線性程梦,一起,每個(gè)動(dòng)畫(huà)的先后執(zhí)行等放椰。

插值器

插值器,也叫加速器 是用來(lái)控制動(dòng)畫(huà)區(qū)間的值被如何計(jì)算出來(lái)的Interpolator?屬性是Animation類(lèi)的一個(gè)XML屬性 所以alpha愉粤、scale砾医、rotate、translate衣厘、set都會(huì)繼承得到這個(gè)屬性如蚜。Interpolator被譯為插值器?其實(shí)他是一個(gè)指定動(dòng)畫(huà)如何變化的東東,跟PS里的動(dòng)作有點(diǎn)類(lèi)似

Evaluator ?就是將從加速器返回的數(shù)字進(jìn)度轉(zhuǎn)成對(duì)應(yīng)的數(shù)字值影暴。

Evaluator ? ?其實(shí)就是一個(gè)轉(zhuǎn)換器错邦,他能把小數(shù)進(jìn)度轉(zhuǎn)換成對(duì)應(yīng)的數(shù)值位置

二、scale標(biāo)簽 縮放(從控件中心點(diǎn)型宙,從0放大到1.4倍撬呢,保持結(jié)束時(shí)的狀態(tài))

三、rotate標(biāo)簽 旋轉(zhuǎn)(從控件中心點(diǎn)妆兑,從0放大到1.4倍魂拦,保持結(jié)束時(shí)的狀態(tài))

四、alpha標(biāo)簽 (將透明度從0變成1.0)?


五搁嗓、translate標(biāo)簽 位移(把控件從(0芯勘,0)平移到(-200,-200)的位置腺逛,保持結(jié)束時(shí)狀態(tài)不變)

Animation類(lèi)是所有動(dòng)畫(huà)(scale荷愕、alpha、translate棍矛、rotate)的基類(lèi)安疗,

ScaleAnimation 縮放

AlphaAnimation 透明度

RotateAnimation 旋轉(zhuǎn)

TranslateAnimation 位移

AnimationSet 定義動(dòng)作類(lèi)的集合 它是沒(méi)有XML屬性的

同樣效果的JAVA代碼

alphaAnim =newAlphaAnimation(1.0f,0.1f);

scaleAnim?=newScaleAnimation(0.0f,1.4f,0.0f,1.4f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);

rotateAnim?=newRotateAnimation(0,720,?Animation.RELATIVE_TO_SELF,0.5f,?Animation.RELATIVE_TO_SELF,0.5f);

setAnim=newAnimationSet(true);

setAnim.addAnimation(alphaAnim);

setAnim.addAnimation(scaleAnim);

setAnim.addAnimation(rotateAnim);

setAnim.setDuration(3000);

setAnim.setFillAfter(true);


AnimatorInflater 用戶加載屬性動(dòng)畫(huà)的xml文件

TypeEvaluator? 類(lèi)型估值,主要用于設(shè)置動(dòng)畫(huà)操作屬性的值够委。

TimeInterpolator 時(shí)間插值茂契,上面已經(jīng)介紹。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末慨绳,一起剝皮案震驚了整個(gè)濱河市掉冶,隨后出現(xiàn)的幾起案子真竖,更是在濱河造成了極大的恐慌,老刑警劉巖厌小,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恢共,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡璧亚,警方通過(guò)查閱死者的電腦和手機(jī)讨韭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)癣蟋,“玉大人透硝,你說(shuō)我怎么就攤上這事》杞粒” “怎么了濒生?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)幔欧。 經(jīng)常有香客問(wèn)我罪治,道長(zhǎng),這世上最難降的妖魔是什么礁蔗? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任觉义,我火速辦了婚禮,結(jié)果婚禮上浴井,老公的妹妹穿的比我還像新娘晒骇。我一直安慰自己,他們只是感情好磺浙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布厉碟。 她就那樣靜靜地躺著,像睡著了一般屠缭。 火紅的嫁衣襯著肌膚如雪箍鼓。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天呵曹,我揣著相機(jī)與錄音款咖,去河邊找鬼。 笑死奄喂,一個(gè)胖子當(dāng)著我的面吹牛铐殃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播跨新,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼富腊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了域帐?” 一聲冷哼從身側(cè)響起赘被,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤是整,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后民假,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體浮入,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年羊异,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了事秀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡野舶,死狀恐怖易迹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情平道,我是刑警寧澤睹欲,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站巢掺,受9級(jí)特大地震影響句伶,放射性物質(zhì)發(fā)生泄漏劲蜻。R本人自食惡果不足惜陆淀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望先嬉。 院中可真熱鬧轧苫,春花似錦、人聲如沸疫蔓。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)衅胀。三九已至岔乔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間滚躯,已是汗流浹背雏门。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留掸掏,地道東北人茁影。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像丧凤,于是被迫代替她去往敵國(guó)和親募闲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容