修复血氧Slice的滑动与内存泄漏
authorCaisking <Casiking@zhihuishixun.com>
Sat, 16 Aug 2025 07:44:21 +0000 (15:44 +0800)
committerCaisking <Casiking@zhihuishixun.com>
Sat, 16 Aug 2025 07:44:21 +0000 (15:44 +0800)
code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodoxygen/src/BloodDetectionPresenter.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodoxygen/src/BloodDetectionView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodoxygen/src/BloodResultView.cpp

index 99600ad..f4ea386 100644 (file)
@@ -64,7 +64,7 @@ namespace OHOS
    
     bool BloodDetectionPresenter::OnDrag(UIView &view, const DragEvent &event)
     {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodDetectionPresenter::OnDrag");
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodDetectionPresenter::OnDrag");
         UNUSED(view);
         if ((event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) && (event.GetDeltaX() > X_DRAG_OFFSET) &&
             (event.GetDeltaX() > (DOUBLES * MATH_ABS(event.GetDeltaY()))))
index f6894ec..2e9b914 100644 (file)
  * @Date: 2024-04-15 10:55:58
  * @LastEditors: Caisking 3449750381@qq.com
  * @LastEditTime: 2024-07-29 15:35:06
- * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodDetectionView.cpp
+ * @FilePath:
+ * /FD230/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodDetectionView.cpp
  */
-#include "UiConfig.h"
-#include "wearable_log.h"
 #include "bloodoxygen/include/BloodDetectionView.h"
+#include "UiConfig.h"
 #include "bloodoxygen/include/BloodOxygenModel.h"
+#include "power_display_service.h"
 #include "ui_image_animator.h"
 #include "ui_resource_string.h"
-#include "power_display_service.h"
 #include "uicomponents/UIComponents.h"
-namespace OHOS
-{
-    // 动态刷新设置
-    static constexpr uint16_t IMAGE_SIZE = 180;
-    static constexpr uint16_t IMAGE_POSITION_Y = 143;
-    static constexpr uint16_t IMAGE_POSITION_X = 143;
-    static constexpr uint16_t DETECTION_IMAGE_ANIMATORVIEW_SIZE = 30;
-    static constexpr uint16_t DETECTION_IMAGE_ANIMATORVIEW_SPEED = 40;
-    static const uint32_t BACK_GROUND_COLOR = 0xfff6f6f6;
+#include "wearable_log.h"
+namespace OHOS {
+// 动态刷新设置
+static constexpr uint16_t IMAGE_SIZE = 180;
+static constexpr uint16_t IMAGE_POSITION_Y = 143;
+static constexpr uint16_t IMAGE_POSITION_X = 143;
+static constexpr uint16_t DETECTION_IMAGE_ANIMATORVIEW_SIZE = 30;
+static constexpr uint16_t DETECTION_IMAGE_ANIMATORVIEW_SPEED = 40;
+static const uint32_t BACK_GROUND_COLOR = 0xfff6f6f6;
 
-    static ImageAnimatorInfo g_imageAnimatorInfo_blood[30] = {
-    {PNG_CHECK_TIME_IMAGE_0, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_1, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_2, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_3, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_4, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_5, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_6, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_7, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_8, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_9, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_10, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_11, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_12, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_13, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_14, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_15, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_16, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_17, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_18, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_19, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_20, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_21, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_22, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_23, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_24, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_25, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_26, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_27, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_28, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_CHECK_TIME_IMAGE_29, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    };
+static ImageAnimatorInfo g_imageAnimatorInfo_blood[30] = {
+    {PNG_CHECK_TIME_IMAGE_0,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_1,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_2,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_3,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_4,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_5,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_6,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_7,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_8,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_9,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_10,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_11,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_12,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_13,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_14,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_15,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_16,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_17,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_18,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_19,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_20,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_21,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_22,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_23,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_24,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_25,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_26,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_27,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_28,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+    {PNG_CHECK_TIME_IMAGE_29,
+     {IMAGE_POSITION_X, IMAGE_POSITION_Y},
+     IMAGE_SIZE,
+     IMAGE_SIZE,
+     IMG_SRC_FILE_PATH},
+};
 
-    static BloodDetectionView *g_pBloodCheckView = nullptr;
-    BloodDetectionView::BloodDetectionView()
-    {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::BloodBandoffView");
-        g_pBloodCheckView = this;
+static BloodDetectionView *g_pBloodCheckView = nullptr;
+BloodDetectionView::BloodDetectionView() {
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::BloodBandoffView");
+  g_pBloodCheckView = this;
+}
+BloodDetectionView::~BloodDetectionView() {
+  if (scrollView_) {
+    scrollView_->RemoveAll();
+    if (titleLabel) {
+      delete titleLabel;
+      titleLabel = nullptr;
     }
-    BloodDetectionView::~BloodDetectionView()
-    {
-        if(titleLabel)
-        {
-            delete titleLabel;
-            titleLabel = nullptr;
-        }
-        if(testButton)
-        {
-            delete testButton;
-            testButton = nullptr;
-        }
-        if(imageAnimator)
-        {
-            imageAnimator->Stop();
-            delete imageAnimator;
-            imageAnimator = nullptr;   
-        }
-        if(Spo2Text)
-        {
-            delete Spo2Text;
-            Spo2Text = nullptr;  
-        }
-        g_pBloodCheckView = nullptr;
+    if (testButton) {
+      delete testButton;
+      testButton = nullptr;
     }
-    BloodDetectionView *BloodDetectionView::GetInstance(void)
-    {
-        return g_pBloodCheckView;
+    if (imageAnimator) {
+      imageAnimator->Stop();
+      delete imageAnimator;
+      imageAnimator = nullptr;
     }
-    UIImageAnimatorView *BloodDetectionView::GetImageAnimator()
-    {
-        return imageAnimator;
+    if (Spo2Text) {
+      delete Spo2Text;
+      Spo2Text = nullptr;
     }
+  }
+  delete scrollView_;
+  scrollView_ = nullptr;
+  g_pBloodCheckView = nullptr;
+}
+BloodDetectionView *BloodDetectionView::GetInstance(void) {
+  return g_pBloodCheckView;
+}
+UIImageAnimatorView *BloodDetectionView::GetImageAnimator() {
+  return imageAnimator;
+}
 
-    /*更新显示数据*/
-    void BloodDetectionView::UpShowBloodText()
-    {
-        uint16_t spo2_ = BloodOxygenModel::GetInstance()->GetShowSPO2data();
-        std::string bloodoxygenStr = std::to_string(spo2_);
-        if (Spo2Text != nullptr)
-            Spo2Text->SetText(bloodoxygenStr.c_str());
-    }
-    /*初始化检测界面*/
-    bool BloodDetectionView::BloodDetectionViewInit()
-    {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodDetectionViewInit is begin");
-        /*初始化title*/
-        InitLabelExt(titleLabel, 83, 50, 300, 35, "title", STR_CHECKON, DEFAULT_VECTOR_FONT_FILENAME, 30);
-        scrollView_->Add(titleLabel);
-
-        /* -------------------------------------------------------------------------- */
-        imageAnimator = new UIImageAnimatorView();
-        if (imageAnimator == nullptr)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::new UIImageAnimatorView fail");
-            return false;
-        }
-        imageAnimator->SetImageAnimatorSrc(g_imageAnimatorInfo_blood, DETECTION_IMAGE_ANIMATORVIEW_SIZE, DETECTION_IMAGE_ANIMATORVIEW_SPEED);
-        imageAnimator->SetRepeat(true);
-        scrollView_->Add(imageAnimator);
-
-        /* -------------------------------------------------------------------------- */
-        /*初始化血氧值label*/
-        // InitUILabel(Spo2Text, 83, 83, 300, 300, "bloodtext", "--", GILROY_BOLD_FONT, 140);
-        // scrollView_->Add(Spo2Text);
+/*更新显示数据*/
+void BloodDetectionView::UpShowBloodText() {
+  uint16_t spo2_ = BloodOxygenModel::GetInstance()->GetShowSPO2data();
+  std::string bloodoxygenStr = std::to_string(spo2_);
+  if (Spo2Text != nullptr)
+    Spo2Text->SetText(bloodoxygenStr.c_str());
+}
+/*初始化检测界面*/
+bool BloodDetectionView::BloodDetectionViewInit() {
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodDetectionViewInit is begin");
+  /*初始化title*/
+  InitLabelExt(titleLabel, 83, 50, 300, 35, "title", STR_CHECKON,
+               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  scrollView_->Add(titleLabel);
 
-        /* -------------------------------------------------------------------------- */
-        InitButtonExt(testButton, 93, 330, 280, 90, STOPCHECK, STR_CHECKSTOP, 30);
-        scrollView_->Add(testButton);
+  /* --------------------------------------------------------------------------
+   */
+  imageAnimator = new UIImageAnimatorView();
+  if (imageAnimator == nullptr) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                  "BloodBandoffView::new UIImageAnimatorView fail");
+    return false;
+  }
+  imageAnimator->SetImageAnimatorSrc(g_imageAnimatorInfo_blood,
+                                     DETECTION_IMAGE_ANIMATORVIEW_SIZE,
+                                     DETECTION_IMAGE_ANIMATORVIEW_SPEED);
+  imageAnimator->SetRepeat(true);
+  scrollView_->Add(imageAnimator);
 
-        /* -------------------------------------------------------------------------- */
-        UIView::OnClickListener *clickLeftListener = (UIView::OnClickListener *)OHOS::BloodDetectionPresenter::GetInstance();
-        if (clickLeftListener == nullptr)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodDetectionView::new clickLeftListener fail");
-            return false;
-        }
-        testButton->SetOnClickListener(clickLeftListener);
-        /* -------------------------------------------------------------------------- */
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodDetectionViewInit is ok");
-        return true;
-    }
-    void BloodDetectionView::OnStart()
-    {
+  /* --------------------------------------------------------------------------
+   */
+  /*初始化血氧值label*/
+  // InitUILabel(Spo2Text, 83, 83, 300, 300, "bloodtext", "--",
+  // GILROY_BOLD_FONT, 140); scrollView_->Add(Spo2Text);
 
-        scrollView_ = new UIScrollView();
-        if (scrollView_ == nullptr) {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "scrollView_ new fail");
-            return;
-        }
-        scrollView_->SetScrollBlankSize(35);
-        scrollView_->SetReboundSize(50);
-        scrollView_->SetPosition(0, 0, Screen::GetInstance().GetWidth(),
-                                Screen::GetInstance().GetHeight());
+  /* --------------------------------------------------------------------------
+   */
+  InitButtonExt(testButton, 93, 330, 280, 90, STOPCHECK, STR_CHECKSTOP, 30);
+  scrollView_->Add(testButton);
 
-        scrollView_->SetTouchable(false);
-        scrollView_->SetDraggable(false);
-        scrollView_->SetStyle(STYLE_BACKGROUND_COLOR, BACK_GROUND_COLOR);
-        scrollView_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
-
-        if (!BloodDetectionViewInit())
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodDetectionView::InitBloodView fail");
-        }
+  /* --------------------------------------------------------------------------
+   */
+  UIView::OnClickListener *clickLeftListener =
+      (UIView::OnClickListener *)OHOS::BloodDetectionPresenter::GetInstance();
+  if (clickLeftListener == nullptr) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                  "BloodDetectionView::new clickLeftListener fail");
+    return false;
+  }
+  testButton->SetOnClickListener(clickLeftListener);
+  /* --------------------------------------------------------------------------
+   */
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodDetectionViewInit is ok");
+  return true;
+}
+void BloodDetectionView::OnStart() {
 
+  scrollView_ = new UIScrollView();
+  if (scrollView_ == nullptr) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "scrollView_ new fail");
+    return;
+  }
+  scrollView_->SetScrollBlankSize(35);
+  scrollView_->SetReboundSize(50);
+  scrollView_->SetPosition(0, 0, Screen::GetInstance().GetWidth(),
+                           Screen::GetInstance().GetHeight());
 
-        if (imageAnimator != nullptr)
-        {
-            imageAnimator->Start();
-        }
+  scrollView_->SetTouchable(false);
+  scrollView_->SetDraggable(false);
+  scrollView_->SetStyle(STYLE_BACKGROUND_COLOR, BACK_GROUND_COLOR);
+  scrollView_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
 
-        AddViewToRootContainer(scrollView_);
-        RootView::GetInstance()->SetOnKeyActListener(presenter_);
+  if (!BloodDetectionViewInit()) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                  "BloodDetectionView::InitBloodView fail");
+  }
 
