自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

登堂—HarmonyOS Practice《鴻蒙應(yīng)用開發(fā)實(shí)戰(zhàn)-張榮超》|自學(xué)筆記

開發(fā) OpenHarmony
Lite wearable和wearable所適用的API不一樣!開始之前請?jiān)赾onfig.json-deviceTypel里確定自己所在的項(xiàng)目是Lite wearable。

[[411062]]

想了解更多內(nèi)容,請?jiān)L問:

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

https://harmonyos.51cto.com

一、書中致謝&前言

2021年6月29日23:10:32

  1. 51CTO鴻蒙技術(shù)社區(qū)很有用
  2. 本書使用DevEoc中的平臺為Lite Wearable,即輕量級的可穿戴產(chǎn)品的開發(fā)
  3. 本書介紹的是一個呼吸訓(xùn)練系統(tǒng)APP的開發(fā)全過程,
  4. 采用 項(xiàng)目導(dǎo)向的方式 和 任務(wù)導(dǎo)向的方式 ,共計(jì)36個任務(wù)每個任務(wù)分為3個部分,包括運(yùn)行效果、實(shí)現(xiàn)思路、代碼詳解。
  5. 本書三章,第一章為“鴻蒙操作系統(tǒng)簡介”;第二章為“項(xiàng)目準(zhǔn)備工作”;第三章為“呼吸訓(xùn)練實(shí)戰(zhàn)項(xiàng)目”
  6. 代碼下載網(wǎng)址

這代碼使用的DevEco版本太老了!!!

二、學(xué)習(xí)完本書后自己總結(jié)的提示和建議

  1. Lite wearable和wearable所適用的API不一樣!開始之前請?jiān)赾onfig.json-deviceTypel里確定自己所在的項(xiàng)目是Lite wearable。
  2. 同理!canvas畫布組件同樣在Lite wearable不支持!使用chart就行
  3. 同理!關(guān)于滑動事件。direction的值比之老版本有改變,各位讀者請注意,up和down不可用,應(yīng)用top和bottom來表示上下。
  4. 在預(yù)期效果達(dá)不到的時候,多用console.log(“XXXX”);打印信息,來查看函數(shù)是否如期調(diào)用。
  5. 動態(tài)數(shù)據(jù)綁定在本APP中使用極多,不管是出于顯示和數(shù)據(jù)的分離作用,還是通過動態(tài)數(shù)據(jù)簡化代碼。都極其好用。在JS-dada中規(guī)定字典(值、數(shù)組)的格式請注意。
  6. 主頁面是布局和圖片旋轉(zhuǎn)、倒計(jì)時頁面是頁面跳轉(zhuǎn)、壓力占比頁面是進(jìn)度器應(yīng)用、心率頁面是線形圖的應(yīng)用、活動頁面是柱狀圖的應(yīng)用、壓力分布頁面是2d繪制引擎的應(yīng)用(但canvas不能用在Lite wearable,用的還是chart)、最大攝氧量頁面是弧形進(jìn)度的應(yīng)用、學(xué)習(xí)交流頁面就是貼圖。
  7. 用params指定要傳遞的數(shù)據(jù)。
  8. 容器與組件的應(yīng)用還需要更多的案例去熟悉,最終期望到達(dá)熟稔于心的地步。包含組件與組件、組價與容器。
  9. 隨機(jī)數(shù)組,隨機(jī)數(shù)的生成,應(yīng)成為定式記住。
  10. 圖片的選擇image、src。
  11. 書中和資料上的代碼都沒有格式化,我覺得這樣不好,ctrl+alt+L就代碼格式化了,方便查看、方便閱讀、方便修改。
  12. 頁面與頁面的跳轉(zhuǎn)(router-uri)-URI最準(zhǔn)確的是在config.json-Page里面看,書中的跟實(shí)際的不太一樣
  13. 通過style屬性中的animation-duration樣式指定logo圖片轉(zhuǎn)動一次的時間,通過style屬性中的animation-ireration-count樣式指定logo圖片轉(zhuǎn)動
  14. 參數(shù)、形參、實(shí)參、this、自定義函數(shù)、函數(shù)調(diào)用、函數(shù)定義、逗號、冒號、循環(huán)語句、選擇語句、求最大、求最小、屬性值

三、第一章 鴻蒙操作系統(tǒng)簡介

  • 時間:2021年6月29日23:28:46
  • 1.1 1+8+N全場景
  • 其實(shí)也就是,構(gòu)建一個基于鴻蒙生態(tài)下的IoT
  • 1.2 分布式(理解:多個人干多個活兒)
  • 分布式軟總線與傳統(tǒng)意義上的硬總線的區(qū)別,分布式軟總線承擔(dān)了任務(wù)總線、數(shù)據(jù)總線、總線中樞。任務(wù)總線:負(fù)責(zé)將應(yīng)用程序在多個終端上快速分發(fā);數(shù)據(jù)總線:負(fù)責(zé)數(shù)據(jù)在設(shè)備間的高性能分發(fā)和同步;總線中樞:負(fù)責(zé)將應(yīng)用程序控制,用于自動發(fā)現(xiàn)并組網(wǎng),以及維護(hù)設(shè)備間的拓?fù)潢P(guān)系。
  • 鴻蒙操作系統(tǒng)的分布式軟總線可以實(shí)現(xiàn)異構(gòu)融合網(wǎng)絡(luò)
  • 分布式數(shù)據(jù)管理也是鴻蒙操作系統(tǒng)的核心技術(shù)

四、第二章 項(xiàng)目準(zhǔn)備工作

  • 時間:2021年7月3日23:16:46

