血压slice姿势校准界面UI添加 1847/1
authorluozheng <1732036298@qq.com>
Tue, 17 Jun 2025 04:14:56 +0000 (12:14 +0800)
committerluozheng <1732036298@qq.com>
Tue, 17 Jun 2025 04:14:56 +0000 (12:14 +0800)
code/sdk/application/wearable/fd230app/nativeui/bloodpressure/include/BPCalPosReqView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/bloodpressure/include/BPMainView.h
code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPCalPosReqView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPMainPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPMainView.cpp

diff --git a/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/include/BPCalPosReqView.h b/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/include/BPCalPosReqView.h
new file mode 100644 (file)
index 0000000..4f50a70
--- /dev/null
@@ -0,0 +1,36 @@
+#ifndef BPCALPOSREQVIEW_H
+#define BPCALPOSREQVIEW_H
+#include "components/ui_label_ext.h"
+#include "components/ui_button.h"
+#include "components/ui_label_button_ext.h"
+#include "components/ui_image_view.h"
+#include "components/ui_view_group.h"
+#include "components/ui_scroll_view.h"
+
+namespace OHOS
+{
+    static constexpr char *STARTCALIBRATIONBUTTON = "startCalibrationButton"; // 校准按钮
+    class BPCalPosReqView
+    {
+    public:
+        BPCalPosReqView();
+        ~BPCalPosReqView();
+        static BPCalPosReqView *GetInstance();
+        UIViewGroup *InitBPCalPosReqView();
+
+    private:
+        void DeInit();
+        bool InitLabelAndImage();
+        UIViewGroup *group{nullptr};
+        UIScrollView *scrollview{nullptr};
+        UILabelExt *titleLabel{nullptr};
+        UILabelExt *label[4]{nullptr};
+        UIImageView *image{nullptr};
+        UILabelExt *label2{nullptr};
+        UILabelExt *label3{nullptr};
+        UILabelButtonExt *startCalibrationButton{nullptr}; // 校准按钮
+        UIImageView *temp{nullptr};
+    };
+
+}
+#endif
\ No newline at end of file
index 4e17b0e..98227fb 100644 (file)
@@ -9,13 +9,15 @@
 #include "bloodpressure/include/BPCalibrationView.h"
 #include "bloodpressure/include/BPUnderCalibrationView.h"
 #include "bloodpressure/include/BPValueView.h"
