From fb6df35586354d417bf2afd15f968a8994bcbd8a Mon Sep 17 00:00:00 2001 From: Caisking <3449750381@qq.com> Date: Fri, 2 Aug 2024 17:57:14 +0800 Subject: [PATCH] =?utf8?q?=E8=AE=AD=E7=BB=83=E7=BB=93=E6=9E=9C=E5=A2=9E?= =?utf8?q?=E5=8A=A0=E4=B8=A4=E7=A7=8D=E4=B8=8D=E5=90=8C=E9=85=8D=E7=BD=AE?= =?utf8?q?=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../traing/include/TraingEnddataView.h | 52 +- .../nativeui/traing/include/TraingModel.h | 8 + .../traing/src/TraingEnddataPresenter.cpp | 4 +- .../nativeui/traing/src/TraingEnddataView.cpp | 485 +++++++++--------- .../nativeui/traing/src/TraingModel.cpp | 85 ++- 5 files changed, 361 insertions(+), 273 deletions(-) diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEnddataView.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEnddataView.h index b141b59da..be75218f1 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEnddataView.h +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEnddataView.h @@ -56,7 +56,15 @@ namespace OHOS void PreLoad(void); - void InitData(); + void InitData(void); + void InitializeImageViews(void); + void InitializeLabels(void); + void SetLabelsTextColor(const std::vector &labels, OHOS::ColorType color); + void AddLabelsToScrollView(const std::vector &labels); + void InitializeExitControls(void); + + void BonusdataView(); + void ExitView(); private: UIView::OnDragListener *draglistener{nullptr}; @@ -66,25 +74,31 @@ namespace OHOS UIViewGroup *container_ = nullptr; UIScrollView *scrollView_ = nullptr; - UILabelExt *labeltype = nullptr; - UILabelExt *labelsport = nullptr; - UILabelExt *labelutime = nullptr; - UILabelExt *labelutag = nullptr; - UILabelExt *labelumile = nullptr; - UILabelExt *labeluheart = nullptr; - UILabelExt *labelustrong = nullptr; - UILabelExt *labelnote = nullptr; - UILabelExt *labelduration = nullptr; - UILabelExt *labelusteps = nullptr; + UILabelExt *labelutime = nullptr; // u训练时间 + UILabelExt *labelutag = nullptr; // u训练完成度 + UILabelExt *labelumile = nullptr; // u训练距离 + UILabelExt *labeluheart = nullptr; // u训练平均心率 + UILabelExt *labelustrong = nullptr; // u训练强度 + UILabelExt *labelusteps = nullptr; // u训练步数 + UILabelExt *labeluavpace = nullptr; // u训练平均配速 + UILabelExt *labelufreq = nullptr; // u训练步频 + UILabelExt *labelustride = nullptr; // u训练步幅 - UILabelExt *labeltag = nullptr; - UILabelExt *labeltime = nullptr; - UILabelExt *labelmile = nullptr; - UILabelExt *labelheart = nullptr; - UILabelExt *labelstrong = nullptr; - UILabelExt *labelsteps = nullptr; + UILabelExt *labeltype = nullptr; // 训练类型 + UILabelExt *labelsport = nullptr; // 训练项 + UILabelExt *labelduration = nullptr; // 训练时间 + UILabelExt *labeltag = nullptr; // 训练目标完成度 + UILabelExt *labeltime = nullptr; // 训练时长 + UILabelExt *labelmile = nullptr; // 训练距离 + UILabelExt *labelheart = nullptr; // 训练平均心率 + UILabelExt *labelstrong = nullptr; // 训练强度 + UILabelExt *labelsteps = nullptr; // 训练步数 + UILabelExt *labelavpace = nullptr; // 训练平均配速 + UILabelExt *labelfreq = nullptr; // 训练步频 + UILabelExt *labelstride = nullptr; // 训练步幅 - UILabelButtonExt *buttonexit = nullptr; + UILabelExt *exitLabel = nullptr; // APP提醒 + UILabelButtonExt *exitButton = nullptr; // 返回按键 UIImageView *imageIcon = nullptr; UIImageView *imageLine2 = nullptr; @@ -94,6 +108,8 @@ namespace OHOS UIImageView *imageLine6 = nullptr; UIImageView *imageLine7 = nullptr; UIImageView *imageLine8 = nullptr; + UIImageView *imageLine9 = nullptr; + UIImageView *imageLine10 = nullptr; bool viewiInitStatus{false}; }; diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingModel.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingModel.h index 40b8501b6..6bf035a06 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingModel.h @@ -336,6 +336,10 @@ namespace OHOS void SetEntryType(ENTEYTYPE type); ENTEYTYPE GetEntryType(); + /*判断是否为特殊运动*/ + void IsSpecialSport(UIResourceTextId sportId_); + bool GetIsSpecial(); + private: TraingModel(const TraingModel &) = delete; TraingModel &operator=(const TraingModel &) = delete; @@ -348,6 +352,10 @@ namespace OHOS ENTEYTYPE entey_type = ENTEYTYPE::MAIN_ENTER; // 进入方式 + bool isspecialsport_{false}; + + // int currentdata = 0; // 当前目标配置 + int sportTag_ = 0; // 训练目标 int freq = 0; // 训练发送数据频率 diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataPresenter.cpp index 25464148c..0b6736eca 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataPresenter.cpp @@ -59,11 +59,11 @@ namespace OHOS // 根据前一界面切换 if (preSlice == VIEW_TRAINING_RECORD) { - NativeAbility::GetInstance().Back(TransitionType::TRANSITION_ZOOM); + NativeAbility::GetInstance().Back(); } else if (preSlice == VIEW_TRAININGCRAD) { - NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGMORE, TransitionType::TRANSITION_ZOOM); + NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGMORE); } } diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataView.cpp index 184885ea0..8d5a3c0bf 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataView.cpp @@ -15,12 +15,24 @@ #include // 包含字符串处理库,用于使用 std::to_string /*测试打印函数*/ -#define PRINT_LINE_INFO() printf("File: %s, Line: %d\r\n", __FILE__, __LINE__) -#define PRINT_FUNCTION_LINE() printf("Function: %s, Line: %d\r\n", __FUNCTION__, __LINE__) +#define PRINT_LINE_INFO() WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "File: %s, Line: %d\r\n", __FILE__, __LINE__) +#define PRINT_FUNCTION_LINE() WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Function: %s, Line: %d\r\n", __FUNCTION__, __LINE__) namespace OHOS { + static const int startY_Unit = 252; + static const int startY_Value = 292; + static const int labelHeight = 40; + static const int labelInterval = 130; + ColorType textColor = Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f); + + static const int initialY = 132; + static const int lineHeight = 130; + static const int iconHeight = 80; + static const int verticalOffset = 2; + static const int baseY = 214; + static TraingEnddataView *g_pTraingEnddataView{nullptr}; TraingEnddataView::TraingEnddataView() @@ -40,39 +52,19 @@ namespace OHOS return g_pTraingEnddataView; } - /* InitView:初始化界面*/ - void TraingEnddataView ::InitView() + // 初始化图像 + void TraingEnddataView ::InitializeImageViews() { - // printf("TraingEnddataView::InitView()\r\n"); - if (container_ == nullptr) - { - container_ = new UIViewGroup(); - container_->SetPosition(0, 0, 466, 466); - container_->SetStyle(STYLE_BACKGROUND_OPA, 0); - } + // 初始化主图标 + InitImageView(imageIcon, 80, initialY, 54, iconHeight, "image", WALKING_54_IMAGE); - // Add ScrollView to App - if (scrollView_ == nullptr) - { - scrollView_ = new UIScrollView(); - } - scrollView_->SetPosition(0, 0); // widget's left position and top position - scrollView_->Resize(466, 466); // widget's width and height - scrollView_->SetViewId("scrollView1"); // Set style - scrollView_->SetReboundSize(100); - scrollView_->SetScrollBlankSize(35); - scrollView_->SetHorizontalScrollState(false); - container_->Add(scrollView_); - scrollView_->SetVisible(true); + InitImageView(imageLine2, 97, baseY, 80, 20, "image2", LINE_IMAGE); // imageLine2 + InitImageView(imageLine3, 97, baseY + lineHeight, 80, 20, "image3", LINE_IMAGE); // imageLine3 + InitImageView(imageLine4, 97, baseY + 2 * lineHeight, 80, 20, "image4", LINE_IMAGE); // imageLine4 + InitImageView(imageLine5, 97, baseY + 3 * lineHeight, 80, 20, "image5", LINE_IMAGE); // imageLine5 + InitImageView(imageLine6, 97, baseY + 4 * lineHeight, 80, 20, "image6", LINE_IMAGE); // imageLine6 + InitImageView(imageLine7, 97, baseY + 5 * lineHeight, 80, 20, "image7", LINE_IMAGE); // imageLine7 - // 初始化image - InitImageView(imageIcon, 80, 132, 54, 80, "image5", WALKING_54_IMAGE); - InitImageView(imageLine2, 97, 214, 80, 20, "image6", LINE_IMAGE); - InitImageView(imageLine3, 97, 344, 80, 20, "image8", LINE_IMAGE); - InitImageView(imageLine4, 97, 474, 80, 20, "image9", LINE_IMAGE); - InitImageView(imageLine5, 97, 604, 80, 20, "image10", LINE_IMAGE); - InitImageView(imageLine6, 97, 734, 80, 20, "image11", LINE_IMAGE); - InitImageView(imageLine7, 97, 864, 80, 20, "image12", LINE_IMAGE); scrollView_->Add(imageLine2); scrollView_->Add(imageLine3); scrollView_->Add(imageLine4); @@ -80,41 +72,44 @@ namespace OHOS scrollView_->Add(imageLine6); scrollView_->Add(imageLine7); scrollView_->Add(imageIcon); - - // 初始化Lable - // 初始化标签 + } + void TraingEnddataView ::InitializeLabels(void) + { + /*title and sport*/ InitLabelExt(labeltype, 83, 50, 300, 35, "label1", STR_EXERCISE_LIST, DEFAULT_VECTOR_FONT_FILENAME, 30); InitLabel(labelsport, 147, 140, 240, 35, "label6", "健走", DEFAULT_VECTOR_FONT_FILENAME, 30); InitLabel(labelduration, 146, 179, 240, 40, "label7", "13:00:22-15:00:12", DEFAULT_VECTOR_FONT_FILENAME, 28); - InitLabelExt(labelutag, 146, 252, 240, 40, "label8", STR_GOAL_ACCOMPLISHMENT_DEGREE, DEFAULT_VECTOR_FONT_FILENAME, 30); - InitLabelExt(labelutime, 146, 382, 240, 40, "label9", STR_TRAINING_DURATION, DEFAULT_VECTOR_FONT_FILENAME, 30); - InitLabelExt(labelumile, 146, 512, 240, 40, "label10", STR_RANGE_MILE, DEFAULT_VECTOR_FONT_FILENAME, 30); - InitLabelExt(labeluheart, 146, 642, 240, 40, "label11", STR_MEAN_HEART_RATE_MIN, DEFAULT_VECTOR_FONT_FILENAME, 30); - InitLabelExt(labelusteps, 146, 772, 240, 40, "label12", STR_STEP_NUMBER, DEFAULT_VECTOR_FONT_FILENAME, 30); - InitLabelExt(labelustrong, 146, 902, 240, 40, "label2", STR_TRAINING_INTENSITY, DEFAULT_VECTOR_FONT_FILENAME, 30); - InitLabelExt(labelnote, 80, 1024, 300, 40, "label8", STR_MORE_APP, DEFAULT_VECTOR_FONT_FILENAME, 30); + + // 初始化单位Label + InitLabelExt(labelutag, 146, startY_Unit + labelInterval * 0, 240, 40, "label8", STR_GOAL_ACCOMPLISHMENT_DEGREE, DEFAULT_VECTOR_FONT_FILENAME, 30); + InitLabelExt(labelutime, 146, startY_Unit + labelInterval * 1, 240, 40, "label9", STR_TRAINING_DURATION, DEFAULT_VECTOR_FONT_FILENAME, 30); + InitLabelExt(labelumile, 146, startY_Unit + labelInterval * 2, 240, 40, "label10", STR_RANGE_MILE, DEFAULT_VECTOR_FONT_FILENAME, 30); + InitLabelExt(labeluheart, 146, startY_Unit + labelInterval * 3, 240, 40, "label11", STR_MEAN_HEART_RATE_MIN, DEFAULT_VECTOR_FONT_FILENAME, 30); + InitLabelExt(labelusteps, 146, startY_Unit + labelInterval * 4, 240, 40, "label12", STR_STEP_NUMBER, DEFAULT_VECTOR_FONT_FILENAME, 30); + InitLabelExt(labelustrong, 146, startY_Unit + labelInterval * 5, 240, 40, "label2", STR_TRAINING_INTENSITY, DEFAULT_VECTOR_FONT_FILENAME, 30); // 设置文本颜色 - labelduration->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f)); - labelutag->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f)); - labelutime->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f)); - labelumile->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f)); - labeluheart->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f)); - labelustrong->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f)); - labelnote->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f)); - - InitLabel(labeltag, 146, 292, 240, 60, "label18", "--", DEFAULT_VECTOR_FONT_FILENAME, 40); - labeltag->SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff)); - InitLabel(labeltime, 146, 418, 240, 60, "label14", "05:45:46", DEFAULT_VECTOR_FONT_FILENAME, 40); - labeltime->SetTextColor(Color::GetColorFromRGBA(0xff, 0x8a, 0x36, 0xff)); - InitLabel(labelmile, 146, 548, 240, 60, "label15", "8,301", DEFAULT_VECTOR_FONT_FILENAME, 40); - labelmile->SetTextColor(Color::GetColorFromRGBA(0x36, 0x4a, 0xff, 0xff)); - InitLabel(labelheart, 146, 678, 240, 60, "label16", "144", DEFAULT_VECTOR_FONT_FILENAME, 40); - labelheart->SetTextColor(Color::GetColorFromRGBA(0xff, 0x5a, 0x36, 0xff)); - InitLabel(labelsteps, 146, 808, 240, 60, "label16", "5000", DEFAULT_VECTOR_FONT_FILENAME, 40); - labelsteps->SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff)); - InitLabel(labelstrong, 146, 938, 240, 60, "label17", "中等强度", DEFAULT_VECTOR_FONT_FILENAME, 30); - labelstrong->SetTextColor(Color::GetColorFromRGBA(0xff, 0x5a, 0x36, 0xff)); + labelduration->SetTextColor(textColor); + labelutag->SetTextColor(textColor); + labelutime->SetTextColor(textColor); + labelumile->SetTextColor(textColor); + labeluheart->SetTextColor(textColor); + labelusteps->SetTextColor(textColor); + labelustrong->SetTextColor(textColor); + + // 初始化值 + InitLabel(labeltag, 146, startY_Value + 0 * labelInterval, 240, 60, "label18", "--", DEFAULT_VECTOR_FONT_FILENAME, 40); + labeltag->SetTextColor(Color::Green()); + InitLabel(labeltime, 146, startY_Value + 1 * labelInterval, 240, 60, "label14", "05:45:46", DEFAULT_VECTOR_FONT_FILENAME, 40); + labeltime->SetTextColor(Color::Orange()); + InitLabel(labelmile, 146, startY_Value + 2 * labelInterval, 240, 60, "label15", "8,301", DEFAULT_VECTOR_FONT_FILENAME, 40); + labelmile->SetTextColor(Color::Blue()); + InitLabel(labelheart, 146, startY_Value + 3 * labelInterval, 240, 60, "label16", "144", DEFAULT_VECTOR_FONT_FILENAME, 40); + labelheart->SetTextColor(Color::Yellow()); + InitLabel(labelsteps, 146, startY_Value + 4 * labelInterval, 240, 60, "label16", "5000", DEFAULT_VECTOR_FONT_FILENAME, 40); + labelsteps->SetTextColor(Color::Green()); + InitLabel(labelstrong, 146, startY_Value + 5 * labelInterval, 240, 60, "label17", "中等强度", DEFAULT_VECTOR_FONT_FILENAME, 30); + labelstrong->SetTextColor(Color::Orange()); scrollView_->Add(labeltype); scrollView_->Add(labelsport); @@ -131,155 +126,165 @@ namespace OHOS scrollView_->Add(labelmile); scrollView_->Add(labelheart); scrollView_->Add(labelstrong); - scrollView_->Add(labelnote); scrollView_->Add(labelsteps); + } + /* InitView:初始化界面*/ + void TraingEnddataView ::InitView() + { - // 初始化button - InitButtonExt(buttonexit, 42, 1111, 380, 100, BUTTONBACK, STR_CLOSE, 30); - buttonexit->SetOnClickListener(static_cast(TraingEnddataPresenter::GetInstance())); - scrollView_->Add(buttonexit); + scrollView_ = new UIScrollView(); + scrollView_->SetPosition(0, 0); + scrollView_->Resize(466, 466); + scrollView_->SetViewId("scrollView"); + scrollView_->SetReboundSize(100); + scrollView_->SetScrollBlankSize(35); + scrollView_->SetHorizontalScrollState(false); + scrollView_->SetVisible(true); + + /*初始化线条*/ + InitializeImageViews(); + + /*初始化label*/ + InitializeLabels(); - // printf("TraingEnddataView::InitView() is end\r\n"); + BonusdataView(); // 配置额外数据 + + ExitView(); // 配置退出组件 + + container_->Add(scrollView_); } + // 增加额外配置 + void TraingEnddataView::BonusdataView() + { + if (!TraingModel::GetInstance()->GetIsSpecial()) + return; - /* DeInit:删除组件 */ - void TraingEnddataView::DeInit() + /*线条*/ + InitImageView(imageLine8, 97, baseY + 6 * lineHeight, 80, 20, "image8", LINE_IMAGE); // imageLine8 + InitImageView(imageLine9, 97, baseY + 7 * lineHeight, 80, 20, "image9", LINE_IMAGE); // imageLine9 + InitImageView(imageLine10, 97, baseY + 8 * lineHeight, 80, 20, "image10", LINE_IMAGE); // imageLine10 + scrollView_->Add(imageLine8); + scrollView_->Add(imageLine9); + scrollView_->Add(imageLine10); + /*label*/ + InitLabelExt(labeluavpace, 146, startY_Unit + labelInterval * 6, 240, 40, "label2", STR_AVG_PAVE, DEFAULT_VECTOR_FONT_FILENAME, 30); + InitLabelExt(labelufreq, 146, startY_Unit + labelInterval * 7, 240, 40, "label2", STR_STEP_FRE, DEFAULT_VECTOR_FONT_FILENAME, 30); + InitLabelExt(labelustride, 146, startY_Unit + labelInterval * 8, 240, 40, "label2", STR_STR_LENGTH, DEFAULT_VECTOR_FONT_FILENAME, 30); + labeluavpace->SetTextColor(textColor); + labelufreq->SetTextColor(textColor); + labelustride->SetTextColor(textColor); + scrollView_->Add(labeluavpace); + scrollView_->Add(labelufreq); + scrollView_->Add(labelustride); + + InitLabel(labelavpace, 146, startY_Value + 6 * labelInterval, 240, 60, "label17", "5.45", DEFAULT_VECTOR_FONT_FILENAME, 40); + labelavpace->SetTextColor(Color::Blue()); + InitLabel(labelfreq, 146, startY_Value + 7 * labelInterval, 240, 60, "label17", "154", DEFAULT_VECTOR_FONT_FILENAME, 40); + labelfreq->SetTextColor(Color::Green()); + InitLabel(labelstride, 146, startY_Value + 8 * labelInterval, 240, 60, "label17", "77", DEFAULT_VECTOR_FONT_FILENAME, 40); + labelstride->SetTextColor(Color::Green()); + scrollView_->Add(labelavpace); + scrollView_->Add(labelfreq); + scrollView_->Add(labelstride); + } + // 配置退出相关位置 + void TraingEnddataView::ExitView() { - scrollView_->RemoveAll(); - container_->RemoveAll(); - /*单位label*/ - if (labeltype != nullptr) - { - delete labeltype; - labeltype = nullptr; - } - if (labelsport != nullptr) - { - delete labelsport; - labelsport = nullptr; - } - if (labelutime != nullptr) - { - delete labelutime; - labelutime = nullptr; - } - if (labelutag != nullptr) - { - delete labelutag; - labelutag = nullptr; - } - if (labelusteps != nullptr) - { - delete labelusteps; - labelusteps = nullptr; - } - /*数据label*/ - if (labelumile != nullptr) - { - delete labelumile; - labelumile = nullptr; - } - if (labeluheart != nullptr) - { - delete labeluheart; - labeluheart = nullptr; - } - if (labelustrong != nullptr) - { - delete labelustrong; - labelustrong = nullptr; - } - if (labelnote != nullptr) - { - delete labelnote; - labelnote = nullptr; - } - if (labelduration != nullptr) - { - delete labelduration; - labelduration = nullptr; - } - if (labeltag != nullptr) - { - delete labeltag; - labeltag = nullptr; - } - if (labeltime != nullptr) + if (TraingModel::GetInstance()->GetIsSpecial()) { - delete labeltime; - labeltime = nullptr; + // 初始化退出(最后 要根据前方配置设置位置) + InitLabelExt(exitLabel, 80, 1404, 300, 40, "label8", STR_MORE_APP, DEFAULT_VECTOR_FONT_FILENAME, 30); + InitButtonExt(exitButton, 42, 1484, 380, 100, BUTTONBACK, STR_CLOSE, 30); } - if (labelmile != nullptr) - { - delete labelmile; - labelmile = nullptr; - } - if (labelheart != nullptr) - { - delete labelheart; - labelheart = nullptr; - } - if (labelstrong != nullptr) - { - delete labelstrong; - labelstrong = nullptr; - } - if (labelsteps != nullptr) - { - delete labelsteps; - labelsteps = nullptr; - } - /*按键*/ - if (buttonexit != nullptr) - { - delete buttonexit; - buttonexit = nullptr; - } - /*图片*/ - if (imageIcon != nullptr) - { - delete imageIcon; - imageIcon = nullptr; - } - if (imageLine2 != nullptr) - { - delete imageLine2; - imageLine2 = nullptr; - } - if (imageLine3 != nullptr) - { - delete imageLine3; - imageLine3 = nullptr; - } - if (imageLine4 != nullptr) - { - delete imageLine4; - imageLine4 = nullptr; - } - if (imageLine5 != nullptr) - { - delete imageLine5; - imageLine5 = nullptr; - } - if (imageLine6 != nullptr) - { - delete imageLine6; - imageLine6 = nullptr; - } - if (imageLine7 != nullptr) - { - delete imageLine7; - imageLine7 = nullptr; - } - - if (scrollView_ != nullptr) + else { - delete scrollView_; - scrollView_ = nullptr; + InitLabelExt(exitLabel, 80, 1024, 300, 40, "label8", STR_MORE_APP, DEFAULT_VECTOR_FONT_FILENAME, 30); + InitButtonExt(exitButton, 42, 1111, 380, 100, BUTTONBACK, STR_CLOSE, 30); } + exitLabel->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f)); + scrollView_->Add(exitLabel); + exitButton->SetOnClickListener(presenter_); + scrollView_->Add(exitButton); + } + /* DeInit:删除组件 */ + void TraingEnddataView::DeInit() + { + scrollView_->RemoveAll(); - delete container_; - container_ = nullptr; + /*单位label*/ + delete labelutime; + labelutime = nullptr; + delete labelutag; + labelutag = nullptr; + delete labelusteps; + labelusteps = nullptr; + delete labelumile; + labelumile = nullptr; + delete labeluheart; + labeluheart = nullptr; + delete labelustrong; + labelustrong = nullptr; + delete labeluavpace; + labeluavpace = nullptr; + delete labelufreq; + labelufreq = nullptr; + delete labelustride; + labelustride = nullptr; + + /*值label*/ + delete labeltype; + labeltype = nullptr; + delete labelsport; + labelsport = nullptr; + delete labelduration; + labelduration = nullptr; + delete labeltag; + labeltag = nullptr; + delete labeltime; + labeltime = nullptr; + delete labelmile; + labelmile = nullptr; + delete labelheart; + labelheart = nullptr; + delete labelstrong; + labelstrong = nullptr; + delete labelsteps; + labelsteps = nullptr; + delete labelavpace; + labelavpace = nullptr; + delete labelfreq; + labelfreq = nullptr; + delete labelstride; + labelstride = nullptr; + + /*图片label*/ + delete imageIcon; + imageIcon = nullptr; + delete imageLine2; + imageLine2 = nullptr; + delete imageLine3; + imageLine3 = nullptr; + delete imageLine4; + imageLine4 = nullptr; + delete imageLine5; + imageLine5 = nullptr; + delete imageLine6; + imageLine6 = nullptr; + delete imageLine8; + imageLine8 = nullptr; + delete imageLine9; + imageLine9 = nullptr; + delete imageLine10; + imageLine10 = nullptr; + + /*退出相关*/ + delete exitButton; + exitButton = nullptr; + delete exitLabel; + exitLabel = nullptr; + + delete scrollView_; + scrollView_ = nullptr; } void TraingEnddataView::PreLoad(void) @@ -297,68 +302,95 @@ namespace OHOS if (enddata == nullptr) { - printf("Enddata is nullptr. Exiting InitData()...\r\n"); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Enddata is nullptr. Exiting InitData()...\r\n"); return; } + // 训练图标Icon std::string imageStr = TraingModel::GetInstance()->GetSportType(enddata->sportType); if (!imageStr.empty()) { - printf("imageIcon %s\r\n", imageStr.c_str()); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "imageIcon %s\r\n", imageStr.c_str()); imageIcon->SetSrc(imageStr.c_str()); } else { - printf("Failed to get image string. Skipping imageIcon update.\r\n"); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Failed to get image string. Skipping imageIcon update.\r\n"); } // 训练类 UIResourceTextId typeId = TraingModel::GetInstance()->GetSportTypeId(enddata->sportType); labeltype->SetTextId(typeId); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Sport Type ID set: %d\r\n", typeId); // 打印运动类型ID // 运动项目 labelsport->SetTextId(enddata->sportId); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Sport ID set: %d\r\n", enddata->sportId); // 打印运动项目ID // 运动开始结束时间 std::string startTimeStr = enddata->start_time; std::string endTimeStr = enddata->end_time; std::string durationStr = startTimeStr + "-" + endTimeStr; labelduration->SetText(durationStr.c_str()); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Duration set: %s\r\n", durationStr.c_str()); // 打印运动时间段 // 运动目标 if (enddata->goaldegree) { std::string tagStr = std::to_string(enddata->goaldegree) + "%"; labeltag->SetText(tagStr.c_str()); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Goal degree set: %s\r\n", tagStr.c_str()); // 打印运动目标 } else { - printf("Enddata tag is null. Skipping labeltag update.\r\n"); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Enddata tag is null. Skipping labeltag update.\r\n"); } // 运动时长 - printf("Duration of the sport: %d\r\n", enddata->duration); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Duration of the sport: %d\r\n", enddata->duration); std::string timeStr = TraingModel::GetInstance()->GetTrainingTime(); - labeltime->SetText(timeStr.c_str()); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Training time set: %s\r\n", timeStr.c_str()); // 打印训练时间 // 运动距离 std::string mileStr = std::to_string(enddata->distance); labelmile->SetText(mileStr.c_str()); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Distance set: %s\r\n", mileStr.c_str()); // 打印运动距离 // 平均心率 std::string heartStr = std::to_string(enddata->avgheart); labelheart->SetText(heartStr.c_str()); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Average heart rate set: %s\r\n", heartStr.c_str()); // 打印平均心率 // 步数 std::string stepStr = std::to_string(enddata->steps); labelsteps->SetText(stepStr.c_str()); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Steps set: %s\r\n", stepStr.c_str()); // 打印步数 // 训练强度 UIResourceTextId intensityid = TraingModel::GetInstance()->GetIntensity(); labelstrong->SetTextId(intensityid); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Intensity ID set: %d\r\n", intensityid); // 打印训练强度ID + + if (TraingModel::GetInstance()->GetIsSpecial()) + { + // 平均配速 + std::string avpaceStr = std::to_string(enddata->apc); + labelavpace->SetText(avpaceStr.c_str()); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Average pace set: %s\r\n", avpaceStr.c_str()); // 打印平均配速 + + // 步频 + std::string freqStr = std::to_string(enddata->cdc); + labelfreq->SetText(freqStr.c_str()); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Cadence set: %s\r\n", freqStr.c_str()); // 打印步频 - printf("TraingEnddataView data initialization complete.\r\n"); + // 步幅 + std::string strideStr = std::to_string(enddata->std); + labelstride->SetText(strideStr.c_str()); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Stride length set: %s\r\n", strideStr.c_str()); // 打印步幅 + } + + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingEnddataView data initialization complete.\r\n"); } // 设置按键监听 static void SetKeyActListener() @@ -370,29 +402,21 @@ namespace OHOS } void TraingEnddataView::OnStart() { + View::OnStart(); + container_ = new UIViewGroup(); - if (container_ == nullptr) - { - return; - } - container_->SetPosition(0, 0); - container_->SetWidth(Screen::GetInstance().GetWidth()); - container_->SetHeight(Screen::GetInstance().GetHeight()); + container_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight()); - // 创建 draglistener 实例并设置为拖动监听器 - UIView::OnDragListener *draglistener = static_cast(TraingEnddataPresenter::GetInstance()); - if (draglistener == nullptr) - { - return; - } - container_->SetOnDragListener(draglistener); + PreLoad(); + InitData(); // 刷新数据 + + RootView::GetInstance()->Add(container_); + SetContainerView(container_); - container_->SetTouchable(true); container_->SetDraggable(true); + container_->SetTouchable(true); + container_->SetOnDragListener(presenter_); - PreLoad(); - InitData(); - RootView::GetInstance()->Add(container_); SetKeyActListener(); } @@ -405,7 +429,6 @@ namespace OHOS void TraingEnddataView::OnTearDownView() { - View::OnTearDownView(); return; } @@ -413,11 +436,13 @@ namespace OHOS void TraingEnddataView::OnStop() { View::OnStop(); - - RootView::GetInstance()->ClearOnKeyActListener(); - //FocusManager::GetInstance()->ClearFocus(); - RootView::GetInstance()->RemoveAll(); + if (container_ != nullptr) + { + container_->RemoveAll(); + delete container_; + container_ = nullptr; + } return; } diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp index 12d878025..d854077d1 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp @@ -157,17 +157,17 @@ extern "C" } if (request->msgId == TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE) { - cywee_activity_result_extre_info_t *cyweeInfo = new cywee_activity_result_extre_info_t(); - int rets = memcpy_s(cyweeInfo, sizeof(cywee_activity_result_extre_info_t), (cywee_activity_result_extre_info_t *)request->data, request->len); + cywee_activity_result_extre_info_t *cyweeInfo_ext = new cywee_activity_result_extre_info_t(); + int rets = memcpy_s(cyweeInfo_ext, sizeof(cywee_activity_result_extre_info_t), (cywee_activity_result_extre_info_t *)request->data, request->len); if (rets != EOK) { - delete cyweeInfo; // 处理内存分配失败的情况 - cyweeInfo = NULL; + delete cyweeInfo_ext; // 处理内存分配失败的情况 + cyweeInfo_ext = NULL; WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "memcpy_s cywee_activity_result_extre_info_t fail ret = %d", rets); return; } - TraingModel::GetInstance()->AnalysisExtraData(cyweeInfo); - delete cyweeInfo; // 释放内存 + TraingModel::GetInstance()->AnalysisExtraData(cyweeInfo_ext); + delete cyweeInfo_ext; // 释放内存 } if (request->msgId == TOPIC_EVENT_BLE_TRAINING) { @@ -301,7 +301,7 @@ namespace OHOS std::string TraingModel::GetSportIcon(Exercisetype sporttype) { int index = static_cast(sporttype); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " GetSportIcon index %d", index); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " GetSportIcon index %d", index); return sportIcons[static_cast(sporttype)]; } /*设置运动Id*/ @@ -313,13 +313,13 @@ namespace OHOS /*获取运动Id*/ UIResourceTextId TraingModel::GetSportEvent() { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " GetSportEvent %d", sportId_); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " GetSportEvent %d", sportId_); return sportId_; } /*获取运动项目*/ ExerciseClass TraingModel::GetSportId() { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " GetSportType %d", sportId_); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " GetSportType %d", sportId_); // 设置结构体里面的运动类型 sportdata->sportId = sportId_; sportdata->sportType = sportType_; @@ -346,6 +346,30 @@ namespace OHOS return ExerciseClass::FREE_TRAINING; } } + /*判断是否为特殊运动*/ + void TraingModel::IsSpecialSport(UIResourceTextId sportId_) + { + switch (sportId_) + { + case UIResourceTextId::STR_EXERCISE_OUTDOORRUNNING: // 室外跑步 室外走路 + case UIResourceTextId::STR_EXERCISE_OUTDOORWALKING: + case UIResourceTextId::STR_EXERCISE_INDOORRUNNING: // 室内跑步 室内走路 + case UIResourceTextId::STR_EXERCISE_INDOORWALKING: + case UIResourceTextId::STR_EXERCISE_TREADMILL: // 跑步机 + case UIResourceTextId::STR_EXERCISE_STROLLMACHINE: + isspecialsport_ = true; + break; + default: // 自由训练 + isspecialsport_ = false; + break; + } + } + + bool TraingModel::GetIsSpecial() + { + return isspecialsport_; + } + /*设置运动状态*/ void TraingModel::SetSportState(ExerciseState state) { @@ -406,8 +430,9 @@ namespace OHOS // 不同的运动类型解析不同的数据 // 通用数据 sportdata->steps = cyweeInfo->steps; - sportdata->distance = cyweeInfo->distance; // 只赋值一次 + sportdata->distance = cyweeInfo->distance; sportdata->calories = cyweeInfo->calories; + sportdata->cdc = cyweeInfo->step_frequency; sportdata->std = cyweeInfo->step_length; sportdata->pc = cyweeInfo->pace; @@ -439,10 +464,12 @@ namespace OHOS // 训练目标检查 if (sportdata->tag && !Gettagstuats) { - int currentdata = GetSportTagData(); - if (currentdata >= sportdata->tag) + sportdata->goaldegree = GetGoaldegree(); + + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "sportdata->goaldegree %d", sportdata->goaldegree); + if (sportdata->goaldegree == 100) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "currentdata%d", currentdata); + // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "currentdata%d", currentdata); uapi_set_screen_on_api(); // 亮屏检测 custom_VibratorFunc(VibratorType::VIBRATOR_TYPE_TWO); TraingCardView::GetInstance()->SetPopupViewStatus(GetTagPopup, true); @@ -517,8 +544,9 @@ namespace OHOS sportdata->spc = data->spc; sportdata->std = data->std; sportdata->cdc = data->cdc; + printf_data(data); + IsSpecialSport(sportdata->sportId); // 配置训练特殊性 } - printf_data(data); } /*获取训练卡路里*/ int TraingModel::GetCal() @@ -583,6 +611,7 @@ namespace OHOS sportdata->starttime = time; sportdata->sportType = sportType_; // 训练类型 sportdata->sportId = sportId_; + IsSpecialSport(sportdata->sportId); // 配置运动特殊性状态 if (sportTag_) // 有值才设置[训练目标] { @@ -691,7 +720,7 @@ namespace OHOS #else if (MomentumFlag) { - GetGoaldegree(); // 设置目标完成度 + // GetGoaldegree(); // 设置目标完成度 if (SaveSportData()) { TraingRecordModel::GetInstance().SetJsonStatus(true); @@ -838,6 +867,8 @@ namespace OHOS /* 设置训练强度 */ void TraingModel::SetIntensity(int heart) { + // sportdata->intensity = active_state; +#if 1 /* 训练强度 220-年龄=最高心率 @@ -861,7 +892,7 @@ namespace OHOS // 将 heart 转换为 double 以避免整数除法 double heartRateAsDouble = static_cast(heart); double intensityPercentage = (heartRateAsDouble / (double)maxHeartRate) * 100; - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "intensityPercentage is %d", intensityPercentage); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "heart: %d, maxHeartRate: %d, intensityPercentage: %.2f", heart, maxHeartRate, intensityPercentage); if (intensityPercentage < LOW_INTENSITY_THRESHOLD) { @@ -883,6 +914,8 @@ namespace OHOS // 超高强度 sportdata->intensity = VERY_HIGH_INTENSITY; } + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "maxHeartRate: %d, heartRate: %d, intensityPercentage: %.2f", maxHeartRate, heart, intensityPercentage); +#endif } /*获取训练强度STR*/ UIResourceTextId TraingModel::GetIntensity() @@ -999,9 +1032,8 @@ namespace OHOS } int currentdata = GetSportTagData(); float completeness = (static_cast(currentdata) / sportdata->tag) * 100; - sportdata->goaldegree = round(completeness); // 四舍五入 - return sportdata->goaldegree; + return round(completeness); // 四舍五入 } /* uint32_t src; // 训练来源:0 - 手表开启的训练,1 - APP开启的训练 @@ -1181,14 +1213,14 @@ namespace OHOS if (ConfigModel::GetInstance()->get_configData_int(ConfigModel::CONFIGMODEL_ITEM_TRANING_AUTO)) { freq = ConfigModel::GetInstance()->get_configData_int(ConfigModel::CONFIGMODEL_ITEM_TRANING_FREQ); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "freq is %d\r\n", freq); // 获取实时数据频率 + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "freq is %d\r\n", freq); // 获取实时数据频率 if (sportdata->duration % freq == 0) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SendLiveData is OK\r\n"); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SendLiveData is OK\r\n"); SendLiveData(); // 发送实时数据 } } - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "duration:[%d] g_motionTimes[%d]\r\n", sportdata->duration, g_motionTimes); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "duration:[%d] g_motionTimes[%d]\r\n", sportdata->duration, g_motionTimes); } int hour = g_motionTimes / NUM_TIME_HOUR; @@ -1216,7 +1248,7 @@ namespace OHOS return; } gTraingCardPresenter->ModifiesTime(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingTimerCallback\r\n"); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingTimerCallback\r\n"); } /* 开启定时器 */ @@ -1224,7 +1256,7 @@ namespace OHOS { if (g_startCounting != NULL) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingModel::TraingTimer already exists!!"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingModel::TraingTimer already exists!!"); return; } g_startCounting = osTimerNew((osTimerFunc_t)TraingTimerCallback, osTimerPeriodic, NULL, NULL); @@ -1554,6 +1586,9 @@ namespace OHOS cJSON_AddNumberToObject(sportData, "avgHeartRate", data->avgheart); // 训练平均心率 cJSON_AddNumberToObject(sportData, "steps", data->steps); // 训练步数 cJSON_AddNumberToObject(sportData, "intensity", data->intensity); // 训练强度 + cJSON_AddNumberToObject(sportData, "apc", data->apc); // 训练平均配速 + cJSON_AddNumberToObject(sportData, "cdc", data->cdc); // 训练步频 + cJSON_AddNumberToObject(sportData, "std", data->std); // 训练步幅 // 添加运动数据节点到数组并限制数量 cJSON_AddItemToArray(dataArray, sportData); @@ -1682,6 +1717,10 @@ namespace OHOS sportData.steps = cJSON_GetObjectItem(item, "steps")->valueint; sportData.intensity = cJSON_GetObjectItem(item, "intensity")->valueint; + sportData.apc = cJSON_GetObjectItem(item, "apc")->valueint; + sportData.cdc = cJSON_GetObjectItem(item, "cdc")->valueint; + sportData.std = cJSON_GetObjectItem(item, "std")->valueint; + sportDataVector.push_back(sportData); } -- 2.17.1