日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
【圖解鴻蒙】使用繪圖組件Canvas繪制心率曲線圖

想了解更多內(nèi)容,請訪問:

創(chuàng)新互聯(lián)公司服務項目包括零陵網(wǎng)站建設、零陵網(wǎng)站制作、零陵網(wǎng)頁制作以及零陵網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網(wǎng)行業(yè)的解決方案,零陵網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到零陵省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!

和華為官方合作共建的鴻蒙技術社區(qū)

https://harmonyos./#zz

一、運行效果

在頁面中顯示頁面標題、心率曲線圖、心率最大值及其圖標、心率最小值及其圖標、心率在每分鐘內(nèi)的平均次數(shù)。如下圖所示:

二、實現(xiàn)思路

在頁面的生命周期事件函數(shù)onInit()中,隨機生成若干個指定范圍內(nèi)的整數(shù),以作為所有的心率數(shù)據(jù)。根據(jù)隨機生成的整數(shù)統(tǒng)計所有心率的最大值、最小值和平均值,并通過動態(tài)綁定的方式將其顯示在頁面中。使用組件chart繪制心率曲線圖。通過動態(tài)綁定的方式指定組件chart中屬性options和datasets的值,以對圖形的參數(shù)進行設置。

三、代碼詳解

打開文件index.hml。

將組件text中顯示的頁面標題修改為:心率曲線,并在其外層嵌套一個組件div,以便對其樣式進行設置。將該組件div的屬性class的值設置為"title-container"。

在頁面標題的下方添加一個組件div以顯示心率曲線圖,并將屬性class的值設置為"chart"。

在心率曲線圖的下方添加一個組件list,以顯示心率的最大值、最小值及其圖標,并將屬性class的值設置為"list"。

在組件list的內(nèi)部嵌套一個組件list-item以顯示列表中的每個列表項,并將屬性class的值設置為"list-item"。通過動態(tài)綁定的方式指定屬性for的值為"{{maxmin}}",從而對index.js中data里面的maxmin進行迭代。

每個列表項都由一張圖片和一個文本組成,因此在組件list-item中添加一個組件image和一個組件text。

在組件image中將屬性class的值設置為"icon",并通過動態(tài)綁定的方式將屬性src的值設置為"/common/{{$item.iconName}}.png"。這樣,report2.js中data里面的maxmin可以是一個字典的數(shù)組,數(shù)組中的每個字典都包含一個key為iconName的元素。

在組件text中將屬性class的值設置為"maxmin",并通過動態(tài)綁定的方式將顯示的文本設置為"{{$item.mValue}}"。這樣,對于index.js中data里面的數(shù)組maxmin,其中的每個字典都包含一個key為mValue的元素。

在列表的下方添加一個組件div以顯示心率在一分鐘內(nèi)的平均次數(shù),并將屬性class的值設置為" average-container "。

在組件div中嵌套定義三個組件text,其屬性class的值分別為:"average"、"average-number"和"average",其顯示的文本分別為:平均、{{average}}、次/分。

上述講解請見如下代碼:

   
 
 
 
  1.     
  2.         
  3.             心率曲線
  4.         
  5.     
  •     
  •     
  •     
  •         
  •             
  •             
  •                 {{$item.mValue}}
  •             
  •         
  •     
  •     
  •         
  •             平均
  •         
  •         
  •             {{average}}
  •         
  •         
  •             次/分
  •         
  •     
  •  打開文件index.css。

    在類選擇器container中刪除樣式display、left和top。將flex-direction的值設置為column,以在豎直方向上排列容器內(nèi)的所有組件。將justify-content的值修改為flex-start,以讓容器內(nèi)的所有組件在主軸上向上對齊。

    在類選擇器title中刪除樣式text-align、width和height。將font-size的值修改為38px。將margin-top的值設置為40px,以讓頁面標題與頁面的上邊緣保持一定的間距。

    添加一個名為title-container的類選擇器,以設置頁面標題的樣式。將justify-content和align-items都設置為center,以讓容器內(nèi)的組件在水平方向和豎直方向都居中對齊。將寬度width和高度height的值分別設置為300px和130px。

    添加一個名為chart的類選擇器,以設置心率曲線圖的樣式。將寬度width和高度height的值分別設置為400px和180px。

    添加一個名為list的類選擇器,以設置列表的樣式。將flex-direction的值設置為row,以在水平方向上排列所有列表項。將寬度width和高度height的值分別設置為240px和45px。

    添加一個名為list-item的類選擇器,以設置列表項的樣式。將justify-content和align-items都設置為center,以讓列表項內(nèi)的組件在水平方向和豎直方向都居中對齊。將寬度width和高度height的值分別設置為120px和45px。

    添加一個名為icon的類選擇器,以設置心率的最大值圖標和最小值圖標的樣式。將寬度width和高度height的值分別設置為32px和32px。

    添加一個名為maxmin的類選擇器,以設置心率的最大值文本和最小值文本的樣式。將font-size的值設置為24px。將letter-spacing的值設置為0px,以讓數(shù)字之間的間距更緊湊。

    添加一個名為average-container的類選擇器,以設置心率平均值的相關文本的樣式。將justify-content的值設置為space-between,以讓容器內(nèi)的組件在水平方向上兩端對齊。將align-items的值設置為center,以讓容器內(nèi)的組件在豎直方向上居中對齊。將寬度width和高度height的值分別設置為280px和55px。

    添加一個名為average-number的類選擇器,以設置心率平均值的樣式。將font-size的值設置為38px。將letter-spacing的值設置為0px,以讓數(shù)字之間的間距更緊湊。

    添加一個名為average的類選擇器,以設置心率平均值的兩邊文本的樣式。將font-size的值設置為24px。將color的值設置為gray,以將文本顯示為灰色。

    上述講解請見如下代碼:

     
     
     
     
    1. .container {
    2.        display: flex;
    3.     flex-direction: column;
    4.     justify-content: flex-start;
    5.     align-items: center;
    6.     left: 0px;
    7.     top: 0px;
    8.     width: 454px;
    9.     height: 454px;
    10. }
    11. .title-container {
    12.     justify-content: center;
    13.     align-items: center;
    14.     width: 300px;
    15.     height: 130px;
    16. }
    17. .title {
    18.     margin-top: 40px;
    19.     font-size: 38px;
    20.     text-align: center;
    21.     width: 454px;
    22.     height: 100px;
    23. }
    24. .chart {
    25.     width: 400px;
    26.     height: 180px;
    27. }
    28. .list {
    29.     flex-direction: row;
    30.     width: 240px;
    31.     height: 45px;
    32. }
    33. .list-item {
    34.     justify-content: center;
    35.     align-items: center;
    36.     width: 120px;
    37.     height: 45px;
    38. }
    39. .icon {
    40.     width: 32px;
    41.     height: 32px;
    42. }
    43. .maxmin {
    44.     font-size: 24px;
    45.     letter-spacing: 0px;
    46. }
    47. .average-container {
    48.     justify-content: space-between;
    49.     align-items: center;
    50.     width: 280px;
    51.     height: 55px;
    52. }
    53. .average {
    54.     font-size: 24px;
    55.     color: gray;
    56. }
    57. .average-number {
    58.     font-size: 38px;
    59.     letter-spacing: 0px;
    60. }

     把心率最大值圖標max.png和心率最小值圖標min.png添加到目錄common中。

    打開文件index.js。

    在data中將占位符maxmin初始化為一個字典數(shù)組。該數(shù)組中包含兩個字典,分別表示心率最大值和心率最小值的相關信息。每個字典中都有兩個元素,對應的key都是iconName和mValue,分別表示心率最值的圖標名稱和心率最值。對于第一個字典,將心率最大值的圖標名稱iconName初始化為'max',并將心率最大值初始化為0。對于第二個字典,將心率最小值的圖標名稱iconName初始化為'min',并將心率最小值初始化為0。

    在data中將占位符average初始化為0。

    上述講解請見如下代碼:

     
     
     
     
    1. import router from '@system.router'
    2. export default {
    3.     data: {
    4.         maxmin: [{
    5.                      iconName: 'max',
    6.                      mValue: 0
    7.                  },
    8.                  {
    9.                      iconName: 'min',
    10.                      mValue: 0
    11.                  }],
    12.         average: 0
    13.     }
    14. }

     在index.js中自定義一個名為getRandomInt的函數(shù),該函數(shù)用于隨機生成一個介于min和max之間(包含min和max)的整數(shù)。

    在頁面的生命周期事件函數(shù)onInit()里,首先創(chuàng)建一個空數(shù)組并賦值給局部作用域變量heartRates,然后通過for循環(huán)執(zhí)行100次迭代。在每一次迭代中,調(diào)用自定義函數(shù)getRandomInt()隨機生成一個介于73和159之間的整數(shù),并調(diào)用函數(shù)push()將隨機生成的整數(shù)添加到數(shù)組heartRates中。

    定義一個名為countMaxMinAverage的函數(shù),其形參為heartRates,該函數(shù)用于計算heartRates中所有元素的最大值、最小值和平均值。

    在函數(shù)onInit()的最后,調(diào)用自定義函數(shù)countMaxMinAverage (),并將heartRates作為實參傳遞給形參heartRates。

    上述講解請見如下代碼:

     
     
     
     
    1. import router from '@system.router'
    2. export default {
    3.     data: {
    4.             ......
    5.     },
    6.     onInit() {
    7.         let heartRates = [];
    8.         for (let i = 0; i < 100; i++) {
    9.             heartRates.push(this.getRandomInt(73, 159));
    10.         }
    11.         this.countMaxMinAverage(heartRates);
    12.     },
    13.     getRandomInt(min, max) {
    14.         return Math.floor(Math.random() * (max - min + 1) ) + min;
    15.     },
    16.     countMaxMinAverage(heartRates) {
    17.     }
    18. }

     在自定義函數(shù)countMaxMinAverage ()的函數(shù)體中,分別調(diào)用Math.max.apply()和Math.min.apply()計算數(shù)組heartRates中的最大值和最小值,然后分別賦值給data中的maxmin[0].mValue和maxmin[1].mValue。通過for循環(huán)對數(shù)組heartRates中的所有心率數(shù)據(jù)進行遍歷,在遍歷的過程中將心率數(shù)據(jù)累加到局部作用域變量sum,以計算數(shù)組heartRates中所有心率數(shù)據(jù)的總和。求出總和之后,將其除以所有心率數(shù)據(jù)的個數(shù)就得到了所有心率數(shù)據(jù)的平均值。調(diào)用函數(shù)Math.round()返回與心率平均值最接近的整數(shù),并將其賦值給data中的average。

    上述講解請見如下代碼:

     
     
     
     
    1. import router from '@system.router'
    2. export default {
    3.         ......
    4.     countMaxMinAverage(heartRates) {
    5.         this.maxmin[0].mValue = Math.max.apply(null, heartRates);
    6.         this.maxmin[1].mValue = Math.min.apply(null, heartRates);
    7.         let sum = 0;
    8.         for (let index = 0; index < heartRates.length; index++) {
    9.             sum += heartRates[index];
    10.         }
    11.         this.average = Math.round(sum / heartRates.length);
    12.     },
    13.         ......
    14. }

     保存所有代碼后打開模擬器,在頁面中顯示出了頁面標題、心率最大值及其圖標、心率最小值及其圖標、心率在每分鐘內(nèi)的平均次數(shù),運行效果如圖所示:

    打開文件index.hml。

    將組件list上方的組件div修改為chart,以繪制一張心率曲線圖。在組件chart中,通過動態(tài)綁定的方式將屬性options和datasets的值分別設置為"{{options}}"和"{{datasets}}"。

    上述講解請見如下代碼:

       
     
     
     
    1.     
    2.         
    3.             心率曲線
    4.         
    5.     
  •     
  •     
  •         ......    
  •     
  •     ......
  •  打開文件index.js。

    在data中將占位符options的值初始化為一個字典,字典中包含兩個元素,分別用于設置x軸和y軸的參數(shù)。第一個元素的key是xAxis,對應的value是一個空字典{},說明不需要對x軸的參數(shù)進行設置。第二個元素的key是yAxis,對應的value是一個由兩個元素組成的字典,分別用于設置y軸的最小值和最大值,其中,key分別是min和max,value分別是0和160。

    在data中將占位符datasets的值初始化為一個字典的數(shù)組,該數(shù)組中只包含一個字典,該字典中包含兩個元素。第一個元素的key是gradient,對應的value是true,用于表示折線向下填充顏色到x軸。第二個元素的key是data,對應的value是一個空數(shù)組[],用于指定心率圖中的數(shù)據(jù)。

    在頁面的生命周期事件函數(shù)onInit()中,在隨機生成100個整數(shù)之后將所有整數(shù)組成的數(shù)組賦值給data中的datasets[0].data。

    上述講解請見如下代碼:

     
     
     
     
    1. import router from '@system.router'
    2. export default {
    3.     data: {
    4.         ......      
    5.                 average: 0,
    6.         options: {
    7.             xAxis: {},
    8.             yAxis: {
    9.                 min: 0,
    10.                 max: 160
    11.             }
    12.         },
    13.         datasets: [{
    14.                        gradient: true,
    15.                        data: []
    16.                    }]
    17.     },
    18.     onInit() {
    19.         let heartRates = [];
    20.         for (let i = 0; i < 100; i++) {
    21.             heartRates.push(this.getRandomInt(73, 159));
    22.         }
    23.         this.datasets[0].data = heartRates;
    24.         this.countMaxMinAverage(heartRates);
    25.     },
    26.     ......
    27. }

     保存所有代碼后打開模擬器,運行效果如下圖所示:

    項目源代碼,請見附件。

    歡迎訂閱我的專欄【圖解鴻蒙】:

    https://harmonyos./column/27

    ?著作權歸作者和HarmonyOS技術社區(qū)共同所有,如需轉(zhuǎn)載,請注明出處,否則將追究法律責任

    想了解更多內(nèi)容,請訪問:

    和華為官方合作共建的鴻蒙技術社區(qū)

    https://harmonyos./#zz


    文章標題:【圖解鴻蒙】使用繪圖組件Canvas繪制心率曲線圖
    鏈接URL:http://www.dlmjj.cn/article/codgsdo.html