Android自定義 View 練習(xí) —— 心電圖的繪制

先上個(gè)效果圖(畫塊餅)嘹屯,讓你有耐心看完下面內(nèi)容。

這里寫圖片描述

網(wǎng)上已經(jīng)有不少人,把類似的效果做出來(lái)了衣迷。我就把自己做出這個(gè)效果的思路寫出來(lái),希望對(duì)想對(duì)自定義 View 有更深理解的朋友有幫助酱酬。

先作一個(gè)草圖壶谒,打開(kāi) Windows 自帶的“畫圖”軟件,OS X 系統(tǒng)的就找個(gè)類似的軟件吧膳沽。先想好汗菜,再來(lái)畫個(gè)草圖。我畫的草圖如下:

這里寫圖片描述

看到這挑社,可能有人有疑問(wèn)了陨界,寫自定義 View 怎么不寫代碼啊,我是來(lái)看代碼的滔灶,最好把完整代碼貼出來(lái)普碎,畫這些圖有 * 用啊。有的高手能夠在腦海里把很復(fù)雜的自定義 View 想象出來(lái)录平。為了說(shuō)服你最好畫一畫圖麻车,我在這里簡(jiǎn)單說(shuō)幾句,個(gè)人認(rèn)為畫圖是個(gè)重要的步驟斗这,能事半功倍动猬。想法是代碼的靈魂,先想好想法表箭,再去寫代碼就容易了赁咙,類似于“胸中有文章,下筆如涌泉”免钻。假如你是新手階段彼水,對(duì)著別人的代碼敲可以有進(jìn)步,但如果你一直都是對(duì)著別人的代碼敲然后敲成一個(gè)項(xiàng)目的极舔,你自己深想一下凤覆,有沒(méi)有前途?畫了圖之后拆魏,你的思維就被解放了盯桦,不會(huì)深陷于文字之中,還可能激發(fā)出新的想法渤刃,你就會(huì)想辦法實(shí)現(xiàn)它拥峦。如果你沒(méi)嘗試過(guò)的話,可以試一試卖子,頂多就是半個(gè)小時(shí)的時(shí)間略号,如果你有特別深刻的體驗(yàn),那恭喜你學(xué)會(huì)了一種新方式;如果沒(méi)有玄柠,你只是進(jìn)行了一次風(fēng)險(xiǎn)不大的嘗試氛琢,人生的驚喜就在于新的嘗試。

看著你畫的草圖随闪,我們可以看到屏幕寬度是已知的,設(shè)置大格子的數(shù)目后骚勘,大格子的寬度也就確定了铐伴。這個(gè)時(shí)候有思緒了,需要橫縱兩個(gè)方向的格子數(shù)量俏讹。來(lái)設(shè)置兩個(gè)全局變量:

這里寫圖片描述

horizontalBigGirdNum 為橫向的線当宴,即縱向大格子的數(shù)量。verticalBigGirdNum 為縱向的線泽疆,即橫向大格子的數(shù)量户矢。

在 XML 文件中使用:

這里寫圖片描述

在 xml 中寬 360 dp( match_parent ),高 270 dp殉疼,也就是 3 : 4 的關(guān)系梯浪。
horizontalBigGirdNum = 6,verticalBigGirdNum = 8瓢娜,橫向八個(gè)格子挂洛,縱向六個(gè)格子,這樣劃分比較科學(xué)眠砾。

正式開(kāi)始寫代碼虏劲。首先初始化畫筆。

這里寫圖片描述

在 onSizeChanged() 方法調(diào)用后褒颈,View 的寬高也就確定了柒巫。我們可以在這個(gè)方法里面來(lái)確定每個(gè)大格子的寬度。

這里寫圖片描述

在 onDraw() 方法中進(jìn)行繪畫谷丸。
將畫網(wǎng)格寫在一個(gè)方法中堡掏,并設(shè)置標(biāo)志位,這樣可以設(shè)置一個(gè) public 方法來(lái)設(shè)置是否畫網(wǎng)格淤井。

這里寫圖片描述

畫網(wǎng)格的方法:

這里寫圖片描述

到這里布疼,網(wǎng)格就出來(lái)了。

接下來(lái)就是重點(diǎn)币狠,畫心電圖了游两。
畫草圖。

這里寫圖片描述

分析:一條這樣的線我們可以用 Path 類來(lái)畫漩绵,畫筆 Paint的類型記得設(shè)為 Paint.Style.STROKE(不然會(huì)很難看)贱案。

這里寫圖片描述

沒(méi)有數(shù)據(jù)是出不了效果的,我們來(lái)生成一些模擬的數(shù)據(jù)。

這里寫圖片描述

如果你需要將真實(shí)的心電圖數(shù)據(jù)(比如說(shuō)從傳感器通過(guò)藍(lán)牙傳送過(guò)來(lái)的)放進(jìn)來(lái)的話宝踪,只要設(shè)置一個(gè) public 方法從外面?zhèn)鲄?shù)進(jìn)來(lái)就好了侨糟。

