寫在前面的幾句話
<p>
為什么起這個標題呢盲泛,其實并不是因為這個自定義的View有多難之拨,主要是因為上個版本才剛寫好的自定義的View動效旭旭,這個版本就改了,讓我有點不開森不见。
那先簡單看看這兩個動效圖吧
看起來其實都蠻復雜的澳化,但其實分步來慢慢實現(xiàn),就其實很簡單稳吮, 關鍵是去想的過程
實現(xiàn)效果圖
不是百分百吻痕視覺效果缎谷,需要更多的微調(diào),這里就把實現(xiàn)的思路去進行說明就好了
動效一的實現(xiàn)
<p>
主要說說實現(xiàn)的思路灶似,代碼就不貼上來列林,后面會把代碼地址貼上來瑞你,注釋也會寫的盡量詳細一些
實現(xiàn)動效無非是從靜態(tài)到動態(tài)的過程,所以第一步就是實現(xiàn)靜態(tài)的效果圖
靜態(tài)圖如下
看靜態(tài)圖希痴,可以看到組成部分
- 外圈有透明度的兩個大圓
- 實體綠色圓
- 實體綠色圓內(nèi)的圓環(huán)
- 中間的文字
這幾個都很好實現(xiàn)的者甲,所以其實靜態(tài)圖對我們來說并沒有多大的困難,那么我們來分析下運動的過程
來看下運動過程
- 1.字體運動效果 ->透明度變化
- 2.實體圓與圓環(huán)的運動效果 ->半徑從大到小砌创,并且有彈簧類似的效果
- 3.圓弧運動的效果 -> 一個圓弧不斷增大
- 4.對號的運動效果 -> 對號從消失到出現(xiàn)
- 5.外圈兩個圓的運動效果 -> 半徑變化與透明度變化
運動的前后順序
點擊后 外圈兩個圓的運動效果 + 字體運動效果 + 實體圓與圓環(huán)的運動效果 - >圓弧運動的效果 - >對號的運動效果
那簡單分析下每個運動過程的做法虏缸,由運動的順序來分析
第一步 外圈兩個圓的運動效果
我們看下這兩個圓是一直進行擴張運動,而且外圓的擴展速度明顯大于內(nèi)圓嫩实,并且隨著運動顏色越來越淺
我們只要將顏色透明度設置即可以讓顏色變淺刽辙,而且也不用考慮兩個圓先后的問題,因為顏色是透明的情況下甲献,是有穿透的效果宰缤,所以這里我們要改變的值是圓的半徑與圓的顏色透明度問題,顏色透明度的話通過10進制255-0來改變晃洒,但是其實可以通過圓半徑比例來計算顏色的變化撵溃,所以最后其實是變成圓的半徑變化的問題了。
第二步 字體運動效果
字體運動其實主要是透明度變化上面其實也說了從255-0變化就好了锥累,但是其實在某些機型上會出現(xiàn)問題,是當顏色從10進制轉(zhuǎn)成16進制后集歇,不能識別該顏色桶略,所以從255到>0的某個值就可以了
第三步 實體圓與圓環(huán)的運動效果
這個其實也是一樣,半徑的變化诲宇,減小到變大际歼,設置一個BounceInterpolator就可以實現(xiàn)類似彈簧的效果了
第四步 圓弧運動的效果
其實這里是有兩個圓弧的 ,一個是默認底色的圓弧姑蓝,另一個是帶顏色可以運動的圓弧鹅心,那么其實設置一個從0到360度的變化,就可以達到一個運動圓弧的效果
第五步 對號的運動效果
這個對號其實是繪制一個Path的路徑纺荧,通過PathMeasure計算出Path路徑的長度旭愧,然后通過長度的變化達到對號的繪制效果。
到這里也就分析結(jié)束了宙暇,其實經(jīng)過分析后整個動效的運動就很清晰了输枯,也沒有那么復雜了
動效二的實現(xiàn)
<p>
首先自然也是從靜態(tài)圖進行分析
靜態(tài)效果圖其實很好分析出來,四個橢圓分別豎著放和橫著放還有斜對角放,那我們分析下應該怎么選擇會是比較好的方法
如果是用每個橢圓坐標來計算的話占贫,那就太麻煩了桃熄,特別是后面的運動會特別坑的,所以這里我們用Canvas里面的旋轉(zhuǎn)畫布的方法來把同一樣坐標的橢圓旋轉(zhuǎn)到指定的位置型奥,這樣就可以實現(xiàn)這樣四個圓疊加的效果了瞳收,注意圓的顏色透明度
另外有沒有發(fā)現(xiàn)從上到下其實是有顏色的變化的碉京,所以這里其實是有顏色的過渡的效果的,我們使用的是LinearGradient(線性漸變)通過設置兩種顏色來實現(xiàn)顏色的過渡螟深,但是LinearGradient是從左上方到右下方的谐宙,所以通過旋轉(zhuǎn)畫布來實現(xiàn)從上到下的顏色過渡效果
所以我們要繪制的內(nèi)容如下
- 四個橢圓,方向不同
- 線性漸變
- 文字
接下來看一下動態(tài)圖
來看下運動過程
- 1.字體變化 -> 透明度變化
- 2.橢圓的變化 -> 旋轉(zhuǎn)血崭,橫向大小的變化
- 3.每一個Item的變化 ->從無到有卧惜,然后一直運動,有時間差值
那簡單分析下每個運動過程的做法
第一步 字體運動效果
這個其實上面有介紹過夹纫,參考上面就可以了
第二步 橢圓的變化
橢圓有兩個變化一個是旋轉(zhuǎn)變化咽瓷,旋轉(zhuǎn)呢用前面的旋轉(zhuǎn)畫布實現(xiàn)就可以了,橫向大小變化則不做說明了
第三步 每一個Item的變化
其實每個Item都是一個對象舰讹,有一個運動的最大值與最小值茅姜,而且從動態(tài)圖可以看到從無到有有到最小值,與最大值月匣,所以這些用隨機數(shù)生成就好了钻洒,其實運動則是從無到這個值,然后值從最大到最小運動锄开,就好了素标,而且控制一下Item的出現(xiàn)時間就可以了
基本分析完了,其實理論上都很簡單萍悴,其實也確實很簡單头遭,更多的內(nèi)容通過代碼去查看就好了