自定義View-畢達(dá)哥拉斯樹

讓我們一起來擼個android版本的畢達(dá)哥拉斯樹吧

先上個效果圖

bida.png

我們這里是利用繼承View來實(shí)現(xiàn)自定義View的

繼承View主要是要重寫兩個函數(shù) onDraw()和onMeasure()

onDraw() :我們想要的顯現(xiàn)的內(nèi)容一般都是要在這個函數(shù)里面寫的

onMeasure():測量View的大小蛔溃。

先看我onDraw()的代碼

super.onDraw(canvas);
float cx=getMeasuredWidth()/2;
float cy=getMeasuredHeight()/2;
cx=Math.min(cx,cy);
int restore=canvas.save();
canvas.translate(cx , cy );
canvas.drawRect(0, 0, cx / 3f, cx / 3f, paint);
create(canvas, deep, cx / 3f);
canvas.restoreToCount(restore);

我們可以看到我的onDraw()代碼里面是先畫了一個最底層的正方形冰抢。然后就是create()函數(shù)了.

在看create函數(shù)之前叛氨,我們先看看下面這張圖

![T@SAGRY}Q$$LY$}B2KCX]1I.png](http://upload-images.jianshu.io/upload_images/1250148-5a8cd1266470e507.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

這張圖其實(shí)是整個畢達(dá)哥斯拉樹的縮影。我們可以看出來所有這顆樹的其他結(jié)構(gòu)都是這個是一樣的盹靴,只是大小和位置上的不同第练。 我們在仔細(xì)觀察這個圖,可以發(fā)現(xiàn)這三個正方形之間所成的三角形是直角三角形-/(ㄒoㄒ)/~~這也是為什么叫做畢達(dá)哥斯拉樹的原因每强。
既然知道是直角三角形始腾,那么我們就可以利用大正方形的邊長州刽,角度和sin函數(shù)計(jì)算出另外兩個正方形的邊長。(我這個圖的角度是60度)浪箭。

OK穗椅,說了那么多,我們現(xiàn)在就來正式看看我的create()函數(shù)

create():

private void create(Canvas canvas,int deep,float length){
if(deep==0){//遞歸結(jié)束
   return ;
}
float angle1= (float) (Math.PI*(angle/180));
canvas.rotate(-angle);//旋轉(zhuǎn)angle角度
Log.d("cos60","cos 60"+(float)60f*(float)Math.sin(angle1));
Log.d("create","Length  "+length+"   cos  "+(float) (length * Math.cos(angle1))+"   angle  "+angle1);
canvas.translate(0, -(float) (length * Math.cos(angle1)));//平移左上正方形的邊長么
canvas.save();//保存下畫布的狀態(tài)
int clolor=getColor(deep);
paint.setColor(clolor);
canvas.drawRect(0, 0, (float) (length * Math.cos(angle1)), (float) (length * Math.cos(angle1)), paint);
create(canvas, deep - 1, (float) (length * Math.cos(angle1)));
canvas.restore();
canvas.translate((float) (length * Math.cos(angle1)), 0);
canvas.translate(0, (float) (length * Math.cos(angle1)));
clolor=getColor(deep);
paint.setColor(clolor);
canvas.drawRect(0, 0, (float) (length*Math.sin(angle1)),  (float) (length*Math.sin(angle1)), paint);
canvas.translate( (float) (length*Math.sin(angle1)), 0);
canvas.rotate(90f);
create(canvas, deep - 1,  (float) (length*Math.sin(angle1)));
}
~~~~~ ZZZZ奶栖,看完之后有沒有感覺到so easy呢匹表。這個函數(shù)呢其實(shí)也就是在旋轉(zhuǎn)畫布和不停的遞歸辣/(ㄒoㄒ)/。deep是遞歸的深度-也就是樹繁茂的程度宣鄙。我們其實(shí)可以利用這個deep屬性來實(shí)現(xiàn)一種動畫的效果袍镀,實(shí)現(xiàn)一種樹在生長的過程。/(ㄒoㄒ)/~~
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末冻晤,一起剝皮案震驚了整個濱河市苇羡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鼻弧,老刑警劉巖设江,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異攘轩,居然都是意外死亡叉存,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門撑刺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鹉胖,“玉大人,你說我怎么就攤上這事够傍「Σぃ” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵冕屯,是天一觀的道長寂诱。 經(jīng)常有香客問我,道長安聘,這世上最難降的妖魔是什么痰洒? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮浴韭,結(jié)果婚禮上丘喻,老公的妹妹穿的比我還像新娘。我一直安慰自己念颈,他們只是感情好泉粉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般嗡靡。 火紅的嫁衣襯著肌膚如雪跺撼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天讨彼,我揣著相機(jī)與錄音歉井,去河邊找鬼。 笑死哈误,一個胖子當(dāng)著我的面吹牛哩至,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播黑滴,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼憨募,長吁一口氣:“原來是場噩夢啊……” “哼紧索!你這毒婦竟也來了袁辈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤珠漂,失蹤者是張志新(化名)和其女友劉穎晚缩,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體媳危,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡荞彼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了待笑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸣皂。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖暮蹂,靈堂內(nèi)的尸體忽然破棺而出寞缝,到底是詐尸還是另有隱情,我是刑警寧澤仰泻,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布荆陆,位于F島的核電站,受9級特大地震影響集侯,放射性物質(zhì)發(fā)生泄漏被啼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一棠枉、第九天 我趴在偏房一處隱蔽的房頂上張望浓体。 院中可真熱鬧,春花似錦辈讶、人聲如沸命浴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咳促。三九已至稚新,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間跪腹,已是汗流浹背褂删。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留冲茸,地道東北人屯阀。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像轴术,于是被迫代替她去往敵國和親难衰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

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