训练结果增加两种不同配置样式
authorCaisking <3449750381@qq.com>
Fri, 2 Aug 2024 09:57:14 +0000 (17:57 +0800)
committerCaisking <3449750381@qq.com>
Fri, 2 Aug 2024 09:57:14 +0000 (17:57 +0800)
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEnddataView.h
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingModel.h
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataView.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp

index b141b59..be75218 100644 (file)
@@ -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<UILabel *> &labels, OHOS::ColorType color);
+        void AddLabelsToScrollView(const std::vector<UILabel *> &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};
     };
index 40b8501..6bf035a 100644 (file)
@@ -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;      // 训练发送数据频率
 
index 2546414..0b6736e 100644 (file)
@@ -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);
         }
     }
 
index 184885e..8d5a3c0 100644 (file)
 #include <string> // 包含字符串处理库,用于使用 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<UIView::OnClickListener *>(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<TraingEnddataPresenter>::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<UIView::OnDragListener *>(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<TraingEnddataPresenter>::OnTearDownView();
         return;
     }
@@ -413,11 +436,13 @@ namespace OHOS
     void TraingEnddataView::OnStop()
     {
         View<TraingEnddataPresenter>::OnStop();
-
-
         RootView::GetInstance()->ClearOnKeyActListener();
-        //FocusManager::GetInstance()->ClearFocus();
-        RootView::GetInstance()->RemoveAll();
+        if (container_ != nullptr)
+        {
+            container_->RemoveAll();
+            delete container_;
+            container_ = nullptr;
+        }
         return;
     }
 
index 12d8780..d854077 100644 (file)
@@ -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<int>(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<int>(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<double>(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<float>(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);
         }