2.1 搭建開發(fā)環(huán)境(已通過之前的學(xué)習(xí)已經(jīng)成功搭建)

  • 2.11安裝Node.js
  • 2.1.2安裝DevEco Studio

2.2Hello World

  • 注意一個previewer就行
  • 每個頁面都包含一個hml文件(結(jié)構(gòu))、一個css文件(樣式)、一個js文件(行為)
  • 具體的來講就是,hml文件是頁面的結(jié)構(gòu),用于描述頁面中包含哪些組件;css文件是頁面的樣式,用于描述頁面中的組件都長什么樣子;js文件是頁面的行為,用于描述頁面中的組件是如何進(jìn)行交互的
  • index.js 中定義了一個變量title,它的值是‘World’,是個占位符,在程序的運(yùn)行過程中動態(tài)確定的,這種技術(shù)稱之為動態(tài)數(shù)據(jù)綁定

五、第三章 呼吸訓(xùn)練實(shí)戰(zhàn)項(xiàng)目

  • 時間:2021年7月5日15:50:28
  • 綜述:對于整個APP的一個介紹

3.1任務(wù)1:在主頁面中添加一個按鈕并響應(yīng)其單擊事件

  • 時間:2006年7月6日14:17:12
  • 調(diào)試了一下午發(fā)現(xiàn)由于書籍用的DevEco版本太低了,導(dǎo)致有很多不一樣,以至于運(yùn)行不了。
  • 要實(shí)現(xiàn)的效果:構(gòu)建點(diǎn)我的頁面
  • 時間:2021年7月7日14:12:47
  • 經(jīng)過更新DevEco Studio 2.2.0.200 x64
  1. border-bottom-width 
  2. width 

上述兩者不一樣,經(jīng)過調(diào)試已經(jīng)可以得出界面

時間:2021年7月7日20:46:39

對位置進(jìn)行調(diào)整

單擊該按鈕后打印一條log

在編程過程中,

  1. //index.js 
  2. //定義clickAction函數(shù) 
  3. onInit() { 
  4.         this.title = this.$t('strings.world'); 
  5.     }, 
  6.     clickAction(){ 
  7.          console.log("我被單擊了"); 

要用,隔開,分號的英文還是中文很重要

  1. //index.hml 
  2. //按鈕的onclick單擊事件 
  3. <input type="button"  value="點(diǎn)我" class="btn" onclick="clickAction"  /> 

編譯器右上角有個小蟲子,是Debug按鈕(Shift+9),要想看到打印就需要Debug

非模式的浮動窗口

因?yàn)榻滩氖褂玫氖荓itewearable而現(xiàn)在2.2版本的DevEco都是Wearable了。所以不能用previewer了,就只能用遠(yuǎn)程虛擬機(jī)Device Manager

成功運(yùn)行

3.2任務(wù)2:添加訓(xùn)練頁面并實(shí)現(xiàn)其與主頁面之間的相互跳轉(zhuǎn)

時間:2021年7月7日21:17:59

分析:行為相似,稍作改變,可以調(diào)用router.replace()語句實(shí)現(xiàn)頁面間的跳轉(zhuǎn),在調(diào)用該語句的時候通過Uri指定目標(biāo)頁面的地址

創(chuàng)建JS頁面

進(jìn)行跳轉(zhuǎn)

時間:2021年7月7日22:30:45

經(jīng)過不斷試錯,加上console.log的提示發(fā)現(xiàn),訓(xùn)練頁面可以跳轉(zhuǎn)主頁面,但主頁面無法跳轉(zhuǎn)訓(xùn)練頁面。

經(jīng)過半個多小時的調(diào)試(誤入歧途,妄想通過更改config.json中的deviceType來實(shí)現(xiàn)wearable到litewearable的轉(zhuǎn)化),之前一直想的是因?yàn)閜reviewer自身的問題,認(rèn)為無法跳轉(zhuǎn)是因?yàn)轫?xiàng)目本身是wearable的,而不是Litewearable的導(dǎo)致了認(rèn)知偏差,完全沒有想到是uri出了問題。

最后完成的效果如下GIF

3.3任務(wù)3:驗(yàn)證應(yīng)用和每個頁面的生命周期事件

該任務(wù)的目的就是通過打印生命周期各個階段的名稱,來感受每個頁面的生命周期

時間:2021年7月7日22:43:05

