From 194c196457295643b433ec25a08f6ae29b3bbad7 Mon Sep 17 00:00:00 2001 From: luozheng <1732036298@qq.com> Date: Tue, 17 Jun 2025 12:14:56 +0800 Subject: [PATCH] =?utf8?q?=E8=A1=80=E5=8E=8Bslice=E5=A7=BF=E5=8A=BF?= =?utf8?q?=E6=A0=A1=E5=87=86=E7=95=8C=E9=9D=A2UI=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../bloodpressure/include/BPCalPosReqView.h | 36 +++ .../bloodpressure/include/BPMainView.h | 10 +- .../bloodpressure/src/BPCalPosReqView.cpp | 265 ++++++++++++++++++ .../bloodpressure/src/BPMainPresenter.cpp | 4 + .../nativeui/bloodpressure/src/BPMainView.cpp | 34 ++- 5 files changed, 341 insertions(+), 8 deletions(-) create mode 100644 code/sdk/application/wearable/fd230app/nativeui/bloodpressure/include/BPCalPosReqView.h create mode 100644 code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPCalPosReqView.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 index 000000000..4f50a70da --- /dev/null +++ b/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/include/BPCalPosReqView.h @@ -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 diff --git a/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/include/BPMainView.h b/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/include/BPMainView.h index 4e17b0eec..98227fb8e 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/include/BPMainView.h +++ b/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/include/BPMainView.h @@ -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 index 000000000..bb903d552 --- /dev/null +++ b/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPCalPosReqView.cpp @@ -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 diff --git a/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPMainPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPMainPresenter.cpp index 219d87d26..5172b4af6 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPMainPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPMainPresenter.cpp @@ -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; } diff --git a/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPMainView.cpp b/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPMainView.cpp index 77a2656ee..eea53bad6 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPMainView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPMainView.cpp @@ -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) -- 2.17.1