+#include "bloodpressure/include/BPCalPosReqView.h"
 namespace OHOS
 {
     typedef enum : uint8_t
     {
-        BPCALIBRATIONVIEW = 0, // 主界面
-        BPUNDERCALIBRATIONVIEW,     // BP校准界面
-        BPVALUEVIEW,     // 血压输入界面
+        BPCALIBRATIONVIEW = 0,  // 主界面
+        BPUNDERCALIBRATIONVIEW, // BP校准界面
+        BPCALPOSREQVIEW,        // 校准位置请求界面
+        BPVALUEVIEW,            // 血压输入界面
         MAX_BPVIEW,
     } BPVIEWID;
 
@@ -34,6 +36,7 @@ namespace OHOS
         bool ChangeBPCalibrationView(int16_t);
         bool ChangeBPUnderCalibrationView(int16_t);
         bool ChangeBPValueView(int16_t);
+        bool ChangeBPCalPosReqView(int16_t);
 
         bool ClickFunc(int16_t interface);
         void ChangeView(int16_t hideView, int16_t showView);
@@ -42,6 +45,7 @@ namespace OHOS
         BPCalibrationView *p_BPCalibrationView{nullptr};
         BPUnderCalibrationView *p_BPUnderCalibrationView{nullptr};
         BPValueView *g_pBPValueView{nullptr};
+        BPCalPosReqView *p_BPCalPosReqView{nullptr};
 
     private:
         void DeInit();
diff --git a/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPCalPosReqView.cpp b/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPCalPosReqView.cpp
new file mode 100644 (file)
index 0000000..bb903d5
--- /dev/null
@@ -0,0 +1,265 @@
+#include "bloodpressure/include/BPMainPresenter.h"
+#include "bloodpressure/include/BPCalPosReqView.h"
+#include "wearable_log.h"
+
+namespace OHOS
+{
+#define BPCALPOSREQVIEW_LABEL "校准提醒"
+#define BPCALPOSREQVIEW_LABEL_1 "1、建立血压模型需要进行两个轮次校准;"
+#define BPCALPOSREQVIEW_LABEL_2 "2、建议每个月都重新校准;"
+#define BPCALPOSREQVIEW_LABEL_3 "3、校准过程和实际血压测量请 使用同一只手;"
+#define BPCALPOSREQVIEW_LABEL_4 "4、若是高血压正在接受药物治疗的用户,请在服药前和服药后3-4小时,各进行校准一次。"
+#define BPCALPOSREQVIEW_LABEL_4 "4、若是高血压正在接受药物治疗的用户,请在服药前和服药后3-4小时,各进行校准一次。"
+#define BPCALPOSREQVIEW_LABEL_5 "校准姿势要求"
+#define BPCALPOSREQVIEW_LABEL_6 "请将手表佩戴在左手手腕,手表和手腕之间仅限一指距离贴紧佩戴手表,测量前建议至少休息五分钟以上,双脚平放无交叉,双手手背朝上,手臂平放在桌子上,测量过程中尽量保持静止,呼吸均匀平衡。"
+#define BPCALPOSREQVIEW_LABEL_7 "开始校准"
+#define BPCALPOSREQVIEW_LABEL_W 432          // 宽度
+#define BPCALPOSREQVIEW_LABEL_TEXT_SIZE 33   // 字体大小
+#define BPCALPOSREQVIEW_LABEL_LINE_HEIGHT 48 // 字体大小
+#define BPCALPOSREQVIEW_LABEL_GAP 48         // 间隔
+#define BPCALPOSREQVIEW_IMAGE_PATH "/user/res/BPCalibration/posture.bin"
+
+    static BPCalPosReqView *g_pBPCalPosReqView{nullptr};
+    BPCalPosReqView::BPCalPosReqView()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BPCalPosReqView::BPCalPosReqView");
+        g_pBPCalPosReqView = this;
+    }
+
+    BPCalPosReqView::~BPCalPosReqView()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BPCalPosReqView::~BPCalPosReqView");
+        DeInit();
+        g_pBPCalPosReqView = nullptr;
+    }
+
+    BPCalPosReqView *BPCalPosReqView::GetInstance()
+    {
+        return g_pBPCalPosReqView;
+    }
+
+    void BPCalPosReqView::DeInit()
+    {
+        if (group)
+        {
+            group->RemoveAll();
+            delete group;
+            group = nullptr;
+            if (scrollview)
+            {
+                scrollview->RemoveAll();
+                delete scrollview;
+                scrollview = nullptr;
+
+                delete titleLabel;
+                titleLabel = nullptr;
+
+                for (int i = 0; i < 4; i++)
+                {
+                    delete label[i];
+                    label[i] = nullptr;
+                }
+
+                delete image;
+                image = nullptr;
+
+                delete label2;
+                label2 = nullptr;
+
+                delete label3;
+                label3 = nullptr;
+
+                delete startCalibrationButton;
+                startCalibrationButton = nullptr;
+
+                delete temp;
+                temp = nullptr;
+            }
+        }
+    }
+
+    bool BPCalPosReqView::InitLabelAndImage()
+    {
+        const char *str[] = {
+            BPCALPOSREQVIEW_LABEL_1,
+            BPCALPOSREQVIEW_LABEL_2,
+            BPCALPOSREQVIEW_LABEL_3,
+            BPCALPOSREQVIEW_LABEL_4,
+        };
+        for (int i = 0; i < (sizeof(str) / sizeof(str[0])); i++)
+        {
+            label[i] = new UILabelExt();
+            if (label[i] == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "label[i] null!");
+                return false;
+            }
+            if (i == 0)
+            {
+                label[i]->SetPosition((HORIZONTAL_RESOLUTION - BPCALPOSREQVIEW_LABEL_W) / 2, 163, BPCALPOSREQVIEW_LABEL_W, BPCALPOSREQVIEW_LABEL_LINE_HEIGHT);
+            }
+            else
+            {
+                int y = label[i - 1]->GetY() + label[i - 1]->GetHeight();
+                label[i]->SetPosition((HORIZONTAL_RESOLUTION - BPCALPOSREQVIEW_LABEL_W) / 2, y, BPCALPOSREQVIEW_LABEL_W, BPCALPOSREQVIEW_LABEL_LINE_HEIGHT);
+            }
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "label[%d]->GetY() = %d", i, label[i]->GetY());
+            label[i]->SetStyle(STYLE_TEXT_FONT, BPCALPOSREQVIEW_LABEL_TEXT_SIZE);
+            label[i]->SetStyle(STYLE_LINE_HEIGHT, BPCALPOSREQVIEW_LABEL_LINE_HEIGHT);
+            label[i]->SetText(str[i]);
+            label[i]->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
+            label[i]->SetRollSpeed(23);
+            label[i]->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER);
+            label[i]->SetFont(DEFAULT_VECTOR_FONT_FILENAME, BPCALPOSREQVIEW_LABEL_TEXT_SIZE);
+            scrollview->Add(label[i]);
+        }
+        if (label2 == nullptr)
+        {
+            label2 = new UILabelExt();
+            if (label2 == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "label2 null!");
+                return false;
+            }
+        }
+        uint8_t i = (sizeof(str) / sizeof(str[0])) - 1;
+        label2->SetPosition((HORIZONTAL_RESOLUTION - 300) / 2, label[i]->GetY() + label[i]->GetHeight() + BPCALPOSREQVIEW_LABEL_GAP, 300, BPCALPOSREQVIEW_LABEL_LINE_HEIGHT);
+        label2->SetStyle(STYLE_TEXT_FONT, BPCALPOSREQVIEW_LABEL_TEXT_SIZE);
+        label2->SetStyle(STYLE_LINE_HEIGHT, BPCALPOSREQVIEW_LABEL_LINE_HEIGHT);
+        label2->SetText(BPCALPOSREQVIEW_LABEL_5);
+        label2->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
+        label2->SetRollSpeed(23);
+        label2->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        label2->SetFont(DEFAULT_VECTOR_FONT_FILENAME, BPCALPOSREQVIEW_LABEL_TEXT_SIZE);
+        scrollview->Add(label2);
+        /* -------------------------------------------------------------------------- */
+        if (image == nullptr)
+        {
+            image = new UIImageView();
+            if (image == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "image null!");
+                return false;
+            }
+        }
+        image->SetPosition((HORIZONTAL_RESOLUTION - 300) / 2, label2->GetY() + label2->GetHeight(), 300, 389);
+        image->SetSrc(BPCALPOSREQVIEW_IMAGE_PATH);
+        scrollview->Add(image);
+        /* -------------------------------------------------------------------------- */
+        if (label3 == nullptr)
+        {
+            label3 = new UILabelExt();
+            if (label3 == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "label3 null!");
+                return false;
+            }
+        }
+        label3->SetPosition((HORIZONTAL_RESOLUTION - BPCALPOSREQVIEW_LABEL_W) / 2, image->GetY() + image->GetHeight() + BPCALPOSREQVIEW_LABEL_GAP, BPCALPOSREQVIEW_LABEL_W, BPCALPOSREQVIEW_LABEL_LINE_HEIGHT);
+        label3->SetStyle(STYLE_TEXT_FONT, BPCALPOSREQVIEW_LABEL_TEXT_SIZE);
+        label3->SetStyle(STYLE_LINE_HEIGHT, BPCALPOSREQVIEW_LABEL_LINE_HEIGHT);
+        label3->SetText(BPCALPOSREQVIEW_LABEL_6);
+        label3->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
+        label3->SetRollSpeed(23);
+        label3->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER);
+        label3->SetFont(DEFAULT_VECTOR_FONT_FILENAME, BPCALPOSREQVIEW_LABEL_TEXT_SIZE);
+        scrollview->Add(label3);
+        return true;
+    }
+
+    UIViewGroup *BPCalPosReqView::InitBPCalPosReqView()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BPCalPosReqView::InitBPCalPosReqView start");
+        if (group == nullptr)
+        {
+            group = new UIViewGroup();
+            if (group == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group null!");
+                return nullptr;
+            }
+        }
+        group->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
+        group->SetTouchable(true);
+        group->SetDraggable(true);
+        UIView::OnDragListener *dragListener = (UIView::OnDragListener *)OHOS::BPMainPresenter::GetInstance();
+        group->SetOnDragListener(dragListener);
+        if (scrollview == nullptr)
+        {
+            scrollview = new UIScrollView();
+            if (scrollview == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "scrollview null!");
+                return nullptr;
+            }
+        }
+        scrollview->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
+        scrollview->SetHorizontalScrollState(false);
+        scrollview->SetThrowDrag(true);
+        scrollview->SetMaxScrollDistance(1000);
+        scrollview->SetScrollBlankSize(30);
+        scrollview->SetReboundSize(30);
+        group->Add(scrollview);
+        if (titleLabel == nullptr)
+        {
+            titleLabel = new UILabelExt();
+            if (titleLabel == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "titleLabel null!");
+                return nullptr;
+            }
+        }
+        titleLabel->SetPosition((HORIZONTAL_RESOLUTION - 300) / 2, 67, 300, BPCALPOSREQVIEW_LABEL_LINE_HEIGHT);
+        titleLabel->SetStyle(STYLE_TEXT_FONT, BPCALPOSREQVIEW_LABEL_TEXT_SIZE);
+        titleLabel->SetStyle(STYLE_LINE_HEIGHT, BPCALPOSREQVIEW_LABEL_LINE_HEIGHT);
+        titleLabel->SetText(BPCALPOSREQVIEW_LABEL);
+        titleLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
+        titleLabel->SetRollSpeed(23);
+        titleLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, BPCALPOSREQVIEW_LABEL_TEXT_SIZE);
+        scrollview->Add(titleLabel);
+        if (!InitLabelAndImage())
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitLabel error!");
+            return nullptr;
+        }
+        if (startCalibrationButton == nullptr)
+        {
+            startCalibrationButton = new UILabelButtonExt();
+            if (startCalibrationButton == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "startCalibrationButton null!");
+                return nullptr;
+            }
+        }
+        startCalibrationButton->SetPosition((HORIZONTAL_RESOLUTION - 220) / 2, label3->GetY() + label3->GetHeight() + BPCALPOSREQVIEW_LABEL_GAP, 220, 70);
+        startCalibrationButton->SetStyle(STYLE_TEXT_FONT, BPCALPOSREQVIEW_LABEL_TEXT_SIZE);
+        startCalibrationButton->SetStyle(STYLE_LINE_HEIGHT, BPCALPOSREQVIEW_LABEL_LINE_HEIGHT);
+        startCalibrationButton->SetAlign(TEXT_ALIGNMENT_CENTER);
+        startCalibrationButton->SetText(BPCALPOSREQVIEW_LABEL_7);
+        startCalibrationButton->SetViewId(STARTCALIBRATIONBUTTON);
+        startCalibrationButton->SetStyle(STYLE_BACKGROUND_COLOR, Color::Gray().full);
+        startCalibrationButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, BPCALPOSREQVIEW_LABEL_TEXT_SIZE);
+        startCalibrationButton->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);
+        startCalibrationButton->SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED);
+        UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::BPMainPresenter::GetInstance();
+        startCalibrationButton->SetOnClickListener(clickListener);
+        scrollview->Add(startCalibrationButton);
+        /* -------------------------------------------------------------------------- */
+        if (temp == nullptr)
+        {
+            temp = new UIImageView();
+            if (temp == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemFactoryResetView::new temp fail!");
+                return nullptr;
+            }
+        }
+        temp->SetPosition(43, startCalibrationButton->GetY() + startCalibrationButton->GetHeight(), 380, BPCALPOSREQVIEW_LABEL_GAP);
+        temp->SetVisible(false);
+        scrollview->Add(temp);
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BPCalPosReqView::InitBPCalPosReqView end");
+
+        return group;
+    }
+}
\ No newline at end of file
index 219d87d..5172b4a 100644 (file)
@@ -176,6 +176,10 @@ namespace OHOS
             BPValueView::DBP++;
            
         }