生命周期(onInit-onReady-onShow-onDestroy)

  1. onInit() { 
  2.     console.log("主頁面的onInit()正在被調(diào)用"); 
  3.  
  4.     router.replace({ 
  5.         uri:'pages/index/index' 
  6.     }); 
  7. }, 
  8. onReady() { 
  9.     console.log("主頁面的onReady()正在被調(diào)用"); 
  10. }, 
  11. onShow() { 
  12.     console.log("主頁面的onShow()正在被調(diào)用"); 
  13. }, 
  14. onDestroy() { 
  15.     console.log("主頁面的onDestroy()正在被調(diào)用"

其具體實(shí)現(xiàn)

3.4 任務(wù)4:在主頁面中顯示logo和兩個選擇器

時間:2021年7月7日23:09:03

思路:使用Image組件顯示鴻蒙呼吸訓(xùn)練的logo。使用picker-view組件顯示logo左右兩邊的選擇器。

關(guān)于copy圖片的hm.png的問題卡了一陣子

之后是關(guān)于圖片與按鈕的自適應(yīng)問題調(diào)試了一陣子

時間:2021年7月7日23:47:20

時間:2021年7月8日14:18:57

卡了太久太久了。從上午到下午,不過有經(jīng)驗(yàn)了,以后有問題從開發(fā)文檔進(jìn)行查詢答案。

下午下課問了四個實(shí)訓(xùn)老師,還是存在問題

時間:2021年7月8日23:29:21

在51CTO學(xué)院張榮超老師的企業(yè)微信群里問了問題,希望可以得到解答

時間:2021年7月8日23:44:47

張榮超老師回復(fù)!發(fā)了源碼,我進(jìn)行研究研究。

終于解決了!!!!

時間:2021年7月9日00:59:21

存在兩個問題:

1.app.js中引號的問題

Litewearable的JS API與wearable的API不兼容。,所以我把config.json改了

最后修改后的頁面

3.5 任務(wù)5:在指定選擇器的默認(rèn)選中項(xiàng)并獲取選中項(xiàng)的值

時間:2021年7月9日09:09:54

range的類型:Array

使用時需要使用數(shù)據(jù)綁定的方式,如range = {{data}},js中聲明相應(yīng)變量:data:[“15”, “20”, “25”]。

selected的相關(guān)說明:

selected:設(shè)置文本選擇器的默認(rèn)選擇值,該值需要為range的索引。

設(shè)置時間選擇器的默認(rèn)取值,格式為 HH:mm;

change的說明:

在使用的時候要用onchange

文本選擇器選定值后觸發(fā)該事件。參數(shù):{ newValue: newValue, newSelected: newSelected }

時間選擇器選定值后觸發(fā)該事件。參數(shù):{ hour: hour, minute: minute}

  1. changeAction1(pv) { 
  2.     console.log("左邊的選中項(xiàng):" + pv.newValue); 
  3. }, 
  4. changeAction2(pv) { 
  5.     console.log("右邊的選中項(xiàng):" + pv.newValue); 
  6. }, 

3.6 任務(wù)6:將主頁中選擇器的值傳遞到訓(xùn)練頁面

時間:2021年7月9日14:35:07

頁面跳轉(zhuǎn)的時候:用uri指定目標(biāo)頁面,用params指定要傳遞的數(shù)據(jù)。

在生命周期事件函數(shù)onInit()中獲取主頁面?zhèn)鬟f過來黨的值,并將其打印到log中,因?yàn)檫x擇器的值存放在了一個字典中,并且對應(yīng)的key分別是data1和data2,所以訓(xùn)練頁面中可以通過this.data1獲取傳遞過來的左邊選擇器的值,右邊同理。

  1. console.log("接收到的左邊選擇器的值:" + this.data1); 
  2. console.log("接收到的右邊選擇器的值:" + this.data2); 

3.7 任務(wù)7:修改主頁面和訓(xùn)練頁面中按鈕的文本及樣式

時間:2021年7月9日14:52:17

對font-size樣式修改按鈕的文本大小

通過background-color樣式修改按鈕的背景顏色

通過border-color樣式修改按鈕的邊框顏色

按鈕顏色還挺好看的

training頁面的按鈕同理

3.8 任務(wù)8:在訓(xùn)練頁面顯示總共需要堅(jiān)持的秒數(shù)

時間:2021年7月9日15:03:43

