#include "TjdUiAppDailyDataView.h" #include "TjdUiImageIds.h" #include "TjdUiMemManage.h" #include "TjdUiMultiLanguageExt.h" #include "TjdUiUtils.h" #include "common/image_cache_manager.h" #include "style.h" #include "sys_config.h" #include "ui_label_ext.h" #include #include #include #define ENABLE_PRINT_INFO 1 #if ENABLE_PRINT_INFO #define static_print_info(...) sys_ui_log_i(__VA_ARGS__) // 一般信息打印宏控制 #define static_print_warn(...) sys_ui_log_w(__VA_ARGS__) // 警告信息打印一般常开 #define static_print_error(...) sys_ui_log_e(__VA_ARGS__) // 错误信息打印一般常开 #define static_print_debug(...) sys_ui_log_d(__VA_ARGS__) // 调试信息打印 #else #define static_print_info(...) #define static_print_warn(...) #define static_print_error(...) #define static_print_debug(...) #endif using namespace OHOS; namespace TJD { // clang-format off #define IMAGE_ICON_BIN_PATH TJD_IMAGE_PATH"img_icon.bin" // clang-format on static const char about_txt[] = { "本应用数据统计您在一天内的运动数据,包含步数、卡路里,活动时长,您也可对每天的运动量进行目标" "设置,我们会在达标时对您进行提醒。"}; static TjdUiAppDailyDataView *g_pv_AppDailyDataView = nullptr; TjdUiAppDailyDataView::TjdUiAppDailyDataView() { g_pv_AppDailyDataView = this; } TjdUiAppDailyDataView *TjdUiAppDailyDataView::GetInstance(void) { return g_pv_AppDailyDataView; } TjdUiAppDailyDataView::~TjdUiAppDailyDataView() { static_print_info("[TjdUiAppDailyDataView]::%s", __func__); g_pv_AppDailyDataView = nullptr; ImageCacheManager::GetInstance().UnloadAllInMultiRes(IMAGE_ICON_BIN_PATH); for (auto it = uiChartdataList.begin(); it != uiChartdataList.end(); ++it) { if (*it != nullptr) { // static_print_info("uiChartdata addr:%p", *it); delete *it; *it = nullptr; } } for (auto it = uiChartList.begin(); it != uiChartList.end(); ++it) { if (*it != nullptr) { // static_print_info("uiChart addr:%p", *it); static_cast((*it)->GetParent())->Remove(*it); delete *it; *it = nullptr; } } TjdUiMemManage::DeleteChildren(containerAll_); } void TjdUiAppDailyDataView::OnStart() { static_print_info("[TjdUiAppDailyDataView]::%s", __func__); presenter_->GetDailyDataModel()->RequestDaliyData(); presenter_->GetDailyDataModel()->LoadChartData(); presenter_->UpdatePointArray(); if (containerAll_ == nullptr) { containerAll_ = new UIViewGroup(); containerAll_->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); containerAll_->SetStyle(STYLE_BACKGROUND_OPA, 0); } if (swipeContainer_ == nullptr) { swipeContainer_ = new UISwipeViewNested(UISwipeView::VERTICAL); swipeContainer_->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); swipeContainer_->SetViewId("swipeContainer_"); swipeContainer_->SetStyle(STYLE_BACKGROUND_OPA, 0); if (OHOS::PageTransitionMgr::GetInstance().GetTopSlideBackImage() == nullptr) { swipeContainer_->SetOnDragListener(presenter_); } // swipeContainer_->SetYScrollBarVisible(); } swipeContainer_->Add(FirstPageViewInit()); swipeContainer_->Add(SecondPageViewInit()); swipeContainer_->Add(ThirdPageViewInit()); swipeContainer_->Add(FourthPageViewInit()); swipeContainer_->Add(FifthPageViewInit()); groupList_[DAILYDATA_SWIPE_VIEW] = swipeContainer_; groupList_[DAILYDATA_ABOUT_VIEW] = AboutPageViewInit(); for (int i = 0; i < DAILYDATA_MAX_VIEW; i++) { containerAll_->Add(groupList_[i]); } AddViewToRootContainer(containerAll_); } void TjdUiAppDailyDataView::OnStop() { static_print_info("[TjdUiAppDailyDataView]::%s", __func__); } UIViewGroup *TjdUiAppDailyDataView::FirstPageViewInit(void) { if (swipeContainer_->GetChildById("firstPageContainer_") != nullptr) { return static_cast(swipeContainer_->GetChildById("firstPageContainer_")); } UIViewGroup *firstPageContainer_ = new UIViewGroup(); if (firstPageContainer_ == nullptr) { static_print_error("%s: firstPageContainer_ is nullptr", __func__); return nullptr; } firstPageContainer_->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); firstPageContainer_->SetViewId("firstPageContainer_"); firstPageContainer_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE); UIImageView *iconBg_ = new UIImageView(); if (iconBg_ != nullptr) { iconBg_->SetPosition(0, 0); iconBg_->Resize(466, 466); iconBg_->SetStyle(STYLE_BORDER_OPA, 0xff); // iconBg_->SetStyle(STYLE_BORDER_WIDTH, 12); ImageInfo *imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_BJ_FIRST_PAGE, IMAGE_ICON_BIN_PATH); if (imgInfo != nullptr) { iconBg_->SetSrc(imgInfo); } else { static_print_info("%s: load image error", __func__); } firstPageContainer_->Add(iconBg_); } else { static_print_error("%s: %s is nullptr", __func__, ABOUT_ID); } canvas_.SetPosition(0, 0); canvas_.Resize(466, 466); canvas_.SetStyle(OHOS::STYLE_BACKGROUND_OPA, 0x0); firstPageContainer_->Add(&canvas_); UIImageView *iconTime_ = new UIImageView(); if (iconTime_ != nullptr) { iconTime_->SetPosition(218, 10); iconTime_->Resize(30, 30); iconTime_->SetStyle(STYLE_BORDER_OPA, 0); // iconTime_->SetStyle(STYLE_BORDER_WIDTH, 12); ImageInfo *imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_FTIME, IMAGE_ICON_BIN_PATH); if (imgInfo != nullptr) { iconTime_->SetSrc(imgInfo); } else { static_print_info("%s: load image error", __func__); } firstPageContainer_->Add(iconTime_); } else { static_print_error("%s: %s is nullptr", __func__, ABOUT_ID); } UIImageView *iconStep_ = new UIImageView(); if (iconStep_ != nullptr) { iconStep_->SetPosition(223, 68); iconStep_->Resize(20, 30); iconStep_->SetStyle(STYLE_BORDER_OPA, 0); // iconStep_->SetStyle(STYLE_BORDER_WIDTH, 12); ImageInfo *imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_FSTEP, IMAGE_ICON_BIN_PATH); if (imgInfo != nullptr) { iconStep_->SetSrc(imgInfo); } else { static_print_info("%s: load image error", __func__); } firstPageContainer_->Add(iconStep_); } else { static_print_error("%s: %s is nullptr", __func__, ABOUT_ID); } UIImageView *iconCal_ = new UIImageView(); if (iconCal_ != nullptr) { iconCal_->SetPosition(221, 124); iconCal_->Resize(24, 28); iconCal_->SetStyle(STYLE_BORDER_OPA, 0); // iconCal_->SetStyle(STYLE_BORDER_WIDTH, 12); ImageInfo *imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_FKCAL, IMAGE_ICON_BIN_PATH); if (imgInfo != nullptr) { iconCal_->SetSrc(imgInfo); } else { static_print_info("%s: load image error", __func__); } firstPageContainer_->Add(iconCal_); } else { static_print_error("%s: %s is nullptr", __func__, ABOUT_ID); } return firstPageContainer_; } UIViewGroup *TjdUiAppDailyDataView::SecondPageViewInit(void) { if (swipeContainer_->GetChildById("secondPageContainer_") != nullptr) { return static_cast(swipeContainer_->GetChildById("secondPageContainer_")); } UIViewGroup *secondPageContainer_ = new UIViewGroup(); if (secondPageContainer_ == nullptr) { static_print_error("%s: secondPageContainer_ is nullptr", __func__); return nullptr; } secondPageContainer_->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); secondPageContainer_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE); secondPageContainer_->SetViewId("secondPageContainer_"); UIImageView *image = new UIImageView(); image->SetPosition(172, 26, 26, 39); ImageInfo *imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_STEP, IMAGE_ICON_BIN_PATH); if (imgInfo == nullptr) { static_print_info("%s: load image error", __func__); } image->SetSrc(imgInfo); secondPageContainer_->Add(image); UILabelExt *label1 = new UILabelExt(); if (label1 != nullptr) { label1->SetPosition(206, 20, 82, 47); // label1->SetText("步数"); label1->SetTextId(STR_ID_204); label1->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE); label1->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label1->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_36); secondPageContainer_->Add(label1); } UILabel *label2 = new UILabel(); if (label2 != nullptr) { label2->SetPosition(171, 364, 121, 37); if (presenter_->GetDailyDataModel()->GetTotalStep()) { std::string str = std::to_string(presenter_->GetDailyDataModel()->GetTotalStep()); label2->SetText(str.c_str()); } else label2->SetText("--"); label2->SetViewId("curStep"); label2->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); label2->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label2->SetFont(TJD_DIN_MEDIUM_FONT_FILENAME, 50); TjdUiUtils::AutoAlignHorizontalCenter(*(label2)); secondPageContainer_->Add(label2); } UILabelExt *label3 = new UILabelExt(); if (label3 != nullptr) { label3->SetPosition(91, 375, 66, 40); // std::string str = std::to_string(presenter_->GetDailyDataModel()->GetStepPersent()) + "%"; // label3->SetText("今天"); label3->SetTextId(STR_ID_251); label3->SetViewId("today"); label3->SetStyle(STYLE_TEXT_COLOR, 0xFFA1A1A1); label3->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); label3->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label3->SetFont(TJD_VECTOR_FONT_FILENAME, 30); secondPageContainer_->Add(label3); } UILabel *label4 = new UILabel(); if (label4 != nullptr) { label4->SetPosition(299, 376, 88, 23); label4->SetText("STEPS"); label4->SetStyle(STYLE_TEXT_COLOR, 0xFF8E8E8E); label4->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); label4->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label4->SetFont(TJD_VECTOR_FONT_FILENAME, 30); secondPageContainer_->Add(label4); } uint32_t stepValue = stepArray.arrayStep; // 步进值 if (stepValue == 0) stepValue = 1; for (int i = 0; i < 4; i++) { UILabel *label = new UILabel(); if (label != nullptr) { label->SetPosition(398, 142 + (i * 41), 34, 17); label->SetText(std::to_string((4 - i) * stepValue).c_str()); label->SetStyle(STYLE_TEXT_COLOR, 0xFF6D6D6D); label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); label->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER); label->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_22); secondPageContainer_->Add(label); } } UIChartPillar *uiChart = new UIChartPillar(); uiChartList.push_back(uiChart); if (uiChart != nullptr) { uiChart->SetPosition(80, 148); uiChart->Resize(305, 164); uiChart->SetViewId("uiChart"); uiChart->SetStyle(STYLE_LINE_CAP, true); uiChart->SetStyle(STYLE_BACKGROUND_OPA, 0); // Set additional property UIXAxis &uiChartXAxis = uiChart->GetXAxis(); UIYAxis &uiChartYAxis = uiChart->GetYAxis(); uiChartXAxis.SetMarkNum(24); uiChartXAxis.SetDataRange(0, 24); uiChartXAxis.SetVisible(false); uiChartYAxis.SetMarkNum(5); uiChartYAxis.SetDataRange(0, 4 * stepValue); uiChartYAxis.SetVisible(false); UIChartDataSerial *uiChartdata = new UIChartDataSerial(); uiChartdataList.push_back(uiChartdata); uiChartdata->SetMaxDataCount(24); uiChartdata->AddPoints(stepArray.PointArray, 24); uiChartdata->SetFillColor(Color::GetColorFromRGBA(0x0d, 0xeb, 0x34, 0xff)); uiChart->AddDataSerial(uiChartdata); secondPageContainer_->Add(uiChart); } UIImageView *imageBg = new UIImageView(); imageBg->SetPosition(81, 146); imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_COMMON_BG, IMAGE_ICON_BIN_PATH); if (imgInfo == nullptr) { static_print_info("%s: load image error", __func__); return nullptr; } imageBg->SetSrc(imgInfo); secondPageContainer_->Add(imageBg); UIImageView *imageTime = new UIImageView(); imageTime->SetPosition(59, 310); imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_BJ_TIME, IMAGE_ICON_BIN_PATH); if (imgInfo == nullptr) { static_print_info("%s: load image error", __func__); return nullptr; } imageTime->SetSrc(imgInfo); secondPageContainer_->Add(imageTime); return secondPageContainer_; } UIViewGroup *TjdUiAppDailyDataView::ThirdPageViewInit(void) { if (swipeContainer_->GetChildById("thirdPageContainer_") != nullptr) { return static_cast(swipeContainer_->GetChildById("thirdPageContainer_")); } UIViewGroup *thirdPageContainer_ = new UIViewGroup(); if (thirdPageContainer_ == nullptr) { static_print_error("%s: thirdPageContainer_ is nullptr", __func__); return nullptr; } thirdPageContainer_->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); thirdPageContainer_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE); thirdPageContainer_->SetViewId("thirdPageContainer_"); UIImageView *image = new UIImageView(); image->SetPosition(164, 24); ImageInfo *imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_KCAL, IMAGE_ICON_BIN_PATH); if (imgInfo == nullptr) { static_print_info("%s: load image error", __func__); } image->SetSrc(imgInfo); thirdPageContainer_->Add(image); UILabelExt *label1 = new UILabelExt(); if (label1 != nullptr) { label1->SetPosition(206, 20, 82, 47); // label1->SetText("热量"); label1->SetTextId(STR_ID_230); label1->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE); label1->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label1->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_36); thirdPageContainer_->Add(label1); } UILabel *label2 = new UILabel(); if (label2 != nullptr) { label2->SetPosition(182, 365, 98, 37); if (presenter_->GetDailyDataModel()->GetTotalKCAL()) { std::string str = std::to_string(presenter_->GetDailyDataModel()->GetTotalKCAL()); label2->SetText(str.c_str()); } else label2->SetText("--"); label2->SetViewId("curKCAL"); label2->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); label2->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label2->SetFont(TJD_DIN_MEDIUM_FONT_FILENAME, 50); TjdUiUtils::AutoAlignHorizontalCenter(*(label2)); thirdPageContainer_->Add(label2); } UILabelExt *label3 = new UILabelExt(); if (label3 != nullptr) { // std::string str = std::to_string(presenter_->GetDailyDataModel()->GetStepPersent()) + "%"; label3->SetPosition(91, 375, 66, 40); // std::string str = std::to_string(presenter_->GetDailyDataModel()->GetStepPersent()) + "%"; // label3->SetText("今天"); label3->SetTextId(STR_ID_251); label3->SetViewId("today"); label3->SetStyle(STYLE_TEXT_COLOR, 0xFFA1A1A1); label3->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); label3->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label3->SetFont(TJD_VECTOR_FONT_FILENAME, 30); thirdPageContainer_->Add(label3); } UILabel *label4 = new UILabel(); if (label4 != nullptr) { label4->SetPosition(291, 377); label4->SetText("KCAL"); label4->SetStyle(STYLE_TEXT_COLOR, 0xFF8E8E8E); label4->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); label4->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label4->SetFont(TJD_VECTOR_FONT_FILENAME, 30); thirdPageContainer_->Add(label4); } uint32_t stepValue = KCALArray.arrayStep; // 步进值 if (stepValue == 0) stepValue = 1; for (int i = 0; i < 4; i++) { UILabel *label = new UILabel(); if (label != nullptr) { label->SetPosition(398, 142 + (i * 41), 34, 17); label->SetText(std::to_string((4 - i) * stepValue).c_str()); label->SetStyle(STYLE_TEXT_COLOR, 0xFF6D6D6D); label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); label->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER); label->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_22); thirdPageContainer_->Add(label); } } UIChartPillar *uiChart = new UIChartPillar(); uiChartList.push_back(uiChart); if (uiChart != nullptr) { uiChart->SetPosition(80, 148); uiChart->Resize(305, 164); uiChart->SetViewId("uiChart"); uiChart->SetStyle(STYLE_LINE_CAP, true); uiChart->SetStyle(STYLE_BACKGROUND_OPA, 0); // Set additional property UIXAxis &uiChartXAxis = uiChart->GetXAxis(); UIYAxis &uiChartYAxis = uiChart->GetYAxis(); uiChartXAxis.SetMarkNum(24); uiChartXAxis.SetDataRange(0, 24); uiChartXAxis.SetVisible(false); uiChartYAxis.SetMarkNum(5); uiChartYAxis.SetDataRange(0, 4 * stepValue); uiChartYAxis.SetVisible(false); UIChartDataSerial *uiChartdata = new UIChartDataSerial(); uiChartdataList.push_back(uiChartdata); uiChartdata->SetMaxDataCount(24); uiChartdata->AddPoints(KCALArray.PointArray, 24); uiChartdata->SetFillColor(Color::GetColorFromRGBA(0xff, 0x46, 0x11, 0xff)); uiChart->AddDataSerial(uiChartdata); thirdPageContainer_->Add(uiChart); } UIImageView *imageBg = new UIImageView(); imageBg->SetPosition(81, 146); imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_COMMON_BG, IMAGE_ICON_BIN_PATH); if (imgInfo == nullptr) { static_print_info("%s: load image error", __func__); return nullptr; } imageBg->SetSrc(imgInfo); thirdPageContainer_->Add(imageBg); UIImageView *imageTime = new UIImageView(); imageTime->SetPosition(59, 310); imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_BJ_TIME, IMAGE_ICON_BIN_PATH); if (imgInfo == nullptr) { static_print_info("%s: load image error", __func__); return nullptr; } imageTime->SetSrc(imgInfo); thirdPageContainer_->Add(imageTime); return thirdPageContainer_; } UIViewGroup *TjdUiAppDailyDataView::FourthPageViewInit(void) { if (swipeContainer_->GetChildById("fourthPageContainer_") != nullptr) { return static_cast(swipeContainer_->GetChildById("fourthPageContainer_")); } UIViewGroup *fourthPageContainer_ = new UIViewGroup(); if (fourthPageContainer_ == nullptr) { static_print_error("%s: fourthPageContainer_ is nullptr", __func__); return nullptr; } fourthPageContainer_->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); fourthPageContainer_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE); fourthPageContainer_->SetViewId("fourthPageContainer_"); UIImageView *image = new UIImageView(); image->SetPosition(136, 26); ImageInfo *imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_TIME, IMAGE_ICON_BIN_PATH); if (imgInfo == nullptr) { static_print_info("%s: load image error", __func__); } image->SetSrc(imgInfo); fourthPageContainer_->Add(image); UILabelExt *label1 = new UILabelExt(); if (label1 != nullptr) { label1->SetPosition(183, 20, 144, 47); // label1->SetText("中高强度"); label1->SetTextId(STR_ID_231); label1->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE); label1->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label1->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_36); fourthPageContainer_->Add(label1); } UILabel *label2 = new UILabel(); if (label2 != nullptr) { label2->SetPosition(188, 364, 86, 37); if (presenter_->GetDailyDataModel()->GetTotalTime()) { std::string str = std::to_string(presenter_->GetDailyDataModel()->GetTotalTime()); label2->SetText(str.c_str()); } else label2->SetText("--"); label2->SetViewId("curTime"); label2->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); label2->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label2->SetFont(TJD_DIN_MEDIUM_FONT_FILENAME, 50); TjdUiUtils::AutoAlignHorizontalCenter(*(label2)); fourthPageContainer_->Add(label2); } UILabelExt *label3 = new UILabelExt(); if (label3 != nullptr) { // std::string str = std::to_string(presenter_->GetDailyDataModel()->GetStepPersent()) + "%"; label3->SetPosition(91, 375, 66, 40); // std::string str = std::to_string(presenter_->GetDailyDataModel()->GetStepPersent()) + "%"; // label3->SetText("今天"); label3->SetTextId(STR_ID_251); label3->SetViewId("today"); label3->SetStyle(STYLE_TEXT_COLOR, 0xFFA1A1A1); label3->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); label3->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label3->SetFont(TJD_VECTOR_FONT_FILENAME, 30); fourthPageContainer_->Add(label3); } UILabel *label4 = new UILabel(); if (label4 != nullptr) { label4->SetPosition(292, 379); label4->SetText("MIN"); label4->SetStyle(STYLE_TEXT_COLOR, 0xFF8E8E8E); label4->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); label4->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label4->SetFont(TJD_VECTOR_FONT_FILENAME, 30); fourthPageContainer_->Add(label4); } uint32_t stepValue = exerTimeArray.arrayStep; // 步进值 if (stepValue == 0) stepValue = 25; for (int i = 0; i < 4; i++) { UILabel *label = new UILabel(); if (label != nullptr) { label->SetPosition(398, 142 + (i * 41), 34, 17); label->SetText(std::to_string((4 - i) * stepValue).c_str()); label->SetStyle(STYLE_TEXT_COLOR, 0xFF6D6D6D); label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); label->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER); label->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_22); fourthPageContainer_->Add(label); } } UIChartPillar *uiChart = new UIChartPillar(); uiChartList.push_back(uiChart); if (uiChart != nullptr) { uiChart->SetPosition(80, 148); uiChart->Resize(305, 164); uiChart->SetViewId("uiChart"); uiChart->SetStyle(STYLE_LINE_CAP, true); uiChart->SetStyle(STYLE_BACKGROUND_OPA, 0); // Set additional property UIXAxis &uiChartXAxis = uiChart->GetXAxis(); UIYAxis &uiChartYAxis = uiChart->GetYAxis(); uiChartXAxis.SetMarkNum(24); uiChartXAxis.SetDataRange(0, 24); uiChartXAxis.SetVisible(false); uiChartYAxis.SetMarkNum(5); uiChartYAxis.SetDataRange(0, 4 * stepValue); uiChartYAxis.SetVisible(false); UIChartDataSerial *uiChartdata = new UIChartDataSerial(); uiChartdataList.push_back(uiChartdata); uiChartdata->SetMaxDataCount(24); uiChartdata->AddPoints(exerTimeArray.PointArray, 24); uiChartdata->SetFillColor(Color::GetColorFromRGBA(0xff, 0xd5, 0x22, 0xff)); uiChart->AddDataSerial(uiChartdata); fourthPageContainer_->Add(uiChart); } UIImageView *imageBg = new UIImageView(); imageBg->SetPosition(81, 146); imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_COMMON_BG, IMAGE_ICON_BIN_PATH); if (imgInfo == nullptr) { static_print_info("%s: load image error", __func__); return nullptr; } imageBg->SetSrc(imgInfo); fourthPageContainer_->Add(imageBg); UIImageView *imageTime = new UIImageView(); imageTime->SetPosition(59, 310); imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_BJ_TIME, IMAGE_ICON_BIN_PATH); if (imgInfo == nullptr) { static_print_info("%s: load image error", __func__); return nullptr; } imageTime->SetSrc(imgInfo); fourthPageContainer_->Add(imageTime); return fourthPageContainer_; } UIViewGroup *TjdUiAppDailyDataView::FifthPageViewInit(void) { if (swipeContainer_->GetChildById("fifthPageContainer_") != nullptr) { return static_cast(swipeContainer_->GetChildById("fifthPageContainer_")); } UIViewGroup *fifthPageContainer_ = new UIViewGroup(); if (fifthPageContainer_ == nullptr) { static_print_error("%s: fifthPageContainer_ is nullptr", __func__); return nullptr; } fifthPageContainer_->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); fifthPageContainer_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE); fifthPageContainer_->SetViewId("fifthPageContainer_"); UIImageView *image = new UIImageView(); image->SetPosition(167, 22); ImageInfo *imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_DISTANCE, IMAGE_ICON_BIN_PATH); if (imgInfo == nullptr) { static_print_info("%s: load image error", __func__); } image->SetSrc(imgInfo); fifthPageContainer_->Add(image); UILabelExt *label1 = new UILabelExt(); if (label1 != nullptr) { label1->SetPosition(208, 20, 97, 37); // label1->SetText("里程"); label1->SetTextId(STR_ID_556); label1->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE); label1->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label1->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_28); fifthPageContainer_->Add(label1); } UILabel *label2 = new UILabel(); if (label2 != nullptr) { label2->SetPosition(202, 364, 60, 37); //转换m->km,显示小数点一位 float value = presenter_->GetDailyDataModel()->GetTotalDistance() / 1000.0f; if (value > 0) { std::ostringstream oss; oss << std::fixed << std::setprecision(1) << value; std::string formattedText = oss.str(); label2->SetText(formattedText.c_str()); } else label2->SetText("--"); label2->SetViewId("curDistance"); label2->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); label2->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label2->SetFont(TJD_DIN_MEDIUM_FONT_FILENAME, 50); TjdUiUtils::AutoAlignHorizontalCenter(*(label2)); fifthPageContainer_->Add(label2); } UILabelExt *label3 = new UILabelExt(); if (label3 != nullptr) { // std::string str = std::to_string(presenter_->GetDailyDataModel()->GetStepPersent()) + "%"; label3->SetPosition(91, 375, 66, 40); // label3->SetText("今天"); label3->SetTextId(STR_ID_251); label3->SetViewId("today"); label3->SetStyle(STYLE_TEXT_COLOR, 0xFFA1A1A1); label3->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); label3->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label3->SetFont(TJD_VECTOR_FONT_FILENAME, 30); fifthPageContainer_->Add(label3); } UILabel *label4 = new UILabel(); if (label4 != nullptr) { label4->SetPosition(279, 379); label4->SetText("KM"); label4->SetStyle(STYLE_TEXT_COLOR, 0xFF8E8E8E); label4->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); label4->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label4->SetFont(TJD_VECTOR_FONT_FILENAME, 30); fifthPageContainer_->Add(label4); } UIChartPillar *uiChart = new UIChartPillar(); uiChartList.push_back(uiChart); if (uiChart != nullptr) { uiChart->SetPosition(80, 148); uiChart->Resize(305, 164); uiChart->SetViewId("uiChart"); uiChart->SetStyle(STYLE_LINE_CAP, true); uiChart->SetStyle(STYLE_BACKGROUND_OPA, 0); // Set additional property UIXAxis &uiChartXAxis = uiChart->GetXAxis(); UIYAxis &uiChartYAxis = uiChart->GetYAxis(); uiChartXAxis.SetMarkNum(24); uiChartXAxis.SetDataRange(0, 24); uiChartXAxis.SetVisible(false); uiChartYAxis.SetMarkNum(5); if (distanceArray.arrayMax <= 4000) uiChartYAxis.SetDataRange(0, 4000); else uiChartYAxis.SetDataRange(0, ((distanceArray.arrayMax) / 1000 + 1) * 1000); uiChartYAxis.SetVisible(false); UIChartDataSerial *uiChartdata = new UIChartDataSerial(); uiChartdataList.push_back(uiChartdata); uiChartdata->SetMaxDataCount(24); uiChartdata->AddPoints(distanceArray.PointArray, 24); uiChartdata->SetFillColor(Color::GetColorFromRGBA(0x37, 0x8b, 0xff, 0xff)); uiChart->AddDataSerial(uiChartdata); fifthPageContainer_->Add(uiChart); } UIImageView *imageBg = new UIImageView(); imageBg->SetPosition(81, 146); imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_COMMON_BG, IMAGE_ICON_BIN_PATH); if (imgInfo == nullptr) { static_print_info("%s: load image error", __func__); return nullptr; } imageBg->SetSrc(imgInfo); fifthPageContainer_->Add(imageBg); UIImageView *imageTime = new UIImageView(); imageTime->SetPosition(59, 310); imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_BJ_TIME, IMAGE_ICON_BIN_PATH); if (imgInfo == nullptr) { static_print_info("%s: load image error", __func__); return nullptr; } imageTime->SetSrc(imgInfo); fifthPageContainer_->Add(imageTime); uint32_t stepValue = (distanceArray.arrayStep) / 1000; // 步进值,单位换算m -> km if (stepValue == 0) stepValue = 1; for (int i = 0; i < 4; i++) { UILabel *label = new UILabel(); if (label != nullptr) { label->SetPosition(398, 142 + (i * 41), 34, 17); label->SetText(std::to_string((4 - i) * stepValue).c_str()); label->SetStyle(STYLE_TEXT_COLOR, 0xFF6D6D6D); label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); label->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER); label->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_22); fifthPageContainer_->Add(label); } } return fifthPageContainer_; } UIScrollView *TjdUiAppDailyDataView::AboutPageViewInit(void) { UIScrollView *AboutPageView = new UIScrollView(); if (AboutPageView == nullptr) { static_print_error("%s: AboutPageView is nullptr", __func__); return nullptr; } AboutPageView->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); AboutPageView->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE); AboutPageView->SetVisible(false); AboutPageView->SetOnDragListener(presenter_); UILabel *label1 = new UILabel(); if (label1 != nullptr) { label1->SetPosition(100, 17, 266, 32); label1->SetText("关于"); label1->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE); label1->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label1->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_28); AboutPageView->Add(label1); } UILabel *label2 = new UILabel(); if (label2 != nullptr) { label2->SetPosition(27, 130, 412, 200); label2->SetText(about_txt); label2->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); label2->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label2->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_28); AboutPageView->Add(label2); } return AboutPageView; } uint8_t TjdUiAppDailyDataView::GetSwipeCurIndex(void) { if (swipeContainer_ != nullptr) { return swipeContainer_->GetCurrentPage(); } return 0; } void TjdUiAppDailyDataView::ChangedView(DailyDataView view, DailyDataView hideView) { if (view >= DAILYDATA_MAX_VIEW || viewMapper_[view] == nullptr) { return; } (GetInstance()->*viewMapper_[view])(hideView); } bool TjdUiAppDailyDataView::ShowSwipeView(DailyDataView hideView) { if (groupList_[hideView] == nullptr) { static_print_error("%s: groupList_ is nullptr", __func__); return false; } groupList_[hideView]->SetVisible(false); if (swipeContainer_) { swipeContainer_->RequestFocus(); swipeContainer_->SetRotateFactor(1.0); } if (groupList_[DailyDataView::DAILYDATA_SWIPE_VIEW] == nullptr) { static_print_error("%s: groupList_ is nullptr", __func__); return false; } groupList_[DailyDataView::DAILYDATA_SWIPE_VIEW]->SetVisible(true); groupList_[DailyDataView::DAILYDATA_SWIPE_VIEW]->Invalidate(); return true; } bool TjdUiAppDailyDataView::ShowAboutView(DailyDataView hideView) { if (groupList_[hideView] == nullptr) { static_print_error("%s: groupList_ is nullptr", __func__); return false; } groupList_[hideView]->SetVisible(false); if (hideView == DAILYDATA_SWIPE_VIEW && swipeContainer_) { swipeContainer_->ClearFocus(); } if (groupList_[DailyDataView::DAILYDATA_ABOUT_VIEW] == nullptr) { static_print_error("%s: groupList_ is nullptr", __func__); return false; } groupList_[DailyDataView::DAILYDATA_ABOUT_VIEW]->SetVisible(true); groupList_[DailyDataView::DAILYDATA_ABOUT_VIEW]->Invalidate(); return true; } void TjdUiAppDailyDataView::UpdateFirstPage(void) { auto timeEndAngle = presenter_->GetDailyDataModel()->GetTimePersent() * 360 / 100; auto stepEndAngle = presenter_->GetDailyDataModel()->GetStepPersent() * 360 / 100; auto calEndAngle = presenter_->GetDailyDataModel()->GetKCALPersent() * 360 / 100; PaintExt paint; paint.SetStyle(Paint::STROKE_STYLE); paint.SetStrokeColor((ColorType){.full = 0xFF0e7dff}); // paint.SetFillColor((ColorType){.full = 0xFF0e7dff}); paint.SetCapType(CAP_ROUND); // paint.SetGradientSpread(GradientSpread::SPREAD_REFLECT); canvas_.Clear(); paint.SetStrokeWidth(50); if (timeEndAngle) canvas_.DrawArc({233, 233}, 208, 0, timeEndAngle, paint); // 10, 0, 90: radius, startAngle, endAngle paint.SetStrokeColor((ColorType){.full = 0xFF0CC54F}); if (stepEndAngle) canvas_.DrawArc({233, 233}, 152, 0, stepEndAngle, paint); // 10, 0, 90: radius, startAngle, endAngle paint.SetStrokeColor((ColorType){.full = 0xFFFF8200}); if (calEndAngle) canvas_.DrawArc({233, 233}, 96, 0, calEndAngle, paint); // 10, 0, 90: radius, startAngle, endAngle } DDPointArray *TjdUiAppDailyDataView::GetPointArray(const char *id) { if (std::string(id) == STEP_ID) { return &stepArray; } else if (std::string(id) == CALORIE_ID) { return &KCALArray; } else if (std::string(id) == SPORTTIME_ID) { return &exerTimeArray; } else if (std::string(id) == DISTANCE_ID) { return &distanceArray; } static_print_error("has no such array that id is %s", id); return nullptr; } } // namespace TJD