--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-05-07 11:25:58
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-06-11 16:11:03
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/RespiratoryTrainingCompleted/src/RespiratoryTrainingCompletedView.cpp
+ */
+
+#include "respiratorytraining/include/RespiratoryTrainingCompletedView.h"
+#include "wearable_log.h"
+#include "language/font/ui_resource_string.h"
+#include "respiratorytraining/include/RespiratoryTrainingPresenter.h"
+#include "common/image_cache_manager.h"
+
+namespace OHOS
+{
+
+ static RespiratoryTrainingCompletedView *g_pRespiratoryTrainingCompletedView{nullptr};
+
+ RespiratoryTrainingCompletedView::RespiratoryTrainingCompletedView()
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingCompletedView::RespiratoryTrainingCompletedView");
+ g_pRespiratoryTrainingCompletedView = this;
+ }
+
+ RespiratoryTrainingCompletedView::~RespiratoryTrainingCompletedView()
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingCompletedView::~RespiratoryTrainingCompletedView");
+ ClearAll();
+ g_pRespiratoryTrainingCompletedView = nullptr;
+ }
+
+ RespiratoryTrainingCompletedView *RespiratoryTrainingCompletedView::GetInstance()
+ {
+ return g_pRespiratoryTrainingCompletedView;
+ }
+
+ void RespiratoryTrainingCompletedView::ClearAll(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingCompletedView::ClearAll Start!!");
+ if (ScrollView != nullptr)
+ {
+ ScrollView->RemoveAll();
+ ImageCacheManager::GetInstance().UnloadSingleRes(RTCVectorImagePath);
+ ImageCacheManager::GetInstance().UnloadSingleRes(RTCGroupListImagePath);
+
+ if (Title != nullptr)
+ {
+ delete Title;
+ Title = nullptr;
+ }
+
+ if (RespiratoryTrainingImage != nullptr)
+ {
+ delete RespiratoryTrainingImage;
+ RespiratoryTrainingImage = nullptr;
+ }
+
+ if (RespiratoryTrainingLabel != nullptr)
+ {
+ delete RespiratoryTrainingLabel;
+ RespiratoryTrainingLabel = nullptr;
+ }
+ for (int i = 0; i < MAX_NUM; i++)
+ {
+ if (RTCStaticLabelView[i] != nullptr)
+ {
+ delete RTCStaticLabelView[i];
+ RTCStaticLabelView[i] = nullptr;
+ }
+
+ if (RTCDynamicLabelView[i] != nullptr)
+ {
+ delete RTCDynamicLabelView[i];
+ RTCDynamicLabelView[i] = nullptr;
+ }
+
+ if (RTCImageView[i] != nullptr)
+ {
+ delete RTCImageView[i];
+ RTCImageView[i] = nullptr;
+ }
+ }
+
+ if (RTCLabelButton != nullptr)
+ {
+ delete RTCLabelButton;
+ RTCLabelButton = nullptr;
+ }
+
+ delete ScrollView;
+ ScrollView = nullptr;
+ }
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingCompletedView::ClearAll End!!");
+ }
+
+ UILabelExt *RespiratoryTrainingCompletedView::LabelExtViewInit(const LabelConfig &labelconfig)
+ {
+ UILabelExt *label = new UILabelExt();
+ if (label == nullptr)
+ {
+ return nullptr;
+ }
+ label->SetPosition(labelconfig.left, labelconfig.top, labelconfig.width, labelconfig.height); // 位置大小
+ label->SetStyle(STYLE_TEXT_FONT, labelconfig.fontSize); // 字体大小
+ label->SetStyle(STYLE_LINE_HEIGHT, labelconfig.lineHeigh); // 字体行高
+ label->SetTextId(labelconfig.textId); // 内容
+ label->SetLineBreakMode(labelconfig.lineBreakMode); // 断行模式。
+ label->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER);
+ label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, labelconfig.fontSize);
+ return label;
+ }
+
+ UILabel *RespiratoryTrainingCompletedView::LabelViewInit(const LabelConfig &labelconfig)
+ {
+ UILabel *label = new UILabel();
+ if (label == nullptr)
+ {
+ return nullptr;
+ }
+ label->SetPosition(labelconfig.left, labelconfig.top, labelconfig.width, labelconfig.height); // 位置大小
+ label->SetStyle(STYLE_TEXT_FONT, labelconfig.fontSize); // 字体大小
+ label->SetStyle(STYLE_LINE_HEIGHT, labelconfig.lineHeigh); // 字体行高
+ label->SetText(labelconfig.text); // 内容
+ label->SetLineBreakMode(labelconfig.lineBreakMode); // 断行模式。
+ label->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER);
+ label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, labelconfig.fontSize);
+ return label;
+ }
+
+ UIImageView *RespiratoryTrainingCompletedView::ImageViewInit(ImageConfig &imageconfig)
+ {
+ UIImageView *Image = new UIImageView();
+ if (Image == nullptr)
+ {
+ return nullptr;
+ }
+ Image->SetPosition(imageconfig.x, imageconfig.y, imageconfig.w, imageconfig.h);
+ return Image;
+ }
+
+ bool RespiratoryTrainingCompletedView::CreateRespiratoryTrainingCompletedScrollView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingCompletedView::CreateRespiratoryTrainingCompletedScrollView");
+ ScrollView = new UIScrollView();
+ if (ScrollView == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScrollView new fail!");
+ return false;
+ }
+ ScrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
+ ScrollView->SetScrollBlankSize(75);
+ ScrollView->SetReboundSize(35);
+ ScrollView->SetHorizontalScrollState(false);
+ ScrollView->SetTouchable(true);
+ ScrollView->SetDraggable(true);
+
+ return true;
+ }
+
+ bool RespiratoryTrainingCompletedView::CreateRespiratoryTrainingCompletedLabelView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingCompletedView::CreateRespiratoryTrainingCompletedLabelView");
+ /* ---------------------------------- Title --------------------------------- */
+ LabelConfig labelconfig = {
+ .left = 83,
+ .top = 52,
+ .width = 300,
+ .height = 35,
+ .fontSize = 30,
+ .lineHeigh = 35,
+ .textId = STR_TRAINING_COMPLETE, // 训练完成
+ .lineBreakMode = UILabel::LINE_BREAK_MARQUEE,
+ };
+ Title = LabelExtViewInit(labelconfig);
+ if (nullptr == Title)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Title is nullptr!");
+ return false;
+ }
+ Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ ScrollView->Add(Title);
+ /* ------------------------ RespiratoryTrainingLabel ------------------------ */
+ labelconfig.left = 147;
+ labelconfig.top = 150;
+ labelconfig.width = 240;
+ labelconfig.textId = STR_BREATH_TRAINING; // 呼吸训练
+ RespiratoryTrainingLabel = LabelExtViewInit(labelconfig);
+ if (nullptr == RespiratoryTrainingLabel)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingLabel is nullptr!");
+ return false;
+ }
+ ScrollView->Add(RespiratoryTrainingLabel);
+ /* -------------------------------------------------------------------------- */
+ int y1 = 248, y2 = 286;
+ const int textId[MAX_NUM] = {STR_THIS_BREATH, STR_MEAN_HEART_RATE_MIN, STR_TODAYS_BREATHING_TRAINING};
+ const char *text[MAX_NUM] = {"01:00", "144", "10分钟"};
+ OHOS::ColorType RTCDynamicLabelTextColor[MAX_NUM] = {
+ Color::GetColorFromRGBA(0x1d, 0xda, 0xc4, 0xff),
+ Color::GetColorFromRGBA(0xff, 0x5a, 0x36, 0xff),
+ Color::GetColorFromRGBA(0xff, 0x8a, 0x36, 0xff),
+ };
+ for (int i = 0; i < MAX_NUM; i++)
+ {
+ labelconfig.left = 138;
+ labelconfig.top = y1 + 130 * i;
+ labelconfig.width = 240;
+ labelconfig.height = 35;
+ labelconfig.fontSize = 30;
+ labelconfig.lineHeigh = 35;
+ labelconfig.textId = textId[i];
+ labelconfig.lineBreakMode = UILabel::LINE_BREAK_MARQUEE;
+ RTCStaticLabelView[i] = LabelExtViewInit(labelconfig);
+ if (nullptr == RTCStaticLabelView[i])
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RTCStaticLabelView[%d] is nullptr!", i);
+ return false;
+ }
+ RTCStaticLabelView[i]->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f));
+ ScrollView->Add(RTCStaticLabelView[i]);
+ /* -------------------------------------------------------------------------- */
+ labelconfig.left = 138;
+ labelconfig.top = y2 + 130 * i;
+ labelconfig.height = 47;
+ labelconfig.fontSize = 40;
+ labelconfig.lineHeigh = 47;
+ labelconfig.text = text[i];
+ RTCDynamicLabelView[i] = LabelViewInit(labelconfig);
+ if (nullptr == RTCDynamicLabelView[i])
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RTCDynamicLabelView[%d] is nullptr!", i);
+ return false;
+ }
+ RTCDynamicLabelView[i]->SetTextColor(RTCDynamicLabelTextColor[i]);
+ ScrollView->Add(RTCDynamicLabelView[i]);
+ }
+ return true;
+ }
+
+ bool RespiratoryTrainingCompletedView::CreateRespiratoryTrainingCompletedImageView()
+ {
+ RespiratoryTrainingImage = new UIImageView();
+ if (RespiratoryTrainingImage == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingImage is nullptr!!");
+ return false;
+ }
+ RespiratoryTrainingImage->SetPosition(61, 122, 90, 90);
+ RespiratoryTrainingImage->SetAutoEnable(false);
+ RespiratoryTrainingImage->SetResizeMode(UIImageView::CENTER);
+ ImageInfo *imgInfo = ImageCacheManager::GetInstance().LoadSingleRes(RTCVectorImagePath);
+ if (imgInfo == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Load image failed!");
+ return false;
+ }
+ RespiratoryTrainingImage->SetSrc(imgInfo);
+ ScrollView->Add(RespiratoryTrainingImage);
+ /* -------------------------------------------------------------------------- */
+ ImageConfig imageconfig = {
+ .x = 89,
+ .y = 212,
+ .w = 42,
+ .h = 130,
+ };
+ // 加载呼吸训练Vector图片
+ imgInfo = ImageCacheManager::GetInstance().LoadSingleRes(RTCGroupListImagePath);
+ for (int i = 0; i < MAX_NUM; i++)
+ {
+ imageconfig.y = 212 + (i * 130);
+ RTCImageView[i] = ImageViewInit(imageconfig);
+ if (RTCImageView[i] == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RTCImageView[%d] is nullptr!", i);
+ return false;
+ }
+ RTCImageView[i]->SetSrc(imgInfo);
+ ScrollView->Add(RTCImageView[i]);
+ }
+ return true;
+ }
+
+ bool RespiratoryTrainingCompletedView::CreateRespiratoryTrainingCompletedLabelButtonView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingCompletedView::CreateRespiratoryTrainingCompletedLabelButtonView");
+ RTCLabelButton = new UILabelButtonExt();
+ if (RTCLabelButton == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RTCLabelButton is nullptr!");
+ return false;
+ }
+ RTCLabelButton->SetPosition(43, 622);
+ RTCLabelButton->Resize(380, 100);
+ RTCLabelButton->SetViewId(RTCLABELBUTTON);
+ RTCLabelButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
+ // RTCLabelButton->SetText("关闭");
+ RTCLabelButton->SetTextId(STR_CLOSE);
+ RTCLabelButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+ RTCLabelButton->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff000000, UIButton::PRESSED);
+ RTCLabelButton->SetStyleForState(STYLE_BORDER_COLOR, 0xffffffff, UIButton::PRESSED);
+ RTCLabelButton->SetStyleForState(STYLE_BORDER_OPA, 0x00, UIButton::PRESSED);
+ UIView::OnClickListener *labelButtonClick = static_cast<UIView::OnClickListener *>(RespiratoryTrainingPresenter::GetInstance());
+ if (labelButtonClick == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "labelButtonClick is nullptr!");
+ return false;
+ }
+ RTCLabelButton->SetOnClickListener(labelButtonClick);
+ ScrollView->Add(RTCLabelButton);
+ return true;
+ }
+
+ // 呼吸训练完成视图初始化
+ UIScrollView *RespiratoryTrainingCompletedView::RespiratoryTrainingCompletedViewInit(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingCompletedView::RespiratoryTrainingCompletedViewInit");
+ if (!CreateRespiratoryTrainingCompletedScrollView() || !CreateRespiratoryTrainingCompletedLabelView() ||
+ !CreateRespiratoryTrainingCompletedImageView() || !CreateRespiratoryTrainingCompletedLabelButtonView())
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingCompletedViewInit fail!!");
+ return nullptr;
+ }
+ return ScrollView;
+ }
+}
\ No newline at end of file
* @Author: luozheng 1732036298@qq.com
* @Date: 2024-05-07 11:25:58
* @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-06-08 17:10:04
+ * @LastEditTime: 2024-06-11 16:20:01
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/RespiratoryTraining/src/RespiratoryTrainingView.cpp
*/
return g_pRespiratoryTrainingView;
}
+ bool RespiratoryTrainingView::ChangeRespiratoryTrainingView(int16_t thisView)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingView::ChangeRespiratoryTrainingView");
+ if (RespiratoryTrainingScrollView[thisView] == nullptr)
+ {
+ container_->Add(RespiratoryTrainingScrollView[thisView]);
+ }
+ return true;
+ }
+
+ bool RespiratoryTrainingView::ChangeRespiratoryTrainingCompletedView(int16_t thisView)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingView::ChangeRespiratoryTrainingCompletedView");
+ if (RespiratoryTrainingScrollView[thisView] == nullptr)
+ {
+ p_RespiratoryTrainingCompletedView = new RespiratoryTrainingCompletedView();
+ if (p_RespiratoryTrainingCompletedView == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "new scrollView[%d] fail", thisView);
+ return false;
+ }
+ RespiratoryTrainingScrollView[thisView] = p_RespiratoryTrainingCompletedView->RespiratoryTrainingCompletedViewInit();
+ container_->Add(RespiratoryTrainingScrollView[thisView]);
+ }
+ return true;
+ }
+
+ struct RespiratoryTrainingViewMapper
+ {
+ const int16_t viewId;
+ bool (RespiratoryTrainingView::*func)(int16_t thisView);
+ };
+
+ static const RespiratoryTrainingViewMapper ViewMapper[] = {
+ {RESPIRATORYTRAINING, &RespiratoryTrainingView::ChangeRespiratoryTrainingView},
+ {RESPIRATORYTRAININGCOMPLETED, &RespiratoryTrainingView::ChangeRespiratoryTrainingCompletedView},
+ };
+
+ // 3.根据传入的interface参数执行相应视图ID关联的成员函数。
+ bool RespiratoryTrainingView::ClickFunc(int16_t interface)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingView::ClickFunc");
+ int funcSize = sizeof(ViewMapper) / sizeof(ViewMapper[0]);
+ for (int i = 0; i < funcSize; i++)
+ {
+ if (interface == ViewMapper[i].viewId)
+ {
+ bool jug = (this->*(ViewMapper[i].func))(interface);
+ if (jug == false)
+ {
+ return false;
+ }
+ return true;
+ }
+ }
+ return false;
+ }
+
+ void RespiratoryTrainingView::ChangeView(int16_t hideView, int16_t showView)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingView::ChangeView");
+ if (hideView > MAX_RESPIRATORYTRAININGID)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Overstep ones bounds");
+ return;
+ }
+ RespiratoryTrainingScrollView[hideView]->SetVisible(false);
+ ClickFunc(showView);
+ RespiratoryTrainingScrollView[showView]->SetVisible(true);
+ Draw();
+ }
+
// 设置按键监听
static void SetKeyActListener()
{
RespiratoryTrainingLabel_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
RespiratoryTrainingLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
RespiratoryTrainingLabel_->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
- container_->Add(RespiratoryTrainingLabel_);
+ RespiratoryTrainingScrollView[RESPIRATORYTRAINING]->Add(RespiratoryTrainingLabel_);
RespiratoryTrainingCallBack_->SetTextView(RespiratoryTrainingLabel_);
RespiratoryTrainingCallBack_->startTimestamp = HALTick::GetInstance().GetTime();
container_->Invalidate();
RespiratoryTrainingImg_->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
RespiratoryTrainingImg_->SetAutoEnable(false);
RespiratoryTrainingImg_->SetResizeMode(UIImageView::ImageResizeMode::CENTER);
- container_->Add(RespiratoryTrainingImg_);
+ RespiratoryTrainingScrollView[RESPIRATORYTRAINING]->Add(RespiratoryTrainingImg_);
// 创建并设置呼吸训练开始按钮
RespiratoryTrainingStart_ = new UILabelButton();
RespiratoryTrainingStart_->SetText("Start");
RespiratoryTrainingStart_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
RespiratoryTrainingStart_->SetOnClickListener(this);
- container_->Add(RespiratoryTrainingStart_);
+ RespiratoryTrainingScrollView[RESPIRATORYTRAINING]->Add(RespiratoryTrainingStart_);
}
void RespiratoryTrainingView::InitRespiratoryTrainingCallBackAndAnimator()
animateStart_ = false;
}
+ void RespiratoryTrainingView::InitRespiratoryTrainingScrollView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingCompletedView::CreateRespiratoryTrainingCompletedScrollView");
+ RespiratoryTrainingScrollView[RESPIRATORYTRAINING] = new UIScrollView();
+ if (RespiratoryTrainingScrollView[RESPIRATORYTRAINING] == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LanguageSwitchView::ScrollView new fail!");
+ return;
+ }
+ RespiratoryTrainingScrollView[RESPIRATORYTRAINING]->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
+ RespiratoryTrainingScrollView[RESPIRATORYTRAINING]->SetScrollBlankSize(50);
+ RespiratoryTrainingScrollView[RESPIRATORYTRAINING]->SetReboundSize(35);
+ RespiratoryTrainingScrollView[RESPIRATORYTRAINING]->SetHorizontalScrollState(false);
+ RespiratoryTrainingScrollView[RESPIRATORYTRAINING]->SetTouchable(true);
+ RespiratoryTrainingScrollView[RESPIRATORYTRAINING]->SetDraggable(true);
+ container_->Add(RespiratoryTrainingScrollView[RESPIRATORYTRAINING]);
+ }
+
void RespiratoryTrainingView::RespiratoryTrainingViewInit(void)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingView::RespiratoryTrainingViewInit");
+ InitRespiratoryTrainingScrollView();
InitRespiratoryTrainingElements();
InitRespiratoryTrainingCallBackAndAnimator();
}
container_ = nullptr;
}
+ if (RespiratoryTrainingScrollView[RESPIRATORYTRAINING] != nullptr)
+ {
+ RespiratoryTrainingScrollView[RESPIRATORYTRAINING]->RemoveAll();
+ delete RespiratoryTrainingScrollView[RESPIRATORYTRAINING];
+ RespiratoryTrainingScrollView[RESPIRATORYTRAINING] = nullptr;
+ }
+
if (RespiratoryTrainingAnimator_ != nullptr)
{
RespiratoryTrainingAnimator_->Stop();
delete RespiratoryTrainingLabel_;
RespiratoryTrainingLabel_ = nullptr;
}
+
+ if (p_RespiratoryTrainingCompletedView != nullptr)
+ {
+ delete p_RespiratoryTrainingCompletedView;
+ p_RespiratoryTrainingCompletedView = nullptr;
+
+ RespiratoryTrainingScrollView[RESPIRATORYTRAININGCOMPLETED] = nullptr;
+ }
+
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[RespiratoryTrainingView]ClearAll end!!");
}