增加测试结果两位数与三位数组件位置适配 3465/1
authorxue <2144439972@qq.com>
Mon, 15 Jun 2026 07:09:45 +0000 (15:09 +0800)
committerxue <2144439972@qq.com>
Mon, 15 Jun 2026 07:09:45 +0000 (15:09 +0800)
code/sdk/application/wearable/n9/nativeapp/nativeui/ecg/src/ECGHistoryView.cpp
code/sdk/application/wearable/n9/nativeapp/nativeui/ecg/src/ECGMeasureResultView.cpp

index 2f09d06..0c17670 100644 (file)
@@ -12,6 +12,31 @@ static constexpr int16_t ECG_HISTORY_CARD_MARGIN = 40;
 static constexpr int16_t ECG_HISTORY_CARD_W = 380;
 static constexpr int16_t ECG_HISTORY_MAX_ITEMS = 10;
 static constexpr uint32_t ECG_CARD_BG_COLOR = 0xff1a1a1a;
+
+static constexpr int16_t ECG_RECENT_HEART_X = 129;
+static constexpr int16_t ECG_RECENT_HEART_W = 54;
+static constexpr int16_t ECG_RECENT_BPM_X = ECG_RECENT_HEART_X + ECG_RECENT_HEART_W + 8;
+static constexpr int16_t ECG_RECENT_BPM_Y = 182 + 35 + 12;
+static constexpr int16_t ECG_RECENT_BPM_W_TWO_DIGIT = 74;
+static constexpr int16_t ECG_RECENT_BPM_W_THREE_DIGIT = 120;
+static constexpr int16_t ECG_RECENT_BPM_H = 66;
+static constexpr int16_t ECG_RECENT_BPM_UNIT_GAP = 8;
+static constexpr int16_t ECG_RECENT_BPM_UNIT_Y = 258;
+
+static int16_t GetRecentBpmLabelWidth(uint8_t bpm) {
+  return (bpm >= 100) ? ECG_RECENT_BPM_W_THREE_DIGIT : ECG_RECENT_BPM_W_TWO_DIGIT;
+}
+
+static void UpdateRecentBpmLabelLayout(UILabel *recentBpm, UILabel *recentBpmUnit, uint8_t bpm) {
+  if (recentBpm == nullptr) {
+    return;
+  }
+  int16_t bpmW = GetRecentBpmLabelWidth(bpm);
+  recentBpm->Resize(bpmW, ECG_RECENT_BPM_H);
+  if (recentBpmUnit != nullptr) {
+    recentBpmUnit->SetPosition(ECG_RECENT_BPM_X + bpmW + ECG_RECENT_BPM_UNIT_GAP, ECG_RECENT_BPM_UNIT_Y);
+  }
+}
 } // namespace
 
 static ECGHistoryView *g_pECGHistoryView = nullptr;
@@ -172,14 +197,15 @@ void ECGHistoryView::InitRecentPage() {
               DEFAULT_VECTOR_FONT_FILENAME, 30);
   recentResult_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
-  InitImageView(recentHeart_, 129, 182+35+12+8, 54, 54, "ecg_recent_heart", ECG_PATH_HEART_RED_ICON);
+  InitImageView(recentHeart_, ECG_RECENT_HEART_X, 182 + 35 + 12 + 8, ECG_RECENT_HEART_W, 54, "ecg_recent_heart",
+                ECG_PATH_HEART_RED_ICON);
 
-  InitUILabel(recentBpm_, 129+54+8, 182+35+12, 74, 66, "ecg_recent_bpm", "--",
-              DEFAULT_VECTOR_FONT_FILENAME, 65);
+  InitUILabel(recentBpm_, ECG_RECENT_BPM_X, ECG_RECENT_BPM_Y, ECG_RECENT_BPM_W_TWO_DIGIT, ECG_RECENT_BPM_H,
+              "ecg_recent_bpm", "--", DEFAULT_VECTOR_FONT_FILENAME, 65);
   recentBpm_->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
 
-  InitUILabel(recentBpmUnit_, 129+54+12+66+8, 258, 72, 30, "ecg_recent_bpm_unit", "次/分",
-              DEFAULT_VECTOR_FONT_FILENAME, 30);
+  InitUILabel(recentBpmUnit_, ECG_RECENT_BPM_X + ECG_RECENT_BPM_W_TWO_DIGIT + ECG_RECENT_BPM_UNIT_GAP,
+              ECG_RECENT_BPM_UNIT_Y, 72, 30, "ecg_recent_bpm_unit", "次/分", DEFAULT_VECTOR_FONT_FILENAME, 30);
   recentBpmUnit_->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff));
   recentBpmUnit_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
 
@@ -242,6 +268,7 @@ void ECGHistoryView::UpdateRecentPage() {
   } else {
     recentBpm_->SetText("--");
   }