到了這里,軌跡就能畫出來(lái)了瘩燥。但是秕重,它不能像真實(shí)心電圖那樣將心電軌跡慢慢呈現(xiàn)出來(lái),而是一下子就顯示出來(lái)了厉膀。

我們可以加個(gè)延時(shí)溶耘,將心電圖的點(diǎn)一個(gè)一個(gè)慢慢地連接起來(lái)。讓我來(lái)做個(gè)比喻服鹅。我們都玩過(guò)貪吃蛇的游戲凳兵,每個(gè)蛇要吃的點(diǎn)就是數(shù)據(jù)源的坐標(biāo),沒(méi)加延時(shí)情況下企软,貪吃蛇的速度很快庐扫,我們一眨眼的瞬間它就吃完了,我們就馬上看到了整體曲線仗哨,而加了延時(shí)后形庭,貪吃蛇的速度就慢了,它慢慢地經(jīng)過(guò)點(diǎn)然后吃掉變長(zhǎng)藻治,我們也就看到了軌跡形成的過(guò)程碘勉。

代碼實(shí)現(xiàn)如下:

這里寫圖片描述

增加延時(shí),并且使上面的代碼持續(xù)地執(zhí)行桩卵。

這里寫圖片描述

項(xiàng)目代碼:
完整代碼
(用 AS 的話太大了验靡,還是用 Eclipse 的項(xiàng)目吧)

到此,心電圖就基本完成了雏节。這只是一個(gè)簡(jiǎn)單的繪畫胜嗓,要想做的更好,還有許多事情要做钩乍,比如說(shuō)封裝入庫(kù)等辞州。如果你是一個(gè)想練習(xí)自定義 View 的初學(xué)者,我想這篇文章會(huì)對(duì)你有所啟發(fā)寥粹。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末变过,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子涝涤,更是在濱河造成了極大的恐慌媚狰,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阔拳,死亡現(xiàn)場(chǎng)離奇詭異崭孤,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門辨宠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)遗锣,“玉大人,你說(shuō)我怎么就攤上這事嗤形【ィ” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵赋兵,是天一觀的道長(zhǎng)还最。 經(jīng)常有香客問(wèn)我,道長(zhǎng)毡惜,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任斯撮,我火速辦了婚禮经伙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘勿锅。我一直安慰自己帕膜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布溢十。 她就那樣靜靜地躺著垮刹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪张弛。 梳的紋絲不亂的頭發(fā)上荒典,一...
    開(kāi)封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音吞鸭,去河邊找鬼寺董。 笑死,一個(gè)胖子當(dāng)著我的面吹牛刻剥,可吹牛的內(nèi)容都是我干的遮咖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼造虏,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼御吞!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起漓藕,我...
    開(kāi)封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤陶珠,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后撵术,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體背率,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寝姿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片交排。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖饵筑,靈堂內(nèi)的尸體忽然破棺而出埃篓,到底是詐尸還是另有隱情,我是刑警寧澤根资,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布架专,位于F島的核電站,受9級(jí)特大地震影響玄帕,放射性物質(zhì)發(fā)生泄漏部脚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一裤纹、第九天 我趴在偏房一處隱蔽的房頂上張望委刘。 院中可真熱鬧,春花似錦鹰椒、人聲如沸锡移。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)淆珊。三九已至,卻和暖如春奸汇,著一層夾襖步出監(jiān)牢的瞬間施符,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工擂找, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留操刀,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓婴洼,卻偏偏與公主長(zhǎng)得像骨坑,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子柬采,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,116評(píng)論 25 707
  • 從接觸android藍(lán)牙開(kāi)發(fā)到現(xiàn)在已兩月有余欢唾,將自己一個(gè)個(gè)小小的知識(shí)點(diǎn)積攢起來(lái),以便日后查閱粉捻。android藍(lán)...
    wh_mouse閱讀 14,363評(píng)論 41 25
  • 當(dāng)Android原生控件無(wú)法滿足需求時(shí)就要自定義View杏头,只有掌握了View的測(cè)量過(guò)程 (measure)、布局過(guò)...
    小蕓論閱讀 7,252評(píng)論 7 54
  • 回到家已經(jīng)十一點(diǎn)沸呐,草草洗漱坐電腦前準(zhǔn)備一天的收尾工作醇王。 建了電子工作日志,這個(gè)每天要寫崭添,好處很大寓娩。再一個(gè)工作就是寫...
    心甲閱讀 198評(píng)論 1 0
  • 一一記一個(gè)弱女子去臺(tái)灣創(chuàng)建和傳播崇德文化的心路歷程 離開(kāi)痛愛(ài)自己的父母 向千里之外的異鄉(xiāng)遠(yuǎn)赴 傳播圣人的文化學(xué)術(shù) ...
    王小永_6be2閱讀 5,146評(píng)論 0 1