獲取成就
本節(jié)將介紹成就頁(yè)面。
功能概述
成就頁(yè)面展示用戶可以獲取的所有勛章,當(dāng)用戶滿足一定的條件時(shí),將點(diǎn)亮本頁(yè)面對(duì)應(yīng)的勛章,沒(méi)有得到的成就勛章處于熄滅狀態(tài)。共有六種勛章,當(dāng)用戶連續(xù)完成任務(wù)打卡3天、7天、30天、50天、73天、99天時(shí),可以獲得對(duì)應(yīng)的“連續(xù)xx天達(dá)成”勛章。
頁(yè)面布局與 ArkTS 代碼對(duì)應(yīng)關(guān)系
效果如圖所示:
標(biāo)題部分TitleBar是一個(gè)橫向容器Row里包含一個(gè)子組件Text。
開(kāi)發(fā)前請(qǐng)熟悉鴻蒙開(kāi)發(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)
}
}
`HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿`
獲取數(shù)據(jù)
進(jìn)入界面第一次獲取數(shù)據(jù)在aboutToAppear()聲明周期中從數(shù)據(jù)庫(kù)GlobalInfo表中獲取存儲(chǔ)的勛章數(shù)據(jù), 通過(guò)@StorageProp裝飾器刷新界面,其他的地方只要通過(guò)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;
}
審核編輯 黃宇
-
鴻蒙
+關(guān)注
關(guān)注
57文章
2476瀏覽量
43690 -
HarmonyOS
+關(guān)注
關(guān)注
79文章
2006瀏覽量
31942 -
OpenHarmony
+關(guān)注
關(guān)注
26文章
3806瀏覽量
17971
發(fā)布評(píng)論請(qǐng)先 登錄
HarmonyOS開(kāi)發(fā)案例:【生活健康app之首頁(yè)啟動(dòng)】(1)

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

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

【HarmonyOS】專訪華為楊海松:立足合作伙伴價(jià)值,構(gòu)建健康HarmonyOS生態(tài)
【潤(rùn)和直播課預(yù)告@華為開(kāi)發(fā)者學(xué)院】HarmonyOS設(shè)備開(kāi)發(fā)基礎(chǔ)課程|HiSpark WiFi-IoT 智能小車套件開(kāi)發(fā)案例
Linux應(yīng)用開(kāi)發(fā)手冊(cè)之Python開(kāi)發(fā)案例
絕對(duì)干貨!HarmonyOS開(kāi)發(fā)者日資料全公開(kāi),鴻蒙開(kāi)發(fā)者都在看
harmonyOS開(kāi)發(fā)的APP如何訪問(wèn)Webservice?
鴻蒙智聯(lián)生態(tài)產(chǎn)品《接入智慧生活App開(kāi)發(fā)指導(dǎo)》(官方更新版)
4天帶你上手HarmonyOS ArkUI開(kāi)發(fā)
4天帶你上手HarmonyOS ArkUI開(kāi)發(fā)——《HarmonyOS ArkUI入門訓(xùn)練營(yíng)之健康生活實(shí)戰(zhàn)》
App開(kāi)發(fā)案例教程PDF電子書免費(fèi)下載

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

HarmonyOS家庭寵物健康監(jiān)測(cè)系統(tǒng)開(kāi)發(fā)方案
如何接入智慧生活App

評(píng)論