From 5579663081dac0388af1a2fd3be00a0267de395e Mon Sep 17 00:00:00 2001 From: Caisking Date: Sat, 8 Nov 2025 16:23:06 +0800 Subject: [PATCH] =?utf8?q?=E4=BF=AE=E6=94=B9272=E7=9A=84=E5=85=85=E7=94=B5?= =?utf8?q?=E5=8A=A8=E7=94=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../src/notify/charge_notification.cpp | 167 ++++++++---------- 1 file changed, 72 insertions(+), 95 deletions(-) diff --git a/code/sdk/application/wearable/fd272/service/msg_center/src/notify/charge_notification.cpp b/code/sdk/application/wearable/fd272/service/msg_center/src/notify/charge_notification.cpp index 45155ee8f..bca70ba31 100644 --- a/code/sdk/application/wearable/fd272/service/msg_center/src/notify/charge_notification.cpp +++ b/code/sdk/application/wearable/fd272/service/msg_center/src/notify/charge_notification.cpp @@ -42,6 +42,20 @@ namespace OHOS #define LOW_POWER_BUTTON "LOW_POWER_BUTTON" #define CHARGE_GROUP "UIViewGroup_charge" + + //增加充电动画 + UIImageAnimatorView *chargeAnimatorView = nullptr; + static constexpr char *ChargeAnimationPaths = "/user/res/charge/"; //充电动画路径 + static constexpr int16_t CHARGE_ANIMATION_VIEW_NUM_FRAMES = 24; //充电动画帧数 + static constexpr int16_t CHARGE_ANIMATION_VIEW_TIME = 150; //充电动画更新间隔 + static constexpr int16_t CHARGE_ANIMATION_VIEW_X = 142; //充电动画位置x + static constexpr int16_t CHARGE_ANIMATION_VIEW_Y = 134; //充电动画位置y + static constexpr int16_t CHARGE_ANIMATION_VIEW_W = 182; //充电动画宽度 + static constexpr int16_t CHARGE_ANIMATION_VIEW_H = 202; //充电动画高度 + const ImageInfo **ChargeAnimationInfoArray{nullptr}; //充电动画图片路径数组 + ImageAnimatorInfo ChargeAnimationInfo[CHARGE_ANIMATION_VIEW_NUM_FRAMES]; //充电动画图像的信息 + + // GILROY_BOLD_FONT //充电中 UI UIViewGroup *UIViewGroup_charge =nullptr; @@ -84,17 +98,6 @@ namespace OHOS (pTM.tm_hour < 10 ? "0" : "") + std::to_string(pTM.tm_hour) + ":" + (pTM.tm_min < 10 ? "0" : "") + std::to_string(pTM.tm_min); - // 更新充电状态标签 - if (UILabel_Chargeing) { - if (power == 100) { - UILabel_Chargeing->SetTextId(STR_CHARG_DOWN); // TODO: 增加多国语言 - } else { - UILabel_Chargeing->SetTextId(STR_CHAEGING); - // UILabel_Chargeing->SetTextId(STR_CHARGE); - } - UILabel_Chargeing->Invalidate(); - } - // 刷新时间标签 if (UILabel_time) { UILabel_time->SetText(stringtime.c_str()); @@ -107,11 +110,6 @@ namespace OHOS UILabel_power->Invalidate(); } - // 刷新进度条 - if (batteryprogress) { - batteryprogress->SetValue(power); - batteryprogress->Invalidate(); - } } bool is_UIViewGroup_charge(void) @@ -137,10 +135,11 @@ namespace OHOS UIViewGroup_charge->RemoveAll(); - if (batteryprogress) { - delete batteryprogress; - batteryprogress = nullptr; - } + // if (batteryprogress) { + // delete batteryprogress; + // batteryprogress = nullptr; + // } + if(image_lightning) { delete image_lightning; @@ -159,12 +158,26 @@ namespace OHOS UILabel_power = nullptr; } - if(UILabel_Chargeing) - { - delete UILabel_Chargeing; - UILabel_Chargeing = nullptr; + if (chargeAnimatorView) + { + chargeAnimatorView->Stop(); + delete chargeAnimatorView; + chargeAnimatorView = nullptr; } + if (ChargeAnimationInfoArray) + { + FreeImageInfoArray(ChargeAnimationInfoArray, ChargeAnimationPaths, + CHARGE_ANIMATION_VIEW_NUM_FRAMES); + ChargeAnimationInfoArray = nullptr; + } + + // if(UILabel_Chargeing) + // { + // delete UILabel_Chargeing; + // UILabel_Chargeing = nullptr; + + // } RootView::GetInstance()->Remove(UIViewGroup_charge); @@ -206,60 +219,12 @@ namespace OHOS char time_buf[16]={0}; sprintf_s(time_buf,16,"%02d:%02d",timeinfo->tm_hour,timeinfo->tm_min); - if (batteryprogress == nullptr) { - batteryprogress = new UICircleProgress(); - } - batteryprogress->SetPosition( - 123, 123); // widget's left position and top position - batteryprogress->Resize(224, 222); // widget's width and height - batteryprogress->SetViewId("circleProgress1"); // Set style - batteryprogress->SetStyle(STYLE_BACKGROUND_OPA, 0x00); - - // Set additional property - // Set BackgroundStyle - batteryprogress->SetBackgroundStyle(STYLE_BACKGROUND_COLOR, 0xff000000); - batteryprogress->SetBackgroundStyle(STYLE_BACKGROUND_OPA, 0x05); - batteryprogress->SetBackgroundStyle(STYLE_BORDER_OPA, 0x07); - batteryprogress->SetBackgroundStyle(STYLE_LINE_OPA, 0x07); - batteryprogress->SetBackgroundStyle(STYLE_LINE_WIDTH, 22); - // Set ForegroundStyle - batteryprogress->SetForegroundStyle(STYLE_BACKGROUND_COLOR, 0xff2195F6); - batteryprogress->SetForegroundStyle(STYLE_BORDER_COLOR, 0xff000000); - batteryprogress->SetForegroundStyle(STYLE_LINE_COLOR, 0xff4FC34C); - batteryprogress->SetForegroundStyle(STYLE_LINE_WIDTH, 22); - batteryprogress->SetCenterPosition(111, 109); - batteryprogress->SetRadius(108); - batteryprogress->SetEndAngle(359); - batteryprogress->SetValue(power); - batteryprogress->SetVisible(true); - // batteryprogress->SetCapType(CAP_ROUND); 不使用圆形边缘 - - if (image_lightning == nullptr) { - image_lightning = new UIImageView(); - } - image_lightning->SetPosition(207, 176); // widget's left position and top position - image_lightning->Resize(70, 60); // widget's width and height - image_lightning->SetViewId("image2");// Set style - image_lightning->SetStyle(STYLE_BORDER_COLOR, 0xff191919); - char* image2imagesPath = "/user/res/solar-energy_1.bin"; - image_lightning->SetSrc(image2imagesPath); - image_lightning->SetVisible(true); - - - if (image_circle == nullptr) { - image_circle = new UIImageView(); - } - image_circle->SetPosition(126, 125); // widget's left position and top position - image_circle->Resize(194, 194); // widget's width and height - image_circle->SetViewId("image1");// Set style - char* image1imagesPath = "/user/res/Ellipse_37.bin"; - image_circle->SetSrc(image1imagesPath); - image_circle->SetVisible(true); - + + if (UILabel_power == nullptr) { UILabel_power = new UILabelExt(); } - UILabel_power->SetPosition(133, 252); // widget's left position and top position + UILabel_power->SetPosition(133, 202); // widget's left position and top position UILabel_power->Resize(200, 60); // widget's width and height UILabel_power->SetViewId("label5");// Set style UILabel_power->SetStyle(STYLE_TEXT_FONT, 40); @@ -272,21 +237,7 @@ namespace OHOS UILabel_power->SetVisible(true); - if (UILabel_Chargeing == nullptr) { - UILabel_Chargeing = new UILabelExt(); - } - UILabel_Chargeing->SetPosition(133, 356); // widget's left position and top position - UILabel_Chargeing->Resize(200, 60); // widget's width and height - UILabel_Chargeing->SetViewId("label4");// Set style - UILabel_Chargeing->SetStyle(STYLE_TEXT_FONT, 30); - // UILabel_Chargeing->SetText("正在充电"); - // UILabel_Chargeing->SetTextId(STR_CHARGE); - UILabel_Chargeing->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); - UILabel_Chargeing->SetTextColor(Color::GetColorFromRGBA(0x4F, 0xC3, 0x4C, 0xff)); - UILabel_Chargeing->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); - UILabel_Chargeing->SetRollSpeed(0); - UILabel_Chargeing->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN, 30); - UILabel_Chargeing->SetVisible(true); + if (UILabel_time == nullptr) { @@ -316,20 +267,46 @@ namespace OHOS - UIViewGroup_charge->Add(image_lightning); - UIViewGroup_charge->Add(image_circle); - UIViewGroup_charge->Add(batteryprogress); + // 充电动画初始化与添加 + if (chargeAnimatorView == nullptr) { + chargeAnimatorView = new UIImageAnimatorView(); + } + if (ChargeAnimationInfoArray == nullptr) { + // 加载 /user/res/charge/ 目录中的帧序列:1.bin ... N.bin + ChargeAnimationInfoArray = CreateImageInfoArray(ChargeAnimationPaths, CHARGE_ANIMATION_VIEW_NUM_FRAMES); + } + if (ChargeAnimationInfoArray != nullptr && chargeAnimatorView != nullptr) { + for (uint8_t i = 0; i < CHARGE_ANIMATION_VIEW_NUM_FRAMES; i++) { + ChargeAnimationInfo[i].imageInfo = (ChargeAnimationInfoArray[i]); + ChargeAnimationInfo[i].imageType = IMG_SRC_IMAGE_INFO; + ChargeAnimationInfo[i].pos.x = CHARGE_ANIMATION_VIEW_X; + ChargeAnimationInfo[i].pos.y = CHARGE_ANIMATION_VIEW_Y; + ChargeAnimationInfo[i].width = CHARGE_ANIMATION_VIEW_W; + ChargeAnimationInfo[i].height = CHARGE_ANIMATION_VIEW_H; + } + chargeAnimatorView->SetPosition(CHARGE_ANIMATION_VIEW_X, CHARGE_ANIMATION_VIEW_Y, + CHARGE_ANIMATION_VIEW_W, CHARGE_ANIMATION_VIEW_H); + chargeAnimatorView->SetStyle(STYLE_BACKGROUND_OPA, 0x00); + chargeAnimatorView->SetImageAnimatorSrc(ChargeAnimationInfo, + CHARGE_ANIMATION_VIEW_NUM_FRAMES, + CHARGE_ANIMATION_VIEW_TIME); + chargeAnimatorView->SetRepeat(true); + chargeAnimatorView->SetRepeatTimes(0); // 无限循环 + chargeAnimatorView->SetResizeMode(UIImageView::COVER); + chargeAnimatorView->Start(); + UIViewGroup_charge->Add(chargeAnimatorView); + } UIViewGroup_charge->Add(UILabel_time); UIViewGroup_charge->Add(UILabel_power); - UIViewGroup_charge->Add(UILabel_Chargeing); NotificationManager::GetInstance()->RegisterNotifyCleanupFunction(FreeChargePower); return UIViewGroup_charge; } - +/////////////////////////////////////////////////////////////////////////////////// +//低电量弹窗 void ShowUpShutDownAnimatorView() { group = new UIViewGroup(); -- 2.17.1