0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

HarmonyOS開發(fā)案例:【生活健康app之獲取成就】(3)

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-05-10 17:18 ? 次閱讀

獲取成就

本節(jié)將介紹成就頁面。

功能概述

成就頁面展示用戶可以獲取的所有勛章,當(dāng)用戶滿足一定的條件時(shí),將點(diǎn)亮本頁面對(duì)應(yīng)的勛章,沒有得到的成就勛章處于熄滅狀態(tài)。共有六種勛章,當(dāng)用戶連續(xù)完成任務(wù)打卡3天、7天、30天、50天、73天、99天時(shí),可以獲得對(duì)應(yīng)的“連續(xù)xx天達(dá)成”勛章。

頁面布局與 ArkTS 代碼對(duì)應(yīng)關(guān)系

效果如圖所示:

標(biāo)題部分TitleBar是一個(gè)橫向容器Row里包含一個(gè)子組件Text。

開發(fā)前請(qǐng)熟悉鴻蒙開發(fā)指導(dǎo)文檔:[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]

// TitleBarComponent.ets
@Component
export struct TitleBar {
  build() {
    Row() {
      Text($r('app.string.achievement'))
        .fontSize($r('app.float.default_24'))
        .fontColor($r('app.color.white'))
        .align(Alignment.Start)
        .padding({left: Const.ACHIEVE_TITLE_BAR_LEFT,top: Const.ACHIEVE_TITLE_BAR_TOP})
    }
    .width(Const.FULL_WIDTH)
  }
}

每個(gè)勛章卡片BadgeCard是由一個(gè)豎向容器Column、一個(gè)圖片子組件Image和一個(gè)文字子組件Text組成。

// BadgeCardComponent.ets
@Component
export struct BadgeCard {
  @Prop content: string = '';
  imgSrc: Resource = $r('app.string.empty');

  build() {
    Column({space: Const.DEFAULT_18}) {
      Image(this.imgSrc)
        .width(Const.FULL_WIDTH)
        .height(Const.ACHIEVE_CARD_IMG_HEIGHT)
        .objectFit(ImageFit.Contain)
      Text($r('app.string.task_achievement_level', Number(this.content)))
        .lineHeight($r('app.float.default_16'))
        .fontSize($r('app.float.default_12'))
        .fontColor($r('app.color.white'))
    }
    .width(ratio2percent(Const.ACHIEVE_SPLIT_RATIO))
    .padding({top: Const.ACHIEVE_CARD_TOP, bottom: Const.ACHIEVE_CARD_BOTTOM})
  }
}

整體的勛章面板使用Flex一個(gè)組件即可以實(shí)現(xiàn)均分和換行的功能。

// BadgePanelComponent.ets
@Component
export struct BadgePanel {
  @StorageProp(ACHIEVEMENT_LEVEL_KEY) successiveDays: number = 0;

  aboutToAppear() {
    Logger.debug('BadgePanel','aboutToAppear');
    getAchievementLevel();
  }

build() {
  Flex({ direction: FlexDirection.Row, wrap: FlexWrap.Wrap }) {
    ForEach(getBadgeCardItems(this.successiveDays), (item: CardInfo) = > {
      BadgeCard({ content: item.titleContent, imgSrc: item.achievement})
    })
  }
  .width(Const.FULL_WIDTH)
  }
}

`HarmonyOSOpenHarmony鴻蒙文檔籽料:mau123789v直接拿`

搜狗高速瀏覽器截圖20240326151547.png

獲取數(shù)據(jù)

進(jìn)入界面第一次獲取數(shù)據(jù)在aboutToAppear()聲明周期中從數(shù)據(jù)庫GlobalInfo表中獲取存儲(chǔ)的勛章數(shù)據(jù), 通過@StorageProp裝飾器刷新界面,其他的地方只要通過AppStorage更新勛章數(shù)據(jù)即可。

// BadgePanelComponent.ets
aboutToAppear() {
  Logger.debug('BadgePanel','aboutToAppear');
  getAchievementLevel();
}

// AchieveModel.ets
export function getAchievementLevel() {
  GlobalInfoApi.query((res: GlobalInfo) = > {
    let globalInfo: GlobalInfo = res;
    let achievementStr = globalInfo.achievements??'';
    let achievements = achievementStr.split(',');
    if (achievements.length > 0) {
      AppStorage.Set< Number >(ACHIEVEMENT_LEVEL_KEY, Number(achievements[achievements.length - 1]));
    }
  })
}

// BadgePanelComponent.ets
@StorageProp(ACHIEVEMENT_LEVEL_KEY) successiveDays: number = 0;

ForEach(getBadgeCardItems(this.successiveDays), (item: CardInfo) = > {
  BadgeCard({ content: item.titleContent, imgSrc: item.achievement})
})

// AchievementViewModel.ets
export function getBadgeCardItems(successiveDays: number): Array< CardInfo > {
  let badgeMileStones = ACHIEVEMENT_LEVEL_LIST;
  let cardItems: Array< CardInfo > = [];
  for (let i = 0; i < badgeMileStones.length; i++) {
    let onOrOff = successiveDays >= badgeMileStones[i] ? 'on' : 'off';
    let titleContent = String(badgeMileStones[i]);
    let cardInfo: CardInfo = new CardInfo();
    cardInfo.titleContent = titleContent;
    cardInfo.achievement = getAchievement(`${ onOrOff }_${ badgeMileStones[i] }`);
    cardItems.push(cardInfo);
  }
  return cardItems;
}

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 鴻蒙
    +關(guān)注

    關(guān)注

    56

    文章

    2267

    瀏覽量

    42489
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1946

    瀏覽量

    29739
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3548

    瀏覽量

    15741
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    HarmonyOS開發(fā)案例:【生活健康app之首頁啟動(dòng)】(1)

    用戶可以創(chuàng)建最多6個(gè)健康生活任務(wù)(早起,喝水,吃蘋果,每日微笑,刷牙,早睡),并設(shè)置任務(wù)目標(biāo)、是否開啟提醒、提醒時(shí)間、每周任務(wù)頻率。
    的頭像 發(fā)表于 05-10 11:49 ?755次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開發(fā)案</b>例:【<b class='flag-5'>生活</b><b class='flag-5'>健康</b><b class='flag-5'>app</b>之首頁啟動(dòng)】(1)

    HarmonyOS開發(fā)案例:【生活健康app之實(shí)現(xiàn)打卡功能】(2)

    首頁會(huì)展示當(dāng)前用戶已經(jīng)開啟的任務(wù)列表,每條任務(wù)會(huì)顯示對(duì)應(yīng)的任務(wù)名稱以及任務(wù)目標(biāo)、當(dāng)前任務(wù)完成情況。用戶只可對(duì)當(dāng)天任務(wù)進(jìn)行打卡操作,用戶可以根據(jù)需要對(duì)任務(wù)列表中相應(yīng)的任務(wù)進(jìn)行點(diǎn)擊打卡。如果任務(wù)列表中的每個(gè)任務(wù)都在當(dāng)天完成則為連續(xù)打卡一天,連續(xù)打卡多天會(huì)獲得成就徽章。
    的頭像 發(fā)表于 05-10 15:29 ?501次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開發(fā)案</b>例:【<b class='flag-5'>生活</b><b class='flag-5'>健康</b><b class='flag-5'>app</b>之實(shí)現(xiàn)打卡功能】(2)

    HarmonyOS開發(fā)案例:【生活健康app編寫通用工具類】(5)

    本節(jié)將介紹日志打印、時(shí)間換算等通用工具類的編寫和使用,工具類可以簡(jiǎn)化應(yīng)用代碼編寫和業(yè)務(wù)流程處理。
    的頭像 發(fā)表于 05-11 09:58 ?461次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開發(fā)案</b>例:【<b class='flag-5'>生活</b><b class='flag-5'>健康</b><b class='flag-5'>app</b><b class='flag-5'>之</b>編寫通用工具類】(5)

    HarmonyOS】專訪華為楊海松:立足合作伙伴價(jià)值,構(gòu)建健康HarmonyOS生態(tài)

    本帖最后由 l_xy 于 2020-11-3 11:42 編輯 從華為開發(fā)者大會(huì)HDC.2020 HarmonyOS 2.0 推出到現(xiàn)在,已經(jīng)有大批的開發(fā)者和合作伙伴相繼與
    發(fā)表于 11-02 15:26

    【潤(rùn)和直播課預(yù)告@華為開發(fā)者學(xué)院】HarmonyOS設(shè)備開發(fā)基礎(chǔ)課程|HiSpark WiFi-IoT 智能小車套件開發(fā)案

    `【潤(rùn)和直播課預(yù)告@華為開發(fā)者學(xué)院】HarmonyOS設(shè)備開發(fā)基礎(chǔ)課程|HiSparkWiFi-IoT 智能小車套件開發(fā)案例,3月18日(周
    發(fā)表于 03-16 15:01

    Linux應(yīng)用開發(fā)手冊(cè)Python開發(fā)案

    本文檔涉及的開發(fā)案例位于產(chǎn)品資料“4-軟件資料\Demo\”路徑下的base-demos和python-demos目錄。base-demos目錄存放Linux常用開發(fā)案例,案例bin目錄存放
    發(fā)表于 05-11 10:21

    絕對(duì)干貨!HarmonyOS開發(fā)者日資料全公開,鴻蒙開發(fā)者都在看

    、HarmonyOS Codelabs 開發(fā)樣例概覽:該主題講解HarmonyOS核心技術(shù)能力,圍繞智慧生活的7大場(chǎng)景,介紹Codelabs開發(fā)案
    發(fā)表于 08-04 14:36

    harmonyOS開發(fā)APP如何訪問Webservice?

    我接到一個(gè)項(xiàng)目,需要用到HarmonyOS開發(fā)APP做為移動(dòng)手機(jī)查詢和收到報(bào)警數(shù)據(jù),具體是這樣的,在C/S加B/S的系統(tǒng)框架下我們有數(shù)據(jù)庫服務(wù)器和Web服務(wù)器,有widows桌面應(yīng)用和Web瀏覽器
    發(fā)表于 03-28 10:14

    鴻蒙智聯(lián)生態(tài)產(chǎn)品《接入智慧生活App開發(fā)指導(dǎo)》(官方更新版)

    HarmonyOS Connect生態(tài)產(chǎn)品應(yīng)用開發(fā)過程中,很多開發(fā)者對(duì)于如何接入智慧生活App還存在一些疑問,如:如何選擇合適的
    發(fā)表于 04-26 15:00

    4天帶你上手HarmonyOS ArkUI開發(fā)

    本次HarmonyOS ArkUI入門訓(xùn)練營(yíng)課程--健康生活實(shí)戰(zhàn)篇,手把手教大家如何制作一個(gè)合理膳食的APP前端Demo!課程實(shí)戰(zhàn)樣例通過ArkUI聲明式UI開發(fā)框架實(shí)現(xiàn),只需用幾行簡(jiǎn)
    發(fā)表于 09-09 14:44

    4天帶你上手HarmonyOS ArkUI開發(fā)——《HarmonyOS ArkUI入門訓(xùn)練營(yíng)健康生活實(shí)戰(zhàn)》

    HarmonyOS ArkUI入門訓(xùn)練營(yíng)健康飲食應(yīng)用》是面向入門開發(fā)者打造的實(shí)戰(zhàn)課程系列。特邀華為終端BG高級(jí)開發(fā)工程師作為本次訓(xùn)練營(yíng)講
    發(fā)表于 01-05 11:49

    App開發(fā)案例教程PDF電子書免費(fèi)下載

    App開發(fā)案例教程》通過一個(gè)實(shí)例,介紹App設(shè)計(jì)、開發(fā)直至上線的全過程,引導(dǎo)讀者在較短時(shí)間內(nèi)熟悉一個(gè)較大規(guī)模的App應(yīng)用系統(tǒng)的
    發(fā)表于 08-05 08:00 ?38次下載
    <b class='flag-5'>App</b><b class='flag-5'>開發(fā)案</b>例教程PDF電子書免費(fèi)下載

    華為開發(fā)者分論壇HarmonyOS學(xué)生公開課-OpenHarmony Codelabs開發(fā)案

    2021華為開發(fā)者分論壇HarmonyOS學(xué)生公開課-OpenHarmony Codelabs開發(fā)案
    的頭像 發(fā)表于 10-24 11:25 ?1810次閱讀
    華為<b class='flag-5'>開發(fā)</b>者分論壇<b class='flag-5'>HarmonyOS</b>學(xué)生公開課-OpenHarmony Codelabs<b class='flag-5'>開發(fā)案</b>例

    HarmonyOS家庭寵物健康監(jiān)測(cè)系統(tǒng)開發(fā)方案

    本期我們給大家?guī)淼氖羌彝櫸?b class='flag-5'>健康監(jiān)測(cè)系統(tǒng)開發(fā)者楊光的分享,希望能給你的HarmonyOS開發(fā)之旅帶來啟發(fā)~
    的頭像 發(fā)表于 03-03 10:24 ?2316次閱讀

    如何接入智慧生活App

     在HarmonyOS Connect生態(tài)產(chǎn)品應(yīng)用開發(fā)過程中,很多開發(fā)者對(duì)于如何接入智慧生活App還存在一些疑問,如:如何選擇合適的
    的頭像 發(fā)表于 04-25 10:42 ?3455次閱讀
    如何接入智慧<b class='flag-5'>生活</b><b class='flag-5'>App</b>