BLOOD_OXYGEN = 220,
SYSTOLIC_BLOOD_PRESSURE = 221,
DIASTOLIC_BLOOD_PRESSURE = 222,
+ TIME_PERIOD_BG = 223, // 时间段背景索引(0-3: 0-5点->0, 6-11点->1, 12-17点->2, 18-23点->3)
DUAL_LANGUAGE_SYSTEM = 230,
UNREAD_SMS_MSG = 250,
UNREAD_WECHAT_MSG = 251,
--- /dev/null
+/*
+ * Copyright (c) CompanyNameMagicTag 2025. All rights reserved.
+ * Description: DialModelBg - 时间段背景切换模型
+ * Author:
+ * Create: 2025-01
+ */
+
+#ifndef DIAL_MODEL_BG_H
+#define DIAL_MODEL_BG_H
+
+#include "DialBaseModel.h"
+
+namespace OHOS
+{
+ class DialModelBg : public DialBaseModel
+ {
+ public:
+ DialModelBg() {}
+ ~DialModelBg() override {}
+ static DialModelBg *GetInstance()
+ {
+ static DialModelBg instance;
+ return &instance;
+ }
+ bool GetDialFloatData(DialDataType &type, float &out) override;
+
+ private:
+ struct tm tblock_;
+ /**
+ * @brief 根据小时计算时间段索引
+ * @param hour 当前小时(0-23)
+ * @return 时间段索引: 0-5点->0, 6-11点->1, 12-17点->2, 18-23点->3
+ */
+ int CalculateTimePeriodIndex(int hour);
+ };
+}
+
+#endif // DIAL_MODEL_BG_H
+
BLOOD_OXYGEN = 220,
SYSTOLIC_BLOOD_PRESSURE = 221,
DIASTOLIC_BLOOD_PRESSURE = 222,
+ TIME_PERIOD_BG = 223, // 时间段背景索引(0-3: 0-5点->0, 6-11点->1, 12-17点->2, 18-23点->3)
DUAL_LANGUAGE_SYSTEM = 230,
UNREAD_SMS_MSG = 250,
UNREAD_WECHAT_MSG = 251,
--- /dev/null
+/*
+ * Copyright (c) CompanyNameMagicTag 2025. All rights reserved.
+ * Description: DialModelBg - 时间段背景切换模型
+ * Author:
+ * Create: 2025-01
+ */
+
+#ifndef DIAL_MODEL_BG_H
+#define DIAL_MODEL_BG_H
+
+#include "DialBaseModel.h"
+
+namespace OHOS
+{
+ class DialModelBg : public DialBaseModel
+ {
+ public:
+ DialModelBg() {}
+ ~DialModelBg() override {}
+ static DialModelBg *GetInstance()
+ {
+ static DialModelBg instance;
+ return &instance;
+ }
+ bool GetDialFloatData(DialDataType &type, float &out) override;
+
+ private:
+ struct tm tblock_;
+ /**
+ * @brief 根据小时计算时间段索引
+ * @param hour 当前小时(0-23)
+ * @return 时间段索引: 0-5点->0, 6-11点->1, 12-17点->2, 18-23点->3
+ */
+ int CalculateTimePeriodIndex(int hour);
+ };
+}
+
+#endif // DIAL_MODEL_BG_H
+
--- /dev/null
+/*
+ * Copyright (c) CompanyNameMagicTag 2025. All rights reserved.
+ * Description: DialModelBg - 时间段背景切换模型实现
+ * Author:
+ * Create: 2025-01
+ */
+
+#include "main/include/dial/DialModelBg.h"
+#include "main/include/dial/RegisterDialModel.h"
+#include "custom_runtime.h"
+#include <sys/time.h>
+
+// 注册模块
+REGIST_DIAL_MODULE(OHOS::DialDataType::TIME_PERIOD_BG, OHOS::DialModelBg::GetInstance());
+
+namespace OHOS
+{
+
+int DialModelBg::CalculateTimePeriodIndex(int hour)
+{
+ // 时间段映射:0-5点->0, 6-11点->1, 12-17点->2, 18-23点->3
+ if (hour >= 0 && hour < 6) {
+ return 0; // 0-5点
+ } else if (hour >= 6 && hour < 12) {
+ return 1; // 6-11点
+ } else if (hour >= 12 && hour < 18) {
+ return 2; // 12-17点
+ } else {
+ return 3; // 18-23点
+ }
+}
+
+bool DialModelBg::GetDialFloatData(DialDataType &type, float &out)
+{
+ (void)type;
+
+ // 获取当前时间
+ struct timeval tv;
+ gettimeofday(&tv, NULL);
+ localtime_r(&tv.tv_sec, &tblock_);
+
+ // 获取当前小时(0-23)
+ int hour = tblock_.tm_hour;
+
+ // 计算时间段索引
+ int periodIndex = CalculateTimePeriodIndex(hour);
+
+ // 返回时间段索引作为浮点数
+ out = static_cast<float>(periodIndex);
+
+ return true;
+}
+
+} // namespace OHOS
+
--- /dev/null
+<dial title="owl_clock" description="动态小鹰" size="466 466" version="2.0" preview_img="./instance/207/owl_clock.png" ambient_period="60">\r
+ \r
+ <static_img id="back_ground" position="0 0" img_name="./instance/207/BACKGROUND_6_12.png"></static_img>\r
+ <!-- 时间段背景切换:0-6点、6-12点、12-18点、18-24点 -->\r
+ <!-- 时间段映射:0-5点->0, 6-11点->1, 12-17点->2, 18-23点->3 -->\r
+ <!-- 时间段背景切换(已实现系统端映射逻辑) -->\r
+ <option_img position="0 0" img_names="./instance/207/BACKGROUND_0_6.png,./instance/207/BACKGROUND_6_12.png,./instance/207/BACKGROUND_12_18.png,./instance/207/BACKGROUND_18_24.png" bind_data="223" period="10"></option_img>\r
+ \r
+ <!-- 数字时间显示 - 小时 -->\r
+ <label id="hour_label" color="0xFFFFFFFF" font="HarmonyOS_Sans_SC_Regular.ttf" break_mode="adapt" rect="86 162 200 60" text="%02.f" font_size="120" align="center" bind_data="15" period="10" display_mode="always" ambient_periodic="true"></label>\r
+ \r
+ <!-- 数字时间显示 - 分钟 -->\r
+ <label id="minute_label" color="0xFF666666" font="HarmonyOS_Sans_SC_Regular.ttf" break_mode="adapt" rect="240 162 200 60" text="%02.f" font_size="120" align="center" bind_data="14" period="10" display_mode="always" ambient_periodic="true"></label>\r
+ \r
+ <!-- 电池显示 -->\r
+ <option_img position="173 52" img_names="./instance/207/Battery/Battery_Nomoal.png,./instance/207/Battery/BatteryCharge.png" bind_data="20" period="10"></option_img>\r
+ \r
+ <!-- 电池百分比标签 -->\r
+ <label id="battery_label" color="0xFFFFFFFF" font="HarmonyOS_Sans_SC_Regular.ttf" break_mode="adapt" rect="228 52 200 62" text="%s" font_size="26" align="center" bind_data="20485" period="10"></label>\r
+</dial>\r