? ? ? 最近的項(xiàng)目里碰到一個(gè)六邊形的進(jìn)度條控件佃延,至于為什么說(shuō)是神奇的,呵呵夷磕,因?yàn)橐郧罢娴臎]碰到過這種進(jìn)度條履肃,有木有,github上三方也找不到坐桩,有木有尺棋,一臉懵逼感覺不會(huì)寫,有木有绵跷,就用一個(gè)圓不好嘛- -膘螟。對(duì)于自定義控件這一塊比較薄弱(onMeasure( ), onLayout( ), onDraw( )是什么? 可以吃么)的我來(lái)說(shuō)成福。萬(wàn)萬(wàn)沒想到。荆残。奴艾。。内斯。蕴潦。。嘿期。品擎。埋合。备徐。。竟然大致實(shí)現(xiàn)了- -甚颂。不得不佩服下自己的智商(呵呵蜜猾。。振诬。蹭睡。)。
? ? ?這里先給大家展示一下效果:
? ? ?怎么樣赶么?是不是有種動(dòng)漫里面畫魔法陣的感覺 ?
? ? ?首先先簡(jiǎn)單的說(shuō)下思路肩豁,該思路沒有語(yǔ)言限制,可同樣用于IOS辫呻,WEB等其他語(yǔ)言的界面開發(fā)中清钥,F(xiàn)irst,你要對(duì)三角函數(shù)有一定的了解放闺,至于沒有聽過三角函數(shù)這個(gè)名字的朋友們可以省略以下內(nèi)容祟昭,直接翻到博客底部點(diǎn)擊最下方鏈接下載控件并在需要的時(shí)候直接應(yīng)用到你們的項(xiàng)目中就好。簡(jiǎn)要的思路如下圖所示(嘗試了下電腦繪圖怖侦,好麻煩- -篡悟,請(qǐng)各位讀者原諒我拙劣的畫工)
從上圖中我們可以看到,將六邊形的變成設(shè)為 L(這里可以通過控件的寬度來(lái)計(jì)算)匾寝,然后我們可以根據(jù)這個(gè)變長(zhǎng)分別算出六邊形六個(gè)頂點(diǎn)的坐標(biāo)搬葬,如圖。具體的計(jì)算步驟已經(jīng)寫在上圖艳悔。
轉(zhuǎn)換成代碼如下急凰。這里的寬度可直接通過布局中的xml來(lái)設(shè)置。在onMeasure( )中實(shí)現(xiàn)
接下來(lái)就是畫進(jìn)度條了很钓,我們這里將進(jìn)度條默認(rèn)為百分之百的香府,然后分為六個(gè)區(qū)間(六邊形有六條邊董栽,對(duì)應(yīng)區(qū)間:{[0,100/6),[100/6,100/6 *2),[100/6*2,100/6*3),[100/6*3,100/6*4),[100/6*4,100/6*5),[100/6*5,100]},分別對(duì)相應(yīng)的區(qū)間進(jìn)行進(jìn)度條的繪制企孩。
我這里舉一個(gè)栗子锭碳,區(qū)間為[100/6*2,100/6*3)其他區(qū)間的繪制同理,具體可以參考下圖
然后接下來(lái)如何通過Paint在點(diǎn)與點(diǎn)之間畫線我這里就不多做介紹了勿璃。
具體的代碼實(shí)現(xiàn)如下:
怎么樣擒抛,看完本篇博客的你還有沒有表示一臉懵逼,如果懵逼也不要緊补疑。點(diǎn)擊下方鏈接下載控件并在需要的時(shí)候直接應(yīng)用到你們的項(xiàng)目中就好- -