今天先給大家看一下效果哈哈:
這個(gè)就是我們今天要學(xué)習(xí)的東西蔚晨,第一個(gè)是幀動(dòng)畫(huà)板祝,第二個(gè)是補(bǔ)間動(dòng)畫(huà)绪妹。
幀動(dòng)畫(huà)這個(gè)名字大家應(yīng)該都比較熟悉甥桂,但是補(bǔ)間動(dòng)畫(huà)應(yīng)該就不太清楚了,沒(méi)關(guān)系邮旷,等會(huì)兒講到的時(shí)候我們?cè)俳o大家詳細(xì)介紹黄选,首先我們來(lái)看一下幀動(dòng)畫(huà):
一、幀動(dòng)畫(huà)
幀動(dòng)畫(huà)顧名思義婶肩,就是把一幀一幀的播放办陷,我們把幾張圖片放進(jìn)去,讓他依次展示出來(lái)狡孔,這個(gè)就是幀動(dòng)畫(huà)的效果了懂诗。接下啦我們來(lái)看一下如何實(shí)現(xiàn)的:
在實(shí)現(xiàn)功能之前蜂嗽,我們先做一下準(zhǔn)備工作苗膝,給activity.xml和activity.java文件進(jìn)行設(shè)置(為了了功能講解方便):
好了,接下啦我們進(jìn)入正題植旧,首先開(kāi)始幀動(dòng)畫(huà)功能實(shí)現(xiàn):
幀動(dòng)畫(huà)實(shí)現(xiàn)有兩種方法:java代碼實(shí)現(xiàn)和xml文件實(shí)現(xiàn)辱揭,我們先來(lái)看java代碼實(shí)現(xiàn):
1.java代碼實(shí)現(xiàn):
我們的思路是這樣的:首先創(chuàng)建幀布局對(duì)應(yīng)的類(lèi)(AnimationDrawable),然后進(jìn)行相關(guān)屬性添加病附,最后把它加入到img中问窃。
我們調(diào)用了addFrame方法來(lái)給ad添加圖片,第一個(gè)參數(shù)是我們圖片的id完沪,第二個(gè)參數(shù)duration是我們要讓他顯示多少毫秒域庇。
setOneShot是我們是否讓他只跑一次,我們選擇false覆积,讓他循環(huán)跑听皿。
最后我們?cè)邳c(diǎn)擊事件中調(diào)用了ad.start方法,然他動(dòng)起來(lái)宽档,現(xiàn)在我們來(lái)看一看效果吧:
2.用.xml實(shí)現(xiàn):
我們?cè)赿rawable下創(chuàng)建了一個(gè)叫做frame_anim的xml文件尉姨,然后外標(biāo)簽寫(xiě)為animation-list,里面的item吗冤,drawable屬性添加圖片又厉,duration是顯示時(shí)間。
我們這次不new AnimationDrawable椎瘟,而是通過(guò)getDrawable獲取我們剛才創(chuàng)建的xml文件覆致。
效果就不展示了,跟java的一樣肺蔚。
這個(gè)很簡(jiǎn)答煌妈,大家應(yīng)該可以接受,下面我們來(lái)看一下補(bǔ)間動(dòng)畫(huà):
二、補(bǔ)間動(dòng)畫(huà)
首先說(shuō)一下補(bǔ)間動(dòng)畫(huà)是個(gè)什么意思声旺,我們的動(dòng)畫(huà)不可能只是有圖片的來(lái)回切換構(gòu)成動(dòng)畫(huà)笔链,我們同樣也可以通過(guò)對(duì)圖片進(jìn)行平移、旋轉(zhuǎn)腮猖、縮放鉴扫、透明度漸變等操作,來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的動(dòng)畫(huà)效果澈缺,下面我們一次來(lái)看一下這些效果實(shí)現(xiàn)坪创。
1.平移。
平移對(duì)應(yīng)的類(lèi)是TranslateAnimation姐赡。
我們注意到他有四個(gè)構(gòu)造方法莱预,我們一般常用的是最后兩個(gè),我們就看第三個(gè)吧:
它對(duì)應(yīng)的參數(shù)從左到右分別是:
? ? ? ? ? ? ? ? ? ? ? ? 動(dòng)畫(huà)x軸起始位置相對(duì)默認(rèn)位置偏移量项滑,動(dòng)畫(huà)x軸結(jié)束位置相對(duì)默認(rèn)位置偏移量依沮,
? ? ? ? ? ? ? ? ? ? ? ? 動(dòng)畫(huà)y軸起始位置相對(duì)默認(rèn)位置偏移量,動(dòng)畫(huà)y軸結(jié)束位置相對(duì)默認(rèn)位置偏移量枪狂。
我簡(jiǎn)單解釋一下危喉,大家都知道m(xù)argin吧,我們的x軸相對(duì)偏移就可以理解為marginStart州疾,二y軸相對(duì)偏移就可以理解為marginTop辜限,無(wú)論是起始還是結(jié)束位置都是這樣的。
現(xiàn)在我們來(lái)設(shè)置數(shù)值:
很明顯我們只讓它從默認(rèn)位置向右移動(dòng)的100严蓖,
別忘了點(diǎn)擊事件中啟動(dòng)薄嫡,我們通過(guò)ImageView的startAnimation方法來(lái)啟動(dòng)。
2.縮放
還是同樣的圖片颗胡,我們來(lái)進(jìn)行縮放操作:
縮放對(duì)應(yīng)的類(lèi)是ScaleAnimation
我們注意到它的構(gòu)造方法參數(shù)也是很多額毫深,我們只看最后一個(gè)。
它對(duì)應(yīng)的參數(shù)分別是:
????????????動(dòng)畫(huà)播放前x軸比例杭措,動(dòng)畫(huà)播放后x軸比例费什,
????????????動(dòng)畫(huà)播放前y軸比例,動(dòng)畫(huà)播放后y軸比例手素,
????????????x軸縮放軸點(diǎn)坐標(biāo)模式鸳址,x縮放軸點(diǎn)相對(duì)值,
????????????y軸縮放軸點(diǎn)坐標(biāo)模式泉懦,y軸縮放點(diǎn)相對(duì)值稿黍。
這里面的參數(shù)除了5和7參數(shù),其他的都是一個(gè)比例值崩哩,這么來(lái)說(shuō)吧巡球,我們?nèi)绻付?言沐,那他就是默認(rèn)位置的最左邊緣或者最上邊緣(看是x還是y了),如果我們指定0.5f酣栈,那就是默認(rèn)位置的一半長(zhǎng)度的位置险胰,如果指定1,那就是最右邊緣(或左下邊緣)矿筝,如果大于1也同樣能理解了起便,2就是默認(rèn)x(或y)長(zhǎng)度的2倍的位置。它相對(duì)的就是默認(rèn)的位置比例窖维。
我們來(lái)給他添加參數(shù):
我們?cè)O(shè)置的是從默認(rèn)位置的中心出發(fā)榆综,然后從0.5倍放大到1倍,這個(gè)TO_SELF屬性是我們相對(duì)自己铸史,他還有一個(gè)屬性是TO_PARENT——相對(duì)父布局鼻疮。
我們看一下效果:
3.旋轉(zhuǎn)
相信學(xué)完了平移和縮放之后,大家都知道這個(gè)補(bǔ)間動(dòng)畫(huà)是個(gè)什么意思了琳轿,而且一般是怎么操作了判沟,我們現(xiàn)在來(lái)看一下旋轉(zhuǎn)。
它對(duì)應(yīng)的類(lèi)是RotateAnimation:
我們發(fā)現(xiàn)這個(gè)參數(shù)也不少啊利赋,我們還是看這個(gè)最長(zhǎng)的水评,它對(duì)應(yīng)的參數(shù)分別是:
1.2.都是角度,用1減2就是旋轉(zhuǎn)的角度媚送,默認(rèn)順時(shí)針,值是正的就是順時(shí)針寇甸,負(fù)的就是逆時(shí)針塘偎。
3.x旋轉(zhuǎn)軸點(diǎn)類(lèi)型4.x軸點(diǎn)
5.y旋轉(zhuǎn)軸點(diǎn)類(lèi)型6.y軸點(diǎn)
這個(gè)4和6軸點(diǎn)跟縮放是一樣的,還是相對(duì)默認(rèn)位置的比例拿霉。
我們還是讓他旋轉(zhuǎn)點(diǎn)為默認(rèn)位置中心吟秩,然后逆時(shí)針旋轉(zhuǎn)90度,我們來(lái)看一下效果:
4.透明度(漸變)
他對(duì)應(yīng)的類(lèi)是AlphaAnimation:
他還是比較好弄的绽淘,構(gòu)造方法很簡(jiǎn)單涵防,我們看一下第二個(gè):
第一個(gè)是動(dòng)畫(huà)開(kāi)始前透明度,第二個(gè)是動(dòng)畫(huà)結(jié)束后透明度沪铭。這兩個(gè)參數(shù)都是從-1到1壮池,對(duì)應(yīng)完全透明到不透明。直接上代碼杀怠,+效果了:
關(guān)于Animation還有一些其他通用的方法:
setFillAfter(Boolean):視圖結(jié)束后保持結(jié)束位置椰憋,說(shuō)白了就是旋轉(zhuǎn)后還是轉(zhuǎn)后的位置,平移后還時(shí)平移后的位置赔退,縮放后還是縮放后的比例橙依。
setFillBefore(Boolean):同上正好相反证舟,如果這兩個(gè)方法都不操作,他默認(rèn)before的方法為true窗骑。
setRepeatCount(int):視圖重復(fù)次數(shù)女责,注意是重復(fù)次數(shù),不是變換次數(shù)创译。
三鲤竹、組合
上面我們學(xué)了補(bǔ)間動(dòng)畫(huà),他分別有平移昔榴、縮放辛藻、旋轉(zhuǎn)和漸變效果,我們同樣可以把他們組合起來(lái)互订,讓他們同時(shí)變換 吱肌,這里直接用.xml實(shí)現(xiàn)了(上面的四種同樣可以用.xml實(shí)現(xiàn)):
1.我們?cè)趓es目錄下創(chuàng)建名為anim的系統(tǒng)目錄,
2然后在里面創(chuàng)建.xml文件
我們看到我們里面添加了兩個(gè)標(biāo)簽仰禽,分別是translate和alpha氮墨,這個(gè)大家應(yīng)該都能看懂了,是平移和漸變吐葵。里面的一些屬性跟我們剛才構(gòu)造方法中的一模一樣规揪,
注意我們?cè)趕et標(biāo)簽里添加的一些屬性,duration效果時(shí)間温峭,fillAfter保持結(jié)束視圖猛铅。
我們通過(guò)AnimationUtils的loadAnimation方法來(lái)獲取剛才的.xml文件。
這是平移加漸變的效果凤藏,至于一開(kāi)始的例子和其他的效果奸忽,大家自由組合吧哈哈(悄悄說(shuō)一下,白色方塊旋轉(zhuǎn)的那個(gè)補(bǔ)間動(dòng)畫(huà)揖庄,用到了handler哦)栗菜。