因?yàn)閠raining頁面需要顯示主頁面選擇器選擇的值作為參數(shù),所以這里需要采用動態(tài)綁定的方式。

  1. picker1value = this.key1; 
  2. picker2value = this.key2; 
  3.  
  4. if (picker1value == "1") { 
  5.     picker1seconds = 60; 
  6. else if (picker1value == "2") { 
  7.     picker1seconds = 120; 
  8. else if (picker1value == "3") { 
  9.     picker1seconds = 180; 
  10.  
  11. if (picker2value == "較慢") { 
  12.     picker2seconds = 6; 
  13. else if (picker2value == "舒緩") { 
  14.     picker2seconds = 4; 
  15. else if (picker2value == "較快") { 
  16.     picker2seconds = 2; 
  17.  
  18. this.seconds = picker1seconds; 

這里比較笨拙可以用

  1. picker1seconds=picker1value*60; 

3.9 任務(wù)9:在訓(xùn)練頁面倒計(jì)時顯示再堅(jiān)持的秒數(shù)

時間:2021年7月9日15:23:13

在訓(xùn)練頁面的生命周期事件函數(shù)onShow()中調(diào)用==setInterval()==函數(shù)創(chuàng)建一個定時器,并在調(diào)用時指定定時器要執(zhí)行的動作及其時間間隔

  1. run1() {    this.seconds--;    if (this.seconds == 0) {        clearInterval(timer1);        timer1 = null;        this.isShow = false;    }}, 

3.10 任務(wù)10:再堅(jiān)持的秒數(shù)在倒計(jì)時結(jié)束時隱藏顯示的文本

時間:2021年7月9日15:33:33

將某個組件的show屬性的值設(shè)置為false從而隱藏該組件

注意:隱藏組件之后,它在頁面中所占的空間仍然存在

  1. seconds: 0,//這個,必須要加上isShow:truetimer1 = setInterval(this.run1, 1000); 

3.11 任務(wù)11:在訓(xùn)練頁面根據(jù)呼吸節(jié)奏交替顯示“吸氣”和“呼氣”

時間:2021年7月9日15:38:36

在training頁面交替顯示,就需要在training頁面的生命周期函數(shù)onShow()中調(diào)用==setInterval()==創(chuàng)建一個定時器,并在調(diào)用時指定定時器要執(zhí)行的動作及其時間間隔。

因?yàn)槲覀冊O(shè)定了較慢、舒緩、較快,所以這里有一個節(jié)奏的轉(zhuǎn)換,也就是說要用不同的時間間隔區(qū)別不同的selected的選擇

需要聲明一個全局變量counter作為計(jì)時器,將其初值設(shè)置為0

  1. run2() {    counter++;    if (counter == picker1seconds / picker2seconds) {        clearInterval(timer2);        timer2 = null;        this.breath = "已完成";    } else {        if (this.breath == "吸氣") {            this.breath = "呼氣";        } else if (this.breath == "呼氣") {            this.breath = "吸氣";        }    }}, 

3.12 任務(wù)12:每次吸氣或呼氣時都實(shí)時顯示進(jìn)度百分比

時間:2021年7月9日16:18:34

還是使用定時器

  1. run3() {    this.percent = (parseInt(this.percent) + 1).toString();    if (parseInt(this.percent) < 10) {        this.percent = "0" + this.percent;    }    if (parseInt(this.percent) == 100) {        this.percent = "0";    }    if (timer2 == null) {        clearInterval(timer3);        timer3 = null;        this.percent = "100";    }}, 

3.13 任務(wù)13:每次吸氣或呼氣時logo都順時針轉(zhuǎn)動一周

時間:2021年7月9日17:13:22

通過style屬性中的animation-duration樣式指定logo圖片轉(zhuǎn)動一次的時間,通過style屬性中的animation-ireration-count樣式指定logo圖片轉(zhuǎn)動

logo順時針轉(zhuǎn)動一周的時間,就是一次呼氣或吸氣的時間picker2secons,但是對于training.hml中的animation-duration樣式,要指定其點(diǎn)位“s”,因此要將picker2seconds+“s”賦值給data中的duration。

logo轉(zhuǎn)動的次數(shù)就是吸氣和呼氣的總次數(shù),即picker1seconds/picker2seconds。

時間:2021年7月10日09:14:02

排查了很久為什么圖片轉(zhuǎn)不起來

原因居然在這里:

可惡!

終于成功了!

3.14 任務(wù)14:添加倒計(jì)時頁面并實(shí)現(xiàn)由主頁向其跳轉(zhuǎn)

時間:2021年7月10日09:17:46

就是創(chuàng)建新頁面。新布局,新組件

3.15 任務(wù)15:在倒計(jì)時頁面進(jìn)行訓(xùn)練指引的3秒倒計(jì)時

時間:2021年7月10日09:25:24

  1. run() {    counter = counter - 1;    if (counter != 0) {        this.imgsrc = "/common/images/" + counter.toString() + ".png";        this.seconds = counter.toString();    } else {        this.imgsrc = "";        this.seconds = "";        clearInterval(timer);        timer = null;        router.replace({            uri: 'pages/index/training/training',            params: {                "key1": pv1,                "key2": pv2            }        })    }}, 

3.16 任務(wù)16:3秒倒計(jì)時結(jié)束后跳轉(zhuǎn)到訓(xùn)練頁面并傳遞主頁面的數(shù)據(jù)

時間:2021年7月10日09:37:38

單擊主頁面中的按鈕跳轉(zhuǎn)到倒計(jì)時頁面,讀秒結(jié)束后,跳轉(zhuǎn)到訓(xùn)練頁面并將主頁的數(shù)據(jù)傳遞給訓(xùn)練頁面

倒計(jì)時頁面中,將主頁面?zhèn)鬟f的值作為value存放在字典中,并且通過params傳遞給訓(xùn)練頁面。在訓(xùn)練頁面中通過key,從字典中獲取兩個選擇器的值。

梳理:

  1. //需要的配套格式import router from '@system.router';clickAction() {        router.replace({            uri: '',            params:{"":,"":}        });    },//主頁面 params:{"data1":picker1value,"data2":picker2value}//倒計(jì)時頁面params: {              "key1": pv1,           "key2": pv2                }//訓(xùn)練頁面  picker1value = this.key1;        picker2value = this.key2; 

3.17 任務(wù)17:呼吸訓(xùn)練結(jié)束后右滑查看訓(xùn)練報(bào)告

時間:2021年7月10日09:56:58

在多個連續(xù)的text組件中使用if-elif-else結(jié)果,以便從中選擇一個text組件進(jìn)行顯示。在頁面的最外層div組件中添加onswipe屬性,從而在頁面觸發(fā)滑動事件時自動調(diào)用指定的自定義函數(shù)

關(guān)于if-elif-else的使用說明:因?yàn)樵賵?jiān)持這個text在倒計(jì)時結(jié)束以后會null,但空間并沒有釋放,所以需要在相同的位置進(jìn)行多文本的選擇,以便讓空間得以充分應(yīng)用

右滑:在訓(xùn)練頁面,添加一個自定義函數(shù),定義一個形參,在函數(shù)體中通過e.direction的值判斷滑動的方向,如果等就跳轉(zhuǎn)

關(guān)于onswipe屬性:設(shè)置值為自定義的toReport1Page函數(shù),這樣右滑的時候觸發(fā)頁面的onswipe事件,從而調(diào)用自定義的toReport1Page函數(shù)。

  1. <div class="container" onswipe="toIndexPage">
  1. toIndexPage(e) {    if (e.direction == 'left') {        router.replace({            uri: 'pages/index/index'        });    }} 

3.18 任務(wù)18:將第1個訓(xùn)練報(bào)告頁面的標(biāo)題修改為壓力占比

時間:2021年7月10日14:09:30

之后使用的數(shù)據(jù)都是隨機(jī)生成的測試數(shù)據(jù),其目的使其學(xué)會如何對數(shù)據(jù)進(jìn)行分析和可視化展示

flex-direction樣式用于指定容器所在組件的排列方向,可選值有兩個:row和colum,分別表示水平方向和豎直方向。選其一為主軸,另外一個為副軸。

justify-content用于指定容器內(nèi)所有組件在主軸上的對齊方式

align-items用于指定容器內(nèi)所有組件在副軸上的對齊方式

書本里做了四個容器,關(guān)于著三個組件不同值的可視化案例教程,很清晰的把三個方法,十個可選值

3.19 任務(wù)19:在壓力占比頁面的標(biāo)題下方顯示壓力分類的列表

時間:2021年7月10日14:35:38

聯(lián)合使用list和list-item組件來展示一個列表中的多個列表項(xiàng)。

在list組件中使用for屬性并通過動態(tài)數(shù)據(jù)綁定的方式指定要迭代的數(shù)組。在list-item組件中使用$item并通過動態(tài)數(shù)據(jù)綁定的方式指定迭代過程中的數(shù)組元素。

數(shù)據(jù)和顯示需要分離

每一個列表項(xiàng)數(shù)據(jù)都可以用{{$item}}來表示

  1. <div class="state-percent">    <text class="state">        {{ $item.state }}    </text>    <text class="state">        {{ $item.percent }}%    </text></div> 

3.20 任務(wù)20:在壓力分類的右邊顯示對應(yīng)的壓力占比

時間:2021年7月10日15:09:52

在onInit()中,隨機(jī)生成若干個指定范圍內(nèi)的整數(shù),將其作為所有壓力狀態(tài)的數(shù)據(jù)。根據(jù)隨機(jī)生成的整數(shù)統(tǒng)計(jì)每種壓力狀態(tài)所占的百分比,并通過動態(tài)數(shù)據(jù)綁定的方式將其顯示再列表中。

Math.floor(x)用于返回小于等于x的最大整數(shù)

push()函數(shù)將生成的隨機(jī)數(shù)添加到stateData數(shù)組中

  1. onInit() {    let stateData = [];    for (let i = 0; i < 20; i++) {        stateData.push(this.getRandomInt(1, 99));    }    this.countStatePercent(stateData);}, 

調(diào)用countStatePercent()自定義函數(shù),并將stateData作為實(shí)參傳遞給形參stateData

在自定義函數(shù)體中用四個計(jì)數(shù)器,通過for循環(huán)對stateData數(shù)組中的所有壓力狀態(tài)數(shù)據(jù)進(jìn)行遍歷,并在遍歷過程中判斷每個狀態(tài)壓力數(shù)據(jù)的范圍,使用相應(yīng)的計(jì)數(shù)器進(jìn)行個數(shù)的統(tǒng)計(jì)

3.21 任務(wù)21:在每個列表項(xiàng)的下方顯示壓力占比的進(jìn)度條

時間:2021年7月10日15:31:43

通過動態(tài)綁定的方式指定style屬性的值

在list-item組件中添加一個progerss組件(進(jìn)度條),percent屬性為進(jìn)度。

  1. <progress class="progress-bar" percent="{{$item.percent}}" style="color: {{$item.color}};"/> 

3.22 任務(wù)22:添加第2個訓(xùn)練報(bào)告頁面并響應(yīng)滑動事件

時間:2021年7月11日10:36:04

就是創(chuàng)建頁面,并通過onswipe屬性,觸發(fā)滑動事件自動調(diào)用指定的自定義函數(shù)

switch函數(shù)+router

  1. //最開始調(diào)試的代碼!有錯!關(guān)于direction的    toNextPage(e){        switch(e.direction){            case'left':            router.replace({                uri:'pages/index/index'            });            break;            case'down':            router.replace({                uri:'pages/index/report1/report1'            });        }    }} 

 Tips:直接點(diǎn)previewer可能會達(dá)不到效果,需要Debug(小甲蟲)

大無語事件!大無語事件!

經(jīng)過不斷的控制變量調(diào)試,發(fā)現(xiàn)只有左右滑動才可以正常。上下滑動無動于衷,添加了生命周期,觀察發(fā)現(xiàn)!上下滑動時,生命周期沒有調(diào)用!!!!!!我就懷疑代碼錯了,然后仔細(xì)比對,發(fā)現(xiàn)沒有問!沒有問題!沒有問題!那問題出現(xiàn)在哪兒了呢,排除跳轉(zhuǎn)頁面uri地址問題,排除了因?yàn)槊疤栆柕膯栴},排除了函數(shù)名變量名參數(shù)名不對應(yīng)的問題,排除了其他頁面有干擾的問題,然后我就懷疑標(biāo)簽direction的使用方法是不是錯了。經(jīng)過查驗(yàn)發(fā)現(xiàn)網(wǎng)上都是JS的direction標(biāo)簽、微信小程序的direction標(biāo)簽,CSS中direction的屬性。對照Breathing源碼發(fā)現(xiàn),是因?yàn)樾掳娴腄evEco中上下左右的屬性值變化了。新版的上下左右