-    }
+  if (imageAnimator != nullptr) {
+    imageAnimator->Start();
+  }
 
+  AddViewToRootContainer(scrollView_);
+  RootView::GetInstance()->SetOnKeyActListener(presenter_);
 }
+
+} // namespace OHOS
index 860a1dd..d425c6f 100644 (file)
  * @Date: 2024-04-15 10:55:58
  * @LastEditors: Caisking 3449750381@qq.com
  * @LastEditTime: 2024-07-31 14:36:25
- * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodResultView.cpp
+ * @FilePath:
+ * /FD230/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodResultView.cpp
  */
 
+#include "bloodoxygen/include/BloodOxygenModel.h"
 #include "common/image_cache_manager.h"
-#include "ui_resource_image.h"
-#include <ui_scroll_view.h>
 #include "components/ui_button.h"
-#include "main/include/MainViewSample.h"
 #include "components/ui_view_group.h"
-#include "main/include/dial/DialModelSPO2.h"
+#include "main/include/MainViewSample.h"
 #include "main/include/dial/DialModelHeartRate.h"
-#include "bloodoxygen/include/BloodOxygenModel.h"
+#include "main/include/dial/DialModelSPO2.h"
+#include "ui_resource_image.h"
+#include <ui_scroll_view.h>
 
 #include "UiConfig.h"
-#include "uicomponents/UIComponents.h"
 #include "main/include/MainPresenterSample.h"
+#include "uicomponents/UIComponents.h"
 
 #include "bloodoxygen/include/BloodResultPresenter.h"
 #include "bloodoxygen/include/BloodResultView.h"
-namespace OHOS
-{
-    static BloodResultView *g_pBloodResultView{nullptr};
-    static const char *BLOODBACKPATH = "/user/res/Blood/beijing.bin";
-    static const uint32_t BACK_GROUND_COLOR = 0xfff6f6f6;
-    BloodResultView::BloodResultView()
-    {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodResultView::BloodResultView");
-        g_pBloodResultView = this;
-    }
+namespace OHOS {
+static BloodResultView *g_pBloodResultView{nullptr};
+static const char *BLOODBACKPATH = "/user/res/Blood/beijing.bin";
+static const uint32_t BACK_GROUND_COLOR = 0xfff6f6f6;
+BloodResultView::BloodResultView() {
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodResultView::BloodResultView");
+  g_pBloodResultView = this;
+}
 
-    BloodResultView::~BloodResultView()
-    {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodResultView::~BloodResultView");
-        DeInit();
-        g_pBloodResultView = nullptr;
-    }
+BloodResultView::~BloodResultView() {
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodResultView::~BloodResultView");
+  DeInit();
+  g_pBloodResultView = nullptr;
+}
 
-    BloodResultView *BloodResultView::GetInstance()
-    {
-        return g_pBloodResultView;
+BloodResultView *BloodResultView::GetInstance() { return g_pBloodResultView; }
+
+/* -------------------------------------------------------------------------- */
+void BloodResultView::UpSPO2Text() {
+  if (bloodLabel == nullptr || timeLabel == nullptr)
+    return;
+
+  // 更新血氧数据
+  uint16_t spo2 = BloodOxygenModel::GetInstance()->GetSPO2data();
+  if (spo2 != 0) // 判断是否为默认数据
+  {
+    // 更新数据
+    std::string bloodoxygenStr = std::to_string(spo2) + "%";
+    bloodLabel->SetText(bloodoxygenStr.c_str());
+
+    // 获取时间差
+    uint32_t time = BloodResultPresenter::GetInstance()->GetCurrentTime();
+    uint32_t check_time = BloodOxygenModel::GetInstance()->GetCheckTime();
+    int time_diff =
+        BloodResultPresenter::GetInstance()->GetTDOA(time, check_time);
+
+    if (time_diff == 0) {
+      timeLabel->SetTextId(STR_CHECKNEW);
+    } else if (time_diff <= 60) {
+      UpdateLabel(timeLabel, time_diff, STR_CHECKTIME);
+    } else {
+      timeLabel->SetTextId(STR_CHECKLONG);
     }
+  } else {
+    bloodLabel->SetText("--");
+    timeLabel->SetTextId(STR_CHECKNO);
+  }
+}
 
-    /* -------------------------------------------------------------------------- */
-    void BloodResultView::UpSPO2Text()
-    {
-        if (bloodLabel == nullptr || timeLabel == nullptr)
-            return;
-            
-        // 更新血氧数据
-        uint16_t spo2 = BloodOxygenModel::GetInstance()->GetSPO2data();
-        if (spo2 != 0) // 判断是否为默认数据
-        {
-            // 更新数据
-            std::string bloodoxygenStr = std::to_string(spo2) + "%";
-            bloodLabel->SetText(bloodoxygenStr.c_str());
-
-            // 获取时间差
-            uint32_t time = BloodResultPresenter::GetInstance()->GetCurrentTime();
-            uint32_t check_time = BloodOxygenModel::GetInstance()->GetCheckTime();
-            int time_diff = BloodResultPresenter::GetInstance()->GetTDOA(time, check_time);
-
-            if (time_diff == 0)
-            {
-                timeLabel->SetTextId(STR_CHECKNEW);
-            }
-            else if (time_diff <= 60)
-            {
-                UpdateLabel(timeLabel, time_diff, STR_CHECKTIME);
-            }
-            else
-            {
-                timeLabel->SetTextId(STR_CHECKLONG);
-            }
-        }
-        else
-        {
-            bloodLabel->SetText("--");
-            timeLabel->SetTextId(STR_CHECKNO);
-        }
-    }
+/* -------------------------------------------------------------------------- */
+/***
+ * @description:
+ * @return 添加按键是否成功
+ */
+bool BloodResultView::AddButton() {
+  InitButtonExt(checkButton, 118, 336, 230, 80, CLICK_BLOOD, STR_CHECK, 30);
+  checkButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xffFF5A36); // 设置按键颜色
+  // 设置按键监听
+  UIView::OnClickListener *clickListener =
+      (UIView::OnClickListener *)OHOS::BloodResultPresenter::GetInstance();
+  checkButton->SetOnClickListener(clickListener);
+
+  scrollView_->Add(checkButton);
+  return true;
+}
+/***
+ * @description:
+ * @return 初始化标签是否成功
+ */
+bool BloodResultView::InitLable() {
+  /*初始化title*/
+  InitLabelExt(titleLabel, 83, 50, 300, 35, "title", STR_BLOOD,
+               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  /*初始化血氧值label*/
+  InitUILabel(bloodLabel, 83, 32, 300, 300, "bloodtext", "--",
+              DEFAULT_VECTOR_FONT_FILENAME, 140);
+  /*初始化检测时间*/
+  InitLabelExt(timeLabel, 53, 270, 360, 35, "time", STR_CHECKNO,
+               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  // 设置来回滚动属性
+  timeLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
+  timeLabel->SetRollSpeed(23);
+
+  UpSPO2Text();
+
+  scrollView_->Add(titleLabel);
+  scrollView_->Add(bloodLabel);
+  scrollView_->Add(timeLabel);
+
+  return true;
+}
+/***
+ * @description:
+ * @return 初始化背景是否成功
+ */
+bool BloodResultView::Initbackground() {
 
-    /* -------------------------------------------------------------------------- */
-    /***
-     * @description:
-     * @return 添加按键是否成功
-     */
-    bool BloodResultView::AddButton()
-    {
-        InitButtonExt(checkButton, 118, 336, 230, 80, CLICK_BLOOD, STR_CHECK, 30);
-        checkButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xffFF5A36); // 设置按键颜色
-        // 设置按键监听
-        UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::BloodResultPresenter::GetInstance();
-        checkButton->SetOnClickListener(clickListener);
-
-        scrollView_->Add(checkButton);
-        return true;
-    }
-    /***
-     * @description:
-     * @return 初始化标签是否成功
-     */
-    bool BloodResultView::InitLable()
-    {
-        /*初始化title*/
-        InitLabelExt(titleLabel, 83, 50, 300, 35, "title", STR_BLOOD, DEFAULT_VECTOR_FONT_FILENAME, 30);
-        /*初始化血氧值label*/
-        InitUILabel(bloodLabel, 83, 32, 300, 300, "bloodtext", "--", DEFAULT_VECTOR_FONT_FILENAME, 140);
-        /*初始化检测时间*/
-        InitLabelExt(timeLabel, 53, 270, 360, 35, "time", STR_CHECKNO, DEFAULT_VECTOR_FONT_FILENAME, 30);
-        // 设置来回滚动属性
-        timeLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
-        timeLabel->SetRollSpeed(23);
-
-        UpSPO2Text();
-
-        scrollView_->Add(titleLabel);
-        scrollView_->Add(bloodLabel);
-        scrollView_->Add(timeLabel);
-
-        return true;
+  background = new UIImageView();
+  background->SetPosition(0, 0, 466, 466);
+  background->SetSrc(BLOODBACKPATH);
+
+  scrollView_->Add(background);
+  return true;
+}
+/***
+ * @description:
+ * @return 是否初始化成功
+ */
+bool BloodResultView::BloodResultViewInit() {
+
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bool BloodResultView::InitView()");
+  if (!Initbackground()) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Initbackground error!");
+  };
+  if (!InitLable()) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitLable error!");
+  };
+  if (!AddButton()) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AddButton error!");
+  };
+  return true;
+}
+/***
+ * @description:
+ * @return 删除组件
+ */
+void BloodResultView::DeInit() {
+  if (scrollView_) {
+    scrollView_->RemoveAll();
+    if (background != nullptr) {
+      delete background;
+      background = nullptr;
     }
-    /***
-     * @description:
-     * @return 初始化背景是否成功
-     */
-    bool BloodResultView::Initbackground()
-    {
-
-        background = new UIImageView();
-        background->SetPosition(0, 0, 466, 466);
-        background->SetSrc(BLOODBACKPATH);
-
-        scrollView_->Add(background);
-        return true;
+    if (bloodLabel != nullptr) {
+      delete bloodLabel;
+      bloodLabel = nullptr;
     }
-    /***
-     * @description:
-     * @return 是否初始化成功
-     */
-    bool BloodResultView::BloodResultViewInit()
-    {
-
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bool BloodResultView::InitView()");
-        if (!Initbackground())
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Initbackground error!");
-        };
-        if (!InitLable())
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitLable error!");
-        };
-        if (!AddButton())
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AddButton error!");
-        };
-        return true;
+    if (timeLabel != nullptr) {
+      delete timeLabel;
+      timeLabel = nullptr;
     }
-    /***
-     * @description:
-     * @return 删除组件
-     */
-    void BloodResultView::DeInit()
-    {
-        if (background != nullptr)
-        {
-            delete background;
-            background = nullptr;
-        }
-        if (bloodLabel != nullptr)
-        {
-            delete bloodLabel;
-            bloodLabel = nullptr;
-        }
-        if (timeLabel != nullptr)
-        {
-            delete timeLabel;
-            timeLabel = nullptr;
-        }
-        if (titleLabel != nullptr)
-        {
-            delete titleLabel;
-            titleLabel = nullptr;
-        }
-        if(checkButton!=nullptr)
-        {
-            delete checkButton;
-            checkButton = nullptr;
-        }
+    if (titleLabel != nullptr) {
+      delete titleLabel;
+      titleLabel = nullptr;
     }
-
-    void BloodResultView::OnStart()
-    {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodResultView::OnStart");
-        scrollView_ = new UIScrollView();
-        if (scrollView_ == nullptr) {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "scrollView_ new fail");
-            return;
-        }
-        scrollView_->SetScrollBlankSize(35);
-        scrollView_->SetReboundSize(50);
-        scrollView_->SetPosition(0, 0, Screen::GetInstance().GetWidth(),
-                                Screen::GetInstance().GetHeight());
-
-        scrollView_->SetTouchable(false);
-        scrollView_->SetDraggable(false);
-        scrollView_->SetStyle(STYLE_BACKGROUND_COLOR, BACK_GROUND_COLOR);
-        scrollView_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
-
-        if (!BloodResultViewInit())
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodResultView::InitBloodView fail");
-        }
-
-        AddViewToRootContainer(scrollView_);
-        RootView::GetInstance()->SetOnKeyActListener(presenter_);
+    if (checkButton != nullptr) {
+      delete checkButton;
+      checkButton = nullptr;
     }
+  }
+  delete scrollView_;
+  scrollView_ = nullptr;
+}
 
+void BloodResultView::OnStart() {
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodResultView::OnStart");
+  scrollView_ = new UIScrollView();
+  if (scrollView_ == nullptr) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "scrollView_ new fail");
+    return;
+  }
+  scrollView_->SetScrollBlankSize(35);
+  scrollView_->SetReboundSize(50);
+  scrollView_->SetPosition(0, 0, Screen::GetInstance().GetWidth(),
+                           Screen::GetInstance().GetHeight());
+
+  scrollView_->SetDraggable(true);
+  scrollView_->SetStyle(STYLE_BACKGROUND_COLOR, BACK_GROUND_COLOR);
+  scrollView_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
+
+  UIView::OnDragListener *listener = static_cast<UIView::OnDragListener*>(BloodResultPresenter::GetInstance());
+  scrollView_->SetOnDragListener(listener);
+
+  if (!BloodResultViewInit()) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                  "BloodResultView::InitBloodView fail");
+  }
+
+  AddViewToRootContainer(scrollView_);
+  RootView::GetInstance()->SetOnKeyActListener(presenter_);
 }
+
+} // namespace OHOS