+  UpdateRecentBpmLabelLayout(recentBpm_, recentBpmUnit_, last.bpm);
 }
 
 void ECGHistoryView::RebuildList() {
@@ -287,7 +314,7 @@ void ECGHistoryView::RebuildList() {
 
     UILabel *bpmLabel = nullptr;
     std::string bpmStr = rec.bpm > 0 ? (std::to_string(rec.bpm) + " 次/分") : "-- 次/分";
-    InitUILabel(bpmLabel, ECG_HISTORY_CARD_MARGIN + 40 + 38 + 8 + 8 + 120, y + 36 + 5 + 2, 119, 35, "ecg_list_bpm",
+    InitUILabel(bpmLabel, ECG_HISTORY_CARD_MARGIN + 40 + 38 + 8 + 8 + 120, y + 36 + 5, 119, 35, "ecg_list_bpm",
                 bpmStr.c_str(), DEFAULT_VECTOR_FONT_FILENAME, 28);
     bpmLabel->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
 
index baf1c28..641223c 100644 (file)
@@ -8,16 +8,32 @@
 namespace OHOS {
 namespace {
 static constexpr int16_t ECG_RESULT_ROW_Y = 168;
-static constexpr int16_t ECG_HEART_X = 129;
+static constexpr int16_t ECG_HEART_X = 120;
 static constexpr int16_t ECG_HEART_Y = ECG_RESULT_ROW_Y + 8;
 static constexpr int16_t ECG_HEART_W = 54;
 static constexpr int16_t ECG_HEART_H = 54;
-static constexpr int16_t ECG_BPM_X = ECG_HEART_X + ECG_HEART_W + 12;
+static constexpr int16_t ECG_BPM_X = ECG_HEART_X + ECG_HEART_W;
 static constexpr int16_t ECG_BPM_Y = ECG_RESULT_ROW_Y;
-static constexpr int16_t ECG_BPM_W = 66;
+static constexpr int16_t ECG_BPM_W_TWO_DIGIT = 85;
+static constexpr int16_t ECG_BPM_W_THREE_DIGIT = 120;
 static constexpr int16_t ECG_BPM_H = 66;
-static constexpr int16_t ECG_BPM_UNIT_X = ECG_BPM_X + ECG_BPM_W + 8;
-static constexpr int16_t ECG_BPM_UNIT_Y = ECG_RESULT_ROW_Y + 35;
+static constexpr int16_t ECG_BPM_UNIT_GAP = 8;
+static constexpr int16_t ECG_BPM_UNIT_Y = ECG_RESULT_ROW_Y + 32;
+
+static int16_t GetBpmLabelWidth(uint8_t bpm) {
+  return (bpm >= 100) ? ECG_BPM_W_THREE_DIGIT : ECG_BPM_W_TWO_DIGIT;
+}
+
+static void UpdateBpmLabelLayout(UILabel *bpmValueLabel, UILabel *bpmUnitLabel, uint8_t bpm) {
+  if (bpmValueLabel == nullptr) {
+    return;
+  }
+  int16_t bpmW = GetBpmLabelWidth(bpm);
+  bpmValueLabel->Resize(bpmW, ECG_BPM_H);
+  if (bpmUnitLabel != nullptr) {
+    bpmUnitLabel->SetPosition(ECG_BPM_X + bpmW + ECG_BPM_UNIT_GAP, ECG_BPM_UNIT_Y);
+  }
+}
 } // namespace
 
 static ECGMeasureResultView *g_instance = nullptr;
@@ -61,6 +77,7 @@ void ECGMeasureResultView::UpdateText() {
     } else {
       bpmValueLabel_->SetText(std::to_string(bpm).c_str());
     }
+    UpdateBpmLabelLayout(bpmValueLabel_, bpmUnitLabel_, bpm);
   }
   if (resultLabel_ != nullptr) {
     resultLabel_->SetText(model->GetAfibResultText(afibResult).c_str());
@@ -78,12 +95,12 @@ UIViewGroup *ECGMeasureResultView::InitView() {
   InitImageView(heartIcon_, ECG_HEART_X, ECG_HEART_Y, ECG_HEART_W, ECG_HEART_H, "ecg_result_heart",
                 ECG_PATH_HEART_RED_ICON);
 
-  InitUILabel(bpmValueLabel_, ECG_BPM_X, ECG_BPM_Y, ECG_BPM_W, ECG_BPM_H, "ecg_result_bpm", "--",
-              DEFAULT_VECTOR_FONT_FILENAME, 65);
-  bpmValueLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+  InitUILabel(bpmValueLabel_, ECG_BPM_X, ECG_BPM_Y, ECG_BPM_W_TWO_DIGIT, ECG_BPM_H, "ecg_result_bpm", "--",
+              DEFAULT_VECTOR_FONT_FILENAME, 60);
+  bpmValueLabel_->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
 
-  InitUILabel(bpmUnitLabel_, ECG_BPM_UNIT_X, ECG_BPM_UNIT_Y, 72, 30, "ecg_result_bpm_unit", "次/分",
-              DEFAULT_VECTOR_FONT_FILENAME, 30);
+  InitUILabel(bpmUnitLabel_, ECG_BPM_X + ECG_BPM_W_TWO_DIGIT + ECG_BPM_UNIT_GAP, ECG_BPM_UNIT_Y, 72, 30,
+              "ecg_result_bpm_unit", "次/分", DEFAULT_VECTOR_FONT_FILENAME, 30);
 
   bpmUnitLabel_->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff));
   bpmUnitLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);