哈嘍幻枉,又和大家見面了,我們之前已經(jīng)將屬性動(dòng)畫學(xué)習(xí)的差不多了跟啤,今天我們就做一個(gè)很簡單很簡單的小功能吧,正好今天是5月21號(hào)唉锌,給各位大兄弟們提供一個(gè)裝B的時(shí)刻隅肥,讓人們知道程序員可是懂浪漫的哈哈!
好了袄简,話不多說腥放,我們來實(shí)現(xiàn)一個(gè)小功能——?jiǎng)討B(tài)桃心彈出。
首先先給大家看一下model的效果:只是效果初步實(shí)現(xiàn)了绿语,具體的優(yōu)化和創(chuàng)新還是要看在座的各位是否有心了哈哈:
這個(gè)初步的Model是有點(diǎn)low哈秃症,不過問題不大,畢竟咱們心意在這里了對(duì)吧吕粹,好了种柑,接下來,我們看一下這個(gè)效果是如何實(shí)現(xiàn)的:
實(shí)現(xiàn)流程:
繪制桃心:首先我們通過心形線方程得到他的參數(shù)方程匹耕,然后通過唯一的參數(shù)r聚请,設(shè)置一個(gè)小范圍的循環(huán)去遍歷r,用二維數(shù)組存儲(chǔ)得到的x稳其,y的值驶赏,最后用Path把數(shù)組存儲(chǔ)的點(diǎn)一次鏈接,這樣繪制桃心就得到了既鞠。
動(dòng)畫:需要兩步:
1.寫一個(gè)桃心的Bean類煤傍,里面存儲(chǔ)兩個(gè)屬性,a和b(具體a和b是什么我們下面再說)
2.寫對(duì)應(yīng)Bean類的估值器嘱蛋。
動(dòng)作:
通過按鍵的點(diǎn)擊事件來觸發(fā)動(dòng)畫的start方法蚯姆。
如此一來椅寺,我們的效果就大體實(shí)現(xiàn)了。
接下來我們看一下詳細(xì)的實(shí)現(xiàn)過程:
1.心形線方程蒋失。
因?yàn)槲覀円嬕粋€(gè)桃心,而我們的畫布canvas是不能直接畫出來桃心的桐玻,所以我們需要用心形線的方程去自己繪制一個(gè)桃心出來篙挽。
這是心形線的方程,
x^2+y^2+a*x=a*sqrt(x^2+y^2) 和 x^2+y^2-a*x=a*sqrt(x^2+y^2)
看著是很惡心對(duì)吧镊靴,不過問題不大铣卡,我們需要的不是這個(gè)方程,我們是需要得到他的參數(shù)方程:
x=a(1+2cost+cos2t)
y=b(2sint+sin2t)
現(xiàn)在我們得到了他的參數(shù)方程偏竟。
2.創(chuàng)建我們所需要的各種類:
1.PeachView類:
這是我們的自定義控件煮落,用View繼承。然后重寫兩個(gè)構(gòu)造方法和onDraw方法踊谋。
我們的PeachView類中需要這幾個(gè)屬性蝉仇。首先第一個(gè)畫筆是必須要的。第二個(gè)參數(shù)就是我們要用來存儲(chǔ)桃心的坐標(biāo)點(diǎn)的一個(gè)數(shù)組殖蚕。第三個(gè)參數(shù)是我們等會(huì)要定義的桃心類轿衔,里面有a和b兩個(gè)參數(shù),至于ab是什么睦疫,看我們的參數(shù)方程害驹。最后一個(gè)參數(shù)就是我們的動(dòng)畫,不多說了蛤育。
然后我們來看這幾個(gè)初始化的方法宛官,首先是兩個(gè)構(gòu)造方法,這個(gè)pass瓦糕。initPaint方法是我們初始化畫筆的方法底洗,setPeach是我們給獲取當(dāng)前桃心的坐標(biāo)的方法搬俊,我們獲取桃心周圍的500個(gè)點(diǎn)坝橡。
然后我們看一下繪制的過程:首先將canvas坐標(biāo)移動(dòng)到中心,然后逆時(shí)針旋轉(zhuǎn)90°(因?yàn)樘倚牡男姆较蚴浅鴛負(fù)半軸寻咒。)
然后我們通過Path連點(diǎn)成線谭胚,把我們剛才拿到的500個(gè)坐標(biāo)一次連城一條線徐块,然后繪制。
jumpPeach方法是開始動(dòng)畫灾而,具體的邏輯應(yīng)該不用多說了胡控,跟我們之前小球動(dòng)畫的邏輯一模一樣。
isRunning方法是判斷當(dāng)前動(dòng)畫是否在進(jìn)行中旁趟。
2.Peach的Bean類:
東西看著就很簡單了昼激。只是一個(gè)構(gòu)造方法和對(duì)應(yīng)的獲取字段值的方法。
3.估值器類:
這個(gè)估值器類也是很簡單的,只是把新獲取到的ab值給放到新的對(duì)象橙困,然后返回瞧掺。
好了,以上是我們的全部代碼凡傅,最后看一下我們Activity的使用流程:
這個(gè)是有點(diǎn)亂哈辟狈,筆者只是用最快最簡單的方法寫出來了,大家可以去優(yōu)化邏輯結(jié)構(gòu)夏跷。我們來看一下它的過程:
首先獲取桃心控件哼转,然后獲取按鈕控件之后,設(shè)置監(jiān)聽器:
首先讓桃心跳動(dòng)起來槽华,然后創(chuàng)建一個(gè)子線程壹蔓,在里面判斷跳動(dòng)是否結(jié)束,如果結(jié)束了就彈出對(duì)話框(其實(shí)這個(gè)子線程用Handler代替更好猫态,佣蓉,更簡便哈哈)
好了,現(xiàn)在為止我們的心跳表白就徹底完成了亲雪。當(dāng)然跟Dream老師的雪花表白特效相比是Low多了-偏螺。+。
/*剛給小仙女看一一下匆光,居然說還行套像,看來那就能過關(guān)哈哈,畢竟心意在那里擺著呢/*
不過就算很Low很直男也無所謂终息,畢竟咱們是為了提升自己技術(shù)嘛對(duì)吧夺巩,所以各位要慎重優(yōu)化,千萬別在女神面前丟了臉哈哈V苷浮柳譬!