+        if(strcmp(view.GetViewId(),STARTCALIBRATIONBUTTON) == 0)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "STARTCALIBRATIONBUTTON");
+        }
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BPPresenter::OnClick");
         return true;
     }
index 77a2656..eea53ba 100644 (file)
@@ -43,7 +43,7 @@ namespace OHOS
     {
         return g_pBPMainView;
     }
-    
+
     void BPMainView::DeInit()
     {
         if (p_BPCalibrationView)
@@ -61,6 +61,11 @@ namespace OHOS
             delete g_pBPValueView;
             g_pBPValueView = nullptr;
         }
+        if (p_BPCalPosReqView)
+        {
+            delete p_BPCalPosReqView;
+            p_BPCalPosReqView = nullptr;
+        }
     }
 
     void BPMainView::OnStart()
@@ -80,7 +85,7 @@ namespace OHOS
 
         // 切换到第一个界面
         ChangeView(MAX_BPVIEW, BPCALIBRATIONVIEW);
-        //ChangeView(MAX_BPVIEW,BPUNDERCALIBRATIONVIEW);
+        // ChangeView(MAX_BPVIEW,BPUNDERCALIBRATIONVIEW);
 
         // 增加按键监听
         RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::BPMainPresenter::GetInstance();
@@ -138,7 +143,7 @@ namespace OHOS
         if (group[thisView] == nullptr)
         {
             WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodPressureView::ChangeUnderInitialCalibrationView");
-             p_BPUnderCalibrationView = new BPUnderCalibrationView();
+            p_BPUnderCalibrationView = new BPUnderCalibrationView();
             if (p_BPUnderCalibrationView == nullptr)
             {
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodPressureView:: new scrollView[%d] fail", thisView);
@@ -151,13 +156,13 @@ namespace OHOS
         return true;
     }
 
-     bool BPMainView::ChangeBPValueView(int16_t thisView)
+    bool BPMainView::ChangeBPValueView(int16_t thisView)
     {
         // 检查视图是否已初始化
         if (group[thisView] == nullptr)
         {
             WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodPressureView::BPValueView");
-             g_pBPValueView = new BPValueView();
+            g_pBPValueView = new BPValueView();
             if (g_pBPValueView == nullptr)
             {
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodPressureView:: new scrollView[%d] fail", thisView);
@@ -169,6 +174,24 @@ namespace OHOS
         }
         return true;
     }
+    bool BPMainView::ChangeBPCalPosReqView(int16_t thisView)
+    {
+        // 检查视图是否已初始化
+        if (group[thisView] == nullptr)
+        {
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodPressureView::ChangeUnderInitialCalibrationView");
+            p_BPCalPosReqView = new BPCalPosReqView();
+            if (p_BPCalPosReqView == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodPressureView:: new scrollView[%d] fail", thisView);
+                return false;
+            }
+            // 初始化视图并添加到视图组
+            group[thisView] = p_BPCalPosReqView->InitBPCalPosReqView();
+            container_->Add(group[thisView]);
+        }
+        return true;
+    }
 
     /**
      * 视图映射结构体 - 将视图ID映射到对应的视图切换函数
@@ -183,6 +206,7 @@ namespace OHOS
         {BPCALIBRATIONVIEW, &BPMainView::ChangeBPCalibrationView},
         {BPUNDERCALIBRATIONVIEW, &BPMainView::ChangeBPUnderCalibrationView},
         {BPVALUEVIEW, &BPMainView::ChangeBPValueView},
+        {BPCALPOSREQVIEW, &BPMainView::ChangeBPCalPosReqView},
     };
 
     bool BPMainView::ClickFunc(int16_t interface)