HarmonyOS - 基于ArkUI(ETS) 實現(xiàn)心電圖組件

前言
隨著大家生活水平的提升,越來越多的人注重自身身心健康,養(yǎng)生成了目前比較熱門的活動。心電圖是檢測心臟活動狀態(tài)的直觀表現(xiàn),可以通過心電圖來觀察人提的健康狀況。
響應鴻蒙萬物互聯(lián)的口號,肯定少不了智能設備和心電檢測設備的互聯(lián)。所以本文實現(xiàn)了簡單的心電圖功能UI展示。
效果圖

組件API
ygEcg
屬性名  | 類型  | 默認值  | 描述  | 
ecgData  | -  | 配置心電圖的信息  | 
接口 EcgDataType
參數(shù)名  | 參數(shù)類型  | 必填  | 默認值  | 參數(shù)描述  | 
data  | Array<number>  | 是  | -  | 心電數(shù)據(jù)源  | 
timeStep  | number  | 是  | 40  | 每一小格代表時間(毫秒),x軸方向  | 
mvStep  | number  | 是  | 0.1  | 每小格表示電壓(毫伏/mv),y軸方向  | 
waveLineColor  | string  | 是  | -  | 波線顏色  | 
gridColor  | Array<string>  | 是  | -  | 網(wǎng)格顏色,第一個為小網(wǎng)格,第二個為大網(wǎng)格  | 
maxTime  | number  | 是  | -  | 圖標顯示最大時間區(qū)域(毫秒)  | 
width  | number  | 是  | -  | 畫布寬度  | 
height  | number  | 是  | -  | 畫布高度  | 
backgroundColor  | string  | 是  | -  | 畫布背景色  | 
組件調(diào)用
實現(xiàn)前的準備
在寫這個demo之前,以為心電圖應該就是現(xiàn)在簡單的上下波動的折線圖。
實現(xiàn)原理
通過使用canvas組件,繪制一個類似醫(yī)學上的心電圖紙網(wǎng)格,然后通過心電源數(shù)據(jù),繪制對應的折線形成心電波形。
實現(xiàn)過程
1、創(chuàng)建canvas畫布
2、繪制小網(wǎng)格
因為通上面的心電波形圖解得知,默認一個小網(wǎng)格的走紙速度是0.04秒,也就是40毫秒,通過傳入的數(shù)據(jù)timeStep字段控制
那么要繪制多少個小格呢?通過畫布寬度,和maxTime字段(最大的顯示時間,上面代碼案例是6000毫秒)可以計算得知,將要繪制。
6000/40=150小格。
3、繪制大網(wǎng)格
每1大格等于5小格。
最后繪制的結(jié)果如圖:

4、繪制心電波形
獲取畫布高度的一半位置,作為心電波形的基線,在基線的基礎上,通過心電數(shù)據(jù)源,將每個數(shù)據(jù)在基線上通過對數(shù)據(jù)的偏于來繪制點線,最后形成一個折線狀態(tài)的心電波形線。
刷新預覽器看看效果:

5、最后一步實現(xiàn)心跳的動畫效果
這里的動畫刷新時間是根據(jù)配置的心電圖步長來做定時器的時間,默認是40毫秒,也就是每一小格走紙的時間。這樣就可以保持跟實際時間對應,不會出現(xiàn)心跳快慢的問題。
當然,這里還是有寫誤差的,因為代碼執(zhí)行的過程也是消耗時間的,會比實際時間多一丟丟。
最后再來看一下心電圖的動畫效果:

代碼地址
??https://gitee.com/yango520/yg-ecg2??
總結(jié)
繪制這個心電圖沒有用到重繪機制,動畫效果是每次繪制的時候覆蓋在原有的波形線上的,但是這樣會比重繪整個畫布性能更好一些。
通過實現(xiàn)這個demo之后,對心電圖上的信息有了全新的了解,我覺得大家都可以去學會看心電圖來分析心臟狀況,自己理解了總比別人告知更有說服力。
避坑小技巧
- 當代碼大變更的時候(一般復制出來單獨做一個文件的時候),需要在build選項卡里清理項目,不然也不報錯,也不刷新,但是樣式就是錯亂。
 - 預覽器開久了之后,當一段時間不動了,再次刷新開啟都一直卡著開啟中進不去,需要關閉IDE重新打開才可以用。
 















 
 
 


















 
 
 
 