上-top(老版本-up)

下-bottom(老版本-down)

左-left

右-right

最后說一句!!!好氣好氣好氣!

時間:2021年7月11日12:24:15

  1. //調(diào)整以后的代碼toNextPage(e) {    switch (e.direction) {        case 'left':        router.replace({            uri: 'pages/index/index'        });        break;        case 'bottom':        router.replace({            uri: 'pages/index/report1/report1'        });    } 

 才學(xué)到的用ScreenToGif做GIF巨方便!

3.23 任務(wù)23:在第2個訓(xùn)練報(bào)告頁面中顯示除心率曲線之外的所有內(nèi)容

時間:2021年7月11日20:17:45

設(shè)置有文本組件,心率通過動態(tài)數(shù)據(jù)綁定的方式將其顯示在頁面中,每個列表項(xiàng)都由一張圖片和一個文本組成

  1. //設(shè)置的兩個圖片,用動態(tài)綁定加數(shù)組簡單的抒寫其地址<image class="icon" src="/common/images/{{ $item.iconName }}.png"/><text class="maxmin"

 在data中將maxmin占位符初始化為一個字典數(shù)組,該數(shù)組包含兩個字典,分表表示心率最大值和心率最小值的相關(guān)信息

  1. data: {    maxmin: [{                 iconName: 'max',                 mValue: 0             },             {                 iconName: 'min',                 mValue: 0             }],    average: 0}, 

 把壓力頁面的getRandomInt的函數(shù)復(fù)制過來,該函數(shù)用于隨機(jī)生成一個介于min和max之間的整數(shù),經(jīng)過for循環(huán)執(zhí)行的100次迭代,在每一次迭代中自定義函數(shù)隨機(jī)生成的數(shù)經(jīng)過push()的添加,最后達(dá)到hearRates數(shù)組的隨機(jī)定義。

  1. getRandomInt(minmax) {    return Math.floor(Math.random() * (max - min + 1)) + min;}, onInit() {        let heartRates = [];        for (let i = 0; i < 100; i++) {            heartRates.push(this.getRandomInt(73, 159));        }        this.countMaxMinAverage(heartRates);        console.log("心率頁面的onInit()正在被調(diào)用");    },        countMaxMinAverage(heartRates) {        this.maxmin[0].mValue = Math.max.apply(null, heartRates);        this.maxmin[1].mValue = Math.min.apply(null, heartRates);        let sum = 0;        for (let index = 0; index < heartRates.length; index++) {            sum += heartRates[index];        }        this.average = Math.round(sum / heartRates.length);    } 

 耽誤一陣子時間,因?yàn)樯呻S機(jī)素組的時候,返回參數(shù)那里,自定義函數(shù)名字用的壓力頁面的自定義函數(shù)導(dǎo)致沒有,隨機(jī)數(shù)組沒有正常生成

最后成功

3.24 任務(wù)24:在心率曲線頁面中顯示繪制的心率曲線

時間:2021年7月11日21:36:20

使用chart組件繪制心率曲線圖,通過動態(tài)數(shù)據(jù)綁定的方式

制作圖表需要在x、y軸上面設(shè)置參數(shù)。data中將options占位符的值初始化為一個字典,字典包含兩個元素,分別用于設(shè)置x軸和y軸的參數(shù)。data中將datasets初始化為一個字典,gradient用于表示折線向下填充顏色到x軸,第二個元素是data,用于指定心率圖中的數(shù)據(jù)。

特別的!對于chart線條和填充的顏色我不是很滿意,我就查了開發(fā)文檔,對于chart的屬性進(jìn)行了查詢,

  1. options: {            xAxis: {},            yAxis: {                min: 0,                max: 160            }        },        datasets: [{                       strokeColor: '#1883d5',                       fillColor: '#1ed1fc',                       gradient: true,                       data: []                   }] 

 最后完成了心率頁面

3.25 任務(wù)25:添加第3個訓(xùn)練報(bào)告頁面并響應(yīng)事件

時間:2021年7月11日22:15:32

就是左滑右滑的的功能實(shí)現(xiàn)

貫穿壓力頁面、心率頁面、活動頁面

3.26 任務(wù)26:在第3個訓(xùn)練報(bào)告頁面中顯示除活動分布圖之外的所有內(nèi)容

時間:2021年7月11日22:39:20

四個組件包含文本、圖片的構(gòu)造

定義一個名為getRandomZeraOrOne的函數(shù),該函數(shù)用于隨機(jī)生成一個整數(shù)0或1,在函數(shù)體中,Math.random()用于生成一個介于0和1之間的隨機(jī)數(shù)。Math.floor(x)用于返回小于等于x的最大整數(shù)。

定義一個名為countActivityPercent的函數(shù),其形參為activity,該函數(shù)用于技術(shù)activity中整數(shù)0和1所占百分比

3.27 任務(wù)27:在今日活動分布頁面中顯示繪制的今日活動分布圖

時間:2021年7月11日23:16:57

與心率頁面不一樣的是今日活動分布頁面的chart組件的type屬性選擇的是bar,代表是柱狀圖。通過stuck組件來堆疊其中的組件,從而分別繪制活動柱狀圖和靜止柱狀圖。

stack:堆疊容器,子組件按照順序依次入棧,后一個子組件覆蓋前一個子組件。

3.28 任務(wù)28:添加第4個訓(xùn)練報(bào)告頁面并響應(yīng)滑動事件

時間:2021年7月12日09:42:41

添加頁面并添加相應(yīng)滑動,不多贅述

3.29 任務(wù)29:在第4個訓(xùn)練報(bào)告頁面顯示除壓力分布圖之外的所有內(nèi)容

時間:2021年7月12日09:52:37

壓力分布頁面跟心率頁面構(gòu)造及其相似。四個大組件,不贅述

出現(xiàn)問題了!在老版本的canvas組件不能再新版本使用

canvas畫布:支持手機(jī)、平板、智慧屏、智能穿戴

但不支持輕量級智能穿戴!!!Lite wearable不配

完成了!

 

3.30 任務(wù)30:在壓力分布頁面中繪制壓力分布圖

時間:2021年7月12日10:42:00

書中對于canvas畫布組件的應(yīng)用,不用用了現(xiàn)在,不過大致說一下書中的思路,通弄過canvas組件中的ref屬性獲得其對應(yīng)的對象實(shí)例,并調(diào)用getContext(‘2d’)函數(shù)獲得2D繪制引擎,在遍歷所有壓力數(shù)據(jù)的過程中調(diào)用fillRect()函數(shù)對壓力分布圖中的柱子逐一進(jìn)行繪制

  1. //書中的<canvas class="canvas" ref="canvas"></canvas> 
  1. //現(xiàn)在的<chart class="chart" type="bar" options="{{ options }}" datasets="{{ datasets }}"></chart> 

這里需要說明一下,chart的type屬性兩種,bar表示的是柱狀圖,line表示的線形圖。

相應(yīng)的在生命周期onShow中,通過引用this.$refs.canvas獲得report4組件的對象實(shí)例,然后調(diào)用getContext(‘2d‘)函數(shù)獲得2D繪圖引擎。然后通過forEach()函數(shù)進(jìn)行對pressure數(shù)組中的隨機(jī)壓力值進(jìn)行遍歷,其中element表示在遍歷過程中數(shù)組的當(dāng)前元素。

  1. //書上不能用的onShow(){var context =this.$refs.canvas.getContext('2d');    let leftTopX=0;    presuress.forEach(element =>{        context.fillStyle=this.getColorHexByValue(element);        let leftTopY=180-element *1.8;        let width=7;        let height=element*1.8;       context.fillRect(leftTopX,leftTopY,height,width);        leftTopY +=8;    });} 
  1. //獲取柱子的顏色的代碼getColorHexByValue(value) {    if (value >= 80 && value <= 99) {        return "#ffa500";    } else if (value >= 60 && value <= 79) {        return "#ffff00";    } else if (value >= 30 && value <= 59) {        return "#00ffff";    } else if (value >= 1 && value <= 29) {        return "#0000ff";    }}, 
  1. //用了chart那么這包含48個數(shù)組的pressure,就要定義48個字典定義柱子,for (let i = 0; i < 48; i++) {    let value = pressures[i];    this.datasets[i].fillColor = this.getColorHexByValue(value);    this.datasets[i].data = [value];} 

用不了畫布就很麻煩!就需要在data那里就定義48組數(shù)據(jù),每組為半個小時。

不過完成了!

3.31 任務(wù)31:添加第5個訓(xùn)練報(bào)告頁面并響應(yīng)滑動事件

時間:2021年7月12日11:05:18

跟之前的頁面報(bào)告頁面同樣的,不贅述

3.32 任務(wù)32:在第5個訓(xùn)練報(bào)告頁面中顯示除弧形和星號之外的內(nèi)容

時間:2021年7月12日11:12:12

最大攝氧量頁面,需要顯示頁面標(biāo)題、最大攝氧量及其單位、攝氧量等級水平、完全跟前幾個頁面的構(gòu)建大同小異

不過其中不一樣的地方在于,正中間的兩位數(shù)字,由兩個圖片構(gòu)成,但其中有一個關(guān)系需要體現(xiàn),如果小于十,第一張圖if(false)(不能用show,使用show的話就是占位符,還在那個位置,我們希望他不在),唯獨(dú)使用第二張圖片顯示最大攝氧量。

  1. //對應(yīng)圖片的hml<div class="number-container">    <image if="{{isShow}}" class="number-icon" src="/common/{{first}}.png"/>    <image class="number-icon" src="/common/{{second}}.png"/></div> 
  1. //對應(yīng)圖片的jsonInit() {    let vo2max = this.getRandomInt(1, 70);    let vo2max_str = vo2max.toString();    if (vo2max_str.length == 2) {        this.first = "num-" + vo2max_str[0];        this.second = "num-" + vo2max_str[1];    } else {        this.second = "num-" + vo2max_str;        this.isShow = false;    }    this.level = this.getLevelByValue(vo2max);}, 

 完成!

3.33 任務(wù)33:在最大攝氧量頁面顯示繪制的弧形

時間:2021年7月12日11:40:13

通過progress組件的type屬性設(shè)置為“arc”來繪制弧形,通過stack組件來堆疊其中的子組件

progress組件percent屬性設(shè)置為百分之50,添加style屬性用來設(shè)置進(jìn)入條樣式。start-angle設(shè)置為220(起始角度)。

  1. <progress class="progress" type="arc" percent="50" style="color : #ff0000; start-angle : 220;"

弧度百分之50的效果圖

接下來是七彩陽光環(huán)節(jié),哈哈哈,就是七個顏色弧形

 3.34 任務(wù)34:在最大攝氧量界面的對應(yīng)弧形和角度上面顯示星號

時間:2021年7月12日12:06:26

嗨,還是使用的canvas,其思路就是X-Y軸的繪制,然后添加“*”的文本

不過呢現(xiàn)在就用的是

  1. //現(xiàn)在就比較直接添加組件,然后在js里直接設(shè)置對應(yīng)位置<div class="pointer">    <text class="pointer-txt" style="margin-top: {{y}};margin-left: {{x}};">        *    </text></div> 
  1. //css.pointer{    width: 454px;    height: 454px;    background-color: transparent;}.pointer-txt{    font-size: 38px;    color: yellow;} 
  1. //在js的onInit的里面直接動態(tài)綁定x、y的值let angle = -230 + vo2max * (280 / 70);this.x = Math.round(218 + 193 * Math.cos(angle * Math.PI / 180));this.y = Math.round(218 + 193 * Math.sin(angle * Math.PI / 180)); 

完成!

3.35 任務(wù)35:添加學(xué)習(xí)交流聯(lián)系方式頁面并響應(yīng)滑動事件

時間:2021年7月12日12:15:04

新建一個contact頁面,添加相應(yīng)的文本和router.replace的滑動跳轉(zhuǎn),不贅述,要完結(jié)了!要學(xué)完了!沖沖沖!

3.36 任務(wù)36:在學(xué)習(xí)交流聯(lián)系方式頁面中顯示二維碼并完成項(xiàng)目收尾

時間:2021年7月12日12:22:15

使用image組件顯示二維碼,就是一個收尾工作嘍!沖沖沖!

完結(jié)撒花的時候因?yàn)閳D片的比例問題,又在華為開發(fā)文檔里面去學(xué)習(xí)了一下image組件哈哈哈。

最后選的是自己以前劍網(wǎng)三丐幫的一張圖片!

潛龍勿用!自強(qiáng)不息!

后面收尾有一個簡單的提示語的添加(text組件)

書上的完結(jié)!

六、對項(xiàng)目的一些調(diào)整和感想

(一)點(diǎn)擊重新開始的按鈕太大了,下面的框框都兜不住了

時間:2021年7月12日12:59:50

對訓(xùn)練頁面的btn按鈕的進(jìn)行調(diào)整(css)

  1. .btn {    width: 280px;    height: 50px;    font-size: 38px;    background-color: aquamarine;    border-color: aquamarine;    margin-top: 15px;} 

(三)一點(diǎn)感想

時間:2021年7月12日13:08:29

首先我很感謝《鴻蒙應(yīng)用開發(fā)實(shí)戰(zhàn)》這一本書!當(dāng)然最應(yīng)該感謝的是張榮超老師,他寫此書是開拓性的行為,雖然現(xiàn)在DevEco的版本迭代很快,書里的部分內(nèi)容需要調(diào)整,但試錯與改BUG本來就是一名程序猿需要去干的,原封不動的照抄代碼,反而效果可能沒有那么美麗!還有就是在學(xué)習(xí)的過程中我還加入了張榮超老師的粉絲企業(yè)微信,然后在里面得到了老師耐心的講解!!!真的太佩服他了!更甚,張榮超老師在51CTO社區(qū)發(fā)的學(xué)習(xí)鴻蒙的文章也很有代表性!最近發(fā)的【張榮超老師】鴻蒙卡片開發(fā)超細(xì)致總結(jié) ,也特別特別的詳細(xì)!ps:接近凌晨十二點(diǎn)張老師也回復(fù)了!!!!

總結(jié)一下這本書和這段時間的學(xué)習(xí):沒有案例沒有項(xiàng)目的學(xué)習(xí),是支撐不起實(shí)際開發(fā)的,選擇這本書就是為了可以快速的上手,在簡單項(xiàng)目中學(xué)習(xí)DevEco的相關(guān)設(shè)置、一些快捷鍵的使用;DevEco中JavaScript的Lite wearable的開發(fā),熟悉輕量級智能手表的API,

在這里就這個項(xiàng)目還有可能完善的地方就是,使用全部的輕量級手表專屬API中,

《鴻蒙應(yīng)用開發(fā)實(shí)戰(zhàn)》使用的組件:

容器組件:div(基礎(chǔ)容器)、list(圖片文本的列表項(xiàng)容器)、list-item(< list >的子組件,用來展示具體的item)、stack(疊堆容器)、swiper(滑動容器)

基礎(chǔ)組價:chart(線性圖、柱狀圖)、image(圖片)、image-annimator(圖片幀動畫播放器)、input(交互組件)、picker-view(嵌入頁面的滑動選擇器)、progress(進(jìn)度條,用于顯示內(nèi)容加載或操作處理進(jìn)度)、text(文本,用于呈現(xiàn)一段信息)

《鴻蒙應(yīng)用開發(fā)實(shí)戰(zhàn)》未使用的組件:

marquee:跑馬燈組件,用于展示一段單行滾動的文字

qecode:生成并顯示二維碼。

silder:滑動條組件,用來快速調(diào)節(jié)設(shè)置值,如音量、亮度等

switch:開關(guān)選擇器,通過開關(guān),開啟或關(guān)閉某個功能》

還有一些具體的注意事項(xiàng)我把他放到了第二點(diǎn),尤其是DevEco新老版本不一樣的地方需要諸君多多注意!

完結(jié)撒花 諸君共勉!學(xué)習(xí)繼續(xù) 強(qiáng)國有我!

附上自己敲的代碼

注:該文都是自己學(xué)習(xí)過程的筆記,侵刪。

想了解更多內(nèi)容,請?jiān)L問:

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

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2021-06-30 09:27:58

鴻蒙HarmonyOS應(yīng)用

2021-03-08 15:00:14

鴻蒙HarmonyOS應(yīng)用

2021-03-03 15:47:51

HarmonyOS應(yīng)用開發(fā)物聯(lián)網(wǎng)

2022-08-15 22:09:37

設(shè)備開發(fā)開發(fā)筆記

2020-09-28 15:13:04

鴻蒙

2021-01-11 11:04:49

鴻蒙HarmonyOS應(yīng)用開發(fā)

2022-08-09 16:01:24

應(yīng)用開發(fā)鴻蒙

2020-11-09 11:56:49

HarmonyOS

2021-06-24 09:32:00

鴻蒙HarmonyOS應(yīng)用

2021-09-23 14:41:58

鴻蒙HarmonyOS應(yīng)用

2021-07-05 14:29:28

鴻蒙HarmonyOS應(yīng)用

2021-02-03 09:59:02

鴻蒙HarmonyOS應(yīng)用開發(fā)

2022-08-25 21:46:51

網(wǎng)絡(luò)通訊應(yīng)用開發(fā)

2021-02-07 12:08:39

鴻蒙HarmonyOS應(yīng)用開發(fā)

2022-08-15 22:20:46

應(yīng)用開發(fā)華為IoT平臺

2018-09-07 23:38:45

小程序開發(fā)框架

2024-03-26 15:19:36

鴻蒙應(yīng)用開發(fā)開發(fā)工具

2024-02-19 15:59:52

鴻蒙應(yīng)用開發(fā)操作系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號