#include "TjdUiAppHrView.h" #include "TjdUiAppHrModel.h" #include "TjdUiImageIds.h" #include "TjdUiMultiLanguageExt.h" #include "TjdUiUtils.h" #include "common/image_cache_manager.h" #include "dfx/event_injector.h" #include "graphic_service.h" #include "rtc_api.h" #include "sql_fit.h" #include "sys_config.h" #include "wearable_log.h" #include // #include "core/render_manager.h" using namespace OHOS; #define ENABLE_PRINT_INFO 1 #define DEBUG_ENABLE 0 #if ENABLE_PRINT_INFO #define static_print_info(...) sys_ui_log_i(__VA_ARGS__) // 一般信息打印宏控制 #define static_print_warn(...) sys_ui_log_w(__VA_ARGS__) // 警告信息打印一般常开 #define static_print_error(...) sys_ui_log_e(__VA_ARGS__) // 错误信息打印一般常开 #if DEBUG_ENABLE #define static_print_debug(...) sys_ui_log_d(__VA_ARGS__) #else #define static_print_debug(...) #endif #else #define static_print_info(...) #define static_print_warn(...) #define static_print_error(...) #endif #define HR_IMAGE_BIN_PATH TJD_IMAGE_PATH "img_heartrate.bin" #define IMAGE_RETURN_BIN_PATH TJD_IMAGE_PATH "img_return.bin" static ImageAnimatorInfo g_imageAnimator1Info[3] = { {nullptr, {111, 68}, 56, 50, IMG_SRC_IMAGE_INFO}, {nullptr, {111, 68}, 56, 50, IMG_SRC_IMAGE_INFO}, {nullptr, {111, 68}, 56, 50, IMG_SRC_IMAGE_INFO}, }; namespace TJD { static TjdUiAppHrView *g_pv_AppHrView = nullptr; static struct rtc_time localTime; HeratRateScrollPickerCallback *g_HeratRateScrollPickerCallback = nullptr; uint8_t TjdUiAppHrView::herarRateWaitTime_ = 0; static void FlickerTimerCallback(void *arg) { GraphicService::GetInstance()->PostGraphicEvent([arg]() { auto hrView = TjdUiAppHrView::GetInstance(); if (hrView == nullptr) { return; } UILabel *label = static_cast(arg); if (label == nullptr) { return; } if (TjdUiAppHrView::herarRateWaitTime_ < 10) { //等待5s待出值稳定 TjdUiAppHrView::herarRateWaitTime_ += 1; label->SetText("---"); label->IsVisible() ? label->SetVisible(false) : label->SetVisible(true); return; } static_print_debug("label->GetText: %s", label->GetText()); if (label->GetText() == std::string("---")) { label->IsVisible() ? label->SetVisible(false) : label->SetVisible(true); } else { hrView->flickerTimer->Stop(); hrView->Invalidate(); } }); } bool HeratRateScrollPicker::CheckValueChanges(uint8_t value) { if (value != hrValues_) { needsUpdate_ = true; directions_ = (value < hrValues_); label[1 + (directions_ ? -1 : 1)].SetText(std::to_string(value).c_str()); hrValues_ = value; return true; } else { needsUpdate_ = false; } return false; } // static bool direction = true; // 0向上 1向下 void HeratRateScrollPickerCallback::Callback(OHOS::UIView *view) { auto scrollPicker = dynamic_cast(view); if (!scrollPicker) return; if (!scrollPicker->needsUpdate_) { return; } state_ = true; int16_t x; int16_t y; UIView *childView = scrollPicker->GetChildrenHead(); while (childView != nullptr) { bool dir = scrollPicker->directions_; int16_t y = childView->GetY() + (dir ? 2 : -2); childView->SetY(y); childView = childView->GetNextSibling(); if (++cnt >= 90) { if (animator_) animator_->Stop(); cnt = 0; scrollPicker->needsUpdate_ = false; dir ? CycleLabelsUp(view) : CycleLabelsDown(view); scrollPicker->ResetLabelPositions(); state_ = false; } scrollPicker->Invalidate(); } } void HeratRateScrollPickerCallback::CycleLabelsUp(OHOS::UIView *view) { auto scrollPicker = dynamic_cast(view); if (!scrollPicker) return; scrollPicker->UpdateLabels(); } void HeratRateScrollPickerCallback::CycleLabelsDown(OHOS::UIView *view) { auto scrollPicker = dynamic_cast(view); if (!scrollPicker) return; scrollPicker->UpdateLabels(); } #define FONT_SIZE 56 HeratRateScrollPicker::HeratRateScrollPicker() { SetPosition(0, 0, 30, 60); // SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff); SetStyle(STYLE_BACKGROUND_OPA, 0x00); SetDraggable(false); for (size_t i = 0; i < 3; i++) { label[i].SetFont(TJD_DIN_MEDIUM_FONT_FILENAME, FONT_SIZE); label[i].SetText("0"); // label[i].SetLineBreakMode(OHOS::UILabel::LINE_BREAK_ADAPT); label[i].SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER); label[i].SetPosition(0, -60 + 60 * i, 30, 60); Add(&label[i]); } } HeratRateScrollPicker::~HeratRateScrollPicker() { RemoveAll(); } void HeratRateScrollPicker::DateInit(uint8_t value) { label[1].SetText(std::to_string(value).c_str()); hrValues_ = value; preValues_ = value; } void HeratRateScrollPicker::UpdateLabels() { label[0].SetText(std::to_string(hrValues_).c_str()); label[1].SetText(std::to_string(hrValues_).c_str()); label[2].SetText(std::to_string(hrValues_).c_str()); // 可预加载下一值 } void HeratRateScrollPicker::ResetLabelPositions() { label[0].SetY(-60); label[1].SetY(0); label[2].SetY(60); } static void DeleteViewChilden(UIViewGroup *viewGroup) { if (viewGroup == nullptr) { return; } UIView *view = viewGroup->GetChildrenHead(); while (view != nullptr) { UIView *tempView = view; view = view->GetNextSibling(); if (tempView->GetParent()) { static_cast(tempView->GetParent())->Remove(tempView); } delete tempView; tempView = nullptr; } } void HrFlickerTimer::Start() { if (!label_) return; label_->SetText("---"); auto hrView = TjdUiAppHrView::GetInstance(); OHOS::GraphicTimer::Start(); TjdUiAppHrView::GetInstance()->SetScrollPickerVisible(false); uint8_t value = TjdUiAppHrModel::GetInstance().GetHrCurValue(); hrView->ScrollPickerDataInit(value); } void HrFlickerTimer::Stop() { if (!label_) return; if (label_->IsVisible()) label_->SetVisible(false); OHOS::GraphicTimer::Stop(); } bool HrOnClickedListener::OnClick(OHOS::UIView &view, const OHOS::ClickEvent &event) { if (view.GetViewId() == "imageAbout") { TjdUiAppHrPresenter::GetInstance()->TimeTaskStop(); TjdUiAppHrView::GetInstance()->ChangedView(HR_ABOUT_VIEW, HR_SWIPE_VIEW); } else if (view.GetViewId() == "aboutImgReturn") { TjdUiAppHrPresenter::GetInstance()->TimeTaskStart(); TjdUiAppHrView::GetInstance()->ChangedView(HR_SWIPE_VIEW, HR_ABOUT_VIEW); } else if (view.GetViewId() == "unwearImgReturn") { TjdUiAppHrPresenter::GetInstance()->TimeTaskStart(); TjdUiAppHrView::GetInstance()->ChangedView(HR_SWIPE_VIEW, HR_UNWEAR_VIEW); } return true; } TjdUiAppHrView::TjdUiAppHrView() { static_print_info("TjdUiAppHrView::construct..."); g_pv_AppHrView = this; } TjdUiAppHrView *TjdUiAppHrView::GetInstance(void) { return g_pv_AppHrView; } TjdUiAppHrView::~TjdUiAppHrView() { static_print_info("~TjdUiAppHrView::destruct..."); g_pv_AppHrView = nullptr; if (leftCallback_ != nullptr) { delete leftCallback_; leftCallback_ = nullptr; } if (leftAnimator_ != nullptr) { leftAnimator_->Stop(); delete leftAnimator_; leftAnimator_ = nullptr; } if (midCallback_ != nullptr) { delete midCallback_; midCallback_ = nullptr; } if (midAnimator_ != nullptr) { midAnimator_->Stop(); delete midAnimator_; midAnimator_ = nullptr; } if (rightCallback_ != nullptr) { delete rightCallback_; rightCallback_ = nullptr; } if (rightAnimator_ != nullptr) { rightAnimator_->Stop(); delete rightAnimator_; rightAnimator_ = nullptr; } if (dataSerial_ != nullptr) { uiChart1_->DeleteDataSerial(dataSerial_); delete dataSerial_; dataSerial_ = nullptr; } if (uiChart1_ != nullptr) { static_cast(uiChart1_->GetParent())->Remove(uiChart1_); delete uiChart1_; uiChart1_ = nullptr; } if (flickerTimer) { flickerTimer->Stop(); delete flickerTimer; flickerTimer = nullptr; } if (containerAll_) { containerAll_->RemoveAll(); delete containerAll_; containerAll_ = nullptr; } if (swipeContainer_) { swipeContainer_->RemoveAll(); delete swipeContainer_; swipeContainer_ = nullptr; } if (container1_) { DeleteViewChilden(container1_); delete container1_; container1_ = nullptr; } if (container2_) { DeleteViewChilden(container2_); delete container2_; container2_ = nullptr; } if (AboutView_) { DeleteViewChilden(AboutView_); delete AboutView_; AboutView_ = nullptr; } if (UnwearView_) { DeleteViewChilden(UnwearView_); delete UnwearView_; UnwearView_ = nullptr; } if (aboutImageLister) { delete aboutImageLister; aboutImageLister = nullptr; } if (unwearImageLister) { delete unwearImageLister; unwearImageLister = nullptr; } if (swipe1ImageLister) { delete swipe1ImageLister; swipe1ImageLister = nullptr; } ImageCacheManager::GetInstance().UnloadAllInMultiRes(HR_IMAGE_BIN_PATH); ImageCacheManager::GetInstance().UnloadAllInMultiRes(IMAGE_RETURN_BIN_PATH); } void TjdUiAppHrView::OnStart() { static_print_info("TjdUiAppHrView::OnStart..."); // printf("fps: %lf\n",RenderManager::GetInstance().GetFPS()); InitImageInfo(); TjdUiAppHrModel::GetInstance().InitWeekHrViewInfo(); TjdUiAppHrModel::GetInstance().HrPointArrayInit(); presenter_->SetHrPointArray(TjdUiAppHrModel::GetInstance().GetHrArray()); if (onSwipeListener_ == nullptr) { onSwipeListener_ = static_cast(TjdUiAppHrPresenter::GetInstance()); } if (OnDragListener_ == nullptr) { OnDragListener_ = static_cast(TjdUiAppHrPresenter::GetInstance()); } if (swipeContainer_ == nullptr) { swipeContainer_ = new UISwipeViewNested(UISwipeView::VERTICAL); swipeContainer_->SetPosition(0, 0, OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION); swipeContainer_->SetViewId(HR_SWIPEVIEW_ID); swipeContainer_->SetStyle(STYLE_BACKGROUND_OPA, 0); swipeContainer_->SetOnSwipeListener(onSwipeListener_); if (OHOS::PageTransitionMgr::GetInstance().GetTopSlideBackImage() == nullptr) { swipeContainer_->SetOnDragListener(OnDragListener_); } } if (containerAll_ == nullptr) { containerAll_ = new UIViewGroup(); containerAll_->SetPosition(0, 0, OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION); } Container1Init(); Container2Init(); AboutViewInit(); UnwearViewInit(); groupList_[HrView::HR_SWIPE_VIEW] = swipeContainer_; groupList_[HrView::HR_ABOUT_VIEW] = AboutView_; groupList_[HrView::HR_UNWEAR_VIEW] = UnwearView_; for (int i = 0; i < HRMAX_VIEW; i++) { if (groupList_[i] != nullptr) { containerAll_->Add(groupList_[i]); } } curView = HR_SWIPE_VIEW; AddViewToRootContainer(containerAll_); GetRootContainer()->SetViewId("TjdHeartRateView"); flickerTimer = new HrFlickerTimer(200, FlickerTimerCallback, (void *)hrCurValue_, true); } void TjdUiAppHrView::OnStop() { static_print_info("TjdUiAppHrView::OnStop..."); TjdUiAppHrPresenter::GetInstance()->TimeTaskStop(); } void TjdUiAppHrView::InitImageInfo(void) { ImageInfo *imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_HEARTRATE_HR_DT_01_03, HR_IMAGE_BIN_PATH); g_imageAnimator1Info[0].imageInfo = imgInfo; imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_HEARTRATE_HR_DT_02_03, HR_IMAGE_BIN_PATH); g_imageAnimator1Info[1].imageInfo = imgInfo; imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_HEARTRATE_HR_DT_03_03, HR_IMAGE_BIN_PATH); g_imageAnimator1Info[2].imageInfo = imgInfo; } void TjdUiAppHrView::Container1Init(void) { if (container1_ == nullptr) { container1_ = new UIViewGroup(); container1_->SetPosition(0, 0, OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION); container1_->SetViewId("container1_"); container1_->SetStyle(STYLE_BACKGROUND_OPA, 0); } /*-----------------------------Add dataSerial_ to App------------------------------*/ if (dataSerial_ == nullptr) { dataSerial_ = new UIChartDataSerial(); } dataSerial_->SetMaxDataCount(288); Point *hrPointArray = TjdUiAppHrPresenter::GetInstance()->GetHrPointArray(); dataSerial_->AddPoints(hrPointArray, 288); // 5: number of data points dataSerial_->SetLineColor(Color::Red()); dataSerial_->SetFillColor(Color::Red()); dataSerial_->EnableGradient(true); dataSerial_->EnableSmooth(true); /*-----------------------------Add uiChart1_ to App------------------------------*/ if (uiChart1_ == nullptr) { uiChart1_ = new UIChartPolyline(); } uiChart1_->SetPosition(30, 147); uiChart1_->Resize(365, 155); uiChart1_->SetViewId("uiChart1"); uiChart1_->SetStyle(STYLE_BACKGROUND_OPA, 0x00); UIXAxis &xAxis = uiChart1_->GetXAxis(); UIYAxis &yAxis = uiChart1_->GetYAxis(); xAxis.SetMarkNum(5); // 5: number of scales xAxis.SetDataRange(0, 288); // 0: minimum value, 5: maximum value yAxis.SetDataRange(0, 200); // 0: minimum value, 3500: maximum value xAxis.SetVisible(false); yAxis.SetVisible(false); uiChart1_->SetGradientOpacity(25, 127); // 25: min opacity, 127: max opacity uiChart1_->AddDataSerial(dataSerial_); container1_->Add(uiChart1_); uiChart1_->SetVisible(true); /*-----------------------------Add image1_ to App------------------------------*/ if (image1_ == nullptr) { image1_ = new UIImageView(); } image1_->SetPosition(30, 137); image1_->SetViewId("image1"); ImageInfo *imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_HEARTRATE_CHART_TIME, HR_IMAGE_BIN_PATH); if (imgInfo == nullptr) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "load image error\n"); return; } image1_->SetSrc(imgInfo); container1_->Add(image1_); /*-----------------------------Add image2_ to App------------------------------*/ if (image2_ == nullptr) { image2_ = new UIImageView(); } image2_->SetPosition(108, 376); image2_->SetViewId("image2"); imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_HEARTRATE_HIGH, HR_IMAGE_BIN_PATH); image2_->SetSrc(imgInfo); container1_->Add(image2_); image2_->SetVisible(true); /*-----------------------------Add image3_ to App------------------------------*/ if (image3_ == nullptr) { image3_ = new UIImageView(); } image3_->SetPosition(264, 376); image3_->SetViewId("image3"); imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_HEARTRATE_LOW, HR_IMAGE_BIN_PATH); image3_->SetSrc(imgInfo); container1_->Add(image3_); image3_->SetVisible(true); /*-----------------------------Add image4_ to App------------------------------*/ if (image4_ == nullptr) { image4_ = new UIImageView(); } image4_->SetPosition(214, 430); image4_->SetViewId("image4"); imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_HEARTRATE_PULL_UP, HR_IMAGE_BIN_PATH); image4_->SetSrc(imgInfo); container1_->Add(image4_); image4_->SetVisible(true); /*-----------------------------Add imageAbout_ to App------------------------------*/ if (imageAbout_ == nullptr) { imageAbout_ = new UIImageView(); } imageAbout_->SetPosition(213 - 12, 0); imageAbout_->SetViewId("imageAbout"); imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_HEARTRATE_ABOUT, HR_IMAGE_BIN_PATH); imageAbout_->SetSrc(imgInfo); imageAbout_->SetStyle(STYLE_BORDER_WIDTH, 12); imageAbout_->SetStyle(STYLE_BORDER_COLOR, 0xff000000); imageAbout_->SetTouchable(true); swipe1ImageLister = new HrOnClickedListener(); imageAbout_->SetOnClickListener(swipe1ImageLister); container1_->Add(imageAbout_); imageAbout_->SetVisible(true); /*-----------------------------Add label1Num200_ to App------------------------------*/ if (label1Num200_ == nullptr) { label1Num200_ = new UILabel(); } label1Num200_->SetPosition(405, 137); label1Num200_->SetViewId("label1Num200"); label1Num200_->SetText("200"); label1Num200_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); label1Num200_->SetTextColor(Color::GetColorFromRGBA(0x6B, 0x6B, 0x6B, 0xff)); label1Num200_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label1Num200_->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_24); container1_->Add(label1Num200_); label1Num200_->SetVisible(true); /*-----------------------------Add label1Num150_ to App------------------------------*/ if (label1Num150_ == nullptr) { label1Num150_ = new UILabel(); } label1Num150_->SetPosition(405, 177); label1Num150_->SetViewId("label1Num150"); label1Num150_->SetText("150"); label1Num150_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); label1Num150_->SetTextColor(Color::GetColorFromRGBA(0x6B, 0x6B, 0x6B, 0xff)); label1Num150_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label1Num150_->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_24); container1_->Add(label1Num150_); label1Num150_->SetVisible(true); /*-----------------------------Add label1Num100_ to App------------------------------*/ if (label1Num100_ == nullptr) { label1Num100_ = new UILabel(); } label1Num100_->SetPosition(405, 216); label1Num100_->SetViewId("label1Num100"); label1Num100_->SetText("100"); label1Num100_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); label1Num100_->SetTextColor(Color::GetColorFromRGBA(0x6B, 0x6B, 0x6B, 0xff)); label1Num100_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label1Num100_->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_24); container1_->Add(label1Num100_); label1Num100_->SetVisible(true); /*-----------------------------Add label1Num50_ to App------------------------------*/ if (label1Num50_ == nullptr) { label1Num50_ = new UILabel(); } label1Num50_->SetPosition(405, 256); label1Num50_->SetViewId("label1Num50"); label1Num50_->SetText("50"); label1Num50_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); label1Num50_->SetTextColor(Color::GetColorFromRGBA(0x6B, 0x6B, 0x6B, 0xff)); label1Num50_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label1Num50_->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_24); container1_->Add(label1Num50_); label1Num50_->SetVisible(true); /*-----------------------------Add hrMax_ to App------------------------------*/ if (hrMax_ == nullptr) { hrMax_ = new UILabel(); } hrMax_->SetPosition(146, 360); hrMax_->SetViewId("hrMax"); tjd_driver_rtc_get_ops()->get_rtc_time(&localTime); uint8_t max = sql_fit_get_hr_max(localTime.tm_wday); if (max == 0) { hrMax_->SetText("---"); } else { hrMax_->SetText(std::to_string(max).c_str()); } hrMax_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); hrMax_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); hrMax_->SetFont(TJD_VECTOR_FONT_FILENAME, 40); container1_->Add(hrMax_); hrMax_->SetVisible(true); /*-----------------------------Add hrMin_ to App------------------------------*/ if (hrMin_ == nullptr) { hrMin_ = new UILabel(); } hrMin_->SetPosition(300, 360); hrMin_->SetViewId("hrMin"); uint8_t min = sql_fit_get_hr_min(localTime.tm_wday); if (min == 0 || min == 255) { hrMin_->SetText("---"); } else { hrMin_->SetText(std::to_string(min).c_str()); } hrMin_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); hrMin_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); hrMin_->SetFont(TJD_VECTOR_FONT_FILENAME, 40); container1_->Add(hrMin_); hrMin_->SetVisible(true); /*-----------------------------Add hrUnit_ to App------------------------------*/ if (hrUnit_ == nullptr) { hrUnit_ = new UILabelExt(); } hrUnit_->SetPosition(298, 74); hrUnit_->SetViewId("hrUnit"); // hrUnit_->SetText("次/分"); hrUnit_->SetTextId(STR_ID_110); hrUnit_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); hrUnit_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); hrUnit_->SetFont(TJD_VECTOR_FONT_FILENAME, 28); container1_->Add(hrUnit_); hrUnit_->SetVisible(true); /*-----------------------------Add hrCurValue_ to App------------------------------*/ if (hrCurValue_ == nullptr) { hrCurValue_ = new UILabel(); } hrCurValue_->SetPosition(194, 50); hrCurValue_->SetViewId("hrCur"); hrCurValue_->SetText("---"); hrCurValue_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); hrCurValue_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); hrCurValue_->SetFont(TJD_VECTOR_FONT_FILENAME, 56); container1_->Add(hrCurValue_); hrCurValue_->SetVisible(true); leftScrollPicker = new HeratRateScrollPicker(); leftScrollPicker->SetPosition(194, 50); leftScrollPicker->SetVisible(false); container1_->Add(leftScrollPicker); leftCallback_ = new HeratRateScrollPickerCallback(); leftAnimator_ = new OHOS::Animator(leftCallback_, leftScrollPicker, 1000, true); leftCallback_->SetAnimator(leftAnimator_); midScrollPicker = new HeratRateScrollPicker(); midScrollPicker->SetPosition(194 + 30, 50); midScrollPicker->SetVisible(false); container1_->Add(midScrollPicker); midCallback_ = new HeratRateScrollPickerCallback(); midAnimator_ = new OHOS::Animator(midCallback_, midScrollPicker, 1000, true); midCallback_->SetAnimator(midAnimator_); rightScrollPicker = new HeratRateScrollPicker(); rightScrollPicker->SetPosition(194 + 60, 50); rightScrollPicker->SetVisible(false); container1_->Add(rightScrollPicker); rightCallback_ = new HeratRateScrollPickerCallback(); rightAnimator_ = new OHOS::Animator(rightCallback_, rightScrollPicker, 1000, true); rightCallback_->SetAnimator(rightAnimator_); /*-----------------------------Add imageAnimator1_ to App------------------------------*/ if (imageAnimator1_ == nullptr) { imageAnimator1_ = new UIImageAnimatorView(); } imageAnimator1_->SetPosition(111, 62); imageAnimator1_->SetViewId("imageAnimator1"); imageAnimator1_->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff); imageAnimator1_->SetStyle(STYLE_BACKGROUND_OPA, 0); imageAnimator1_->SetImageAnimatorSrc(g_imageAnimator1Info, 3, 200); imageAnimator1_->SetTimeOfPause(200); imageAnimator1_->SetReverse(false); imageAnimator1_->SetTouchable(true); container1_->Add(imageAnimator1_); imageAnimator1_->SetVisible(true); swipeContainer_->Add(container1_); } void TjdUiAppHrView::Container2Init(void) { if (container2_ == nullptr) { container2_ = new UIViewGroup(); container2_->SetPosition(0, 0, OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION); container2_->SetViewId("container2_"); container2_->SetStyle(STYLE_BACKGROUND_OPA, 0); } /*-----------------------------Add image5_ to Container2_------------------------------*/ if (image5_ == nullptr) { image5_ = new UIImageView(); } image5_->SetPosition(214, 22); image5_->SetViewId("image5"); ImageInfo *imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_HEARTRATE_PULL_DOWN, HR_IMAGE_BIN_PATH); image5_->SetSrc(imgInfo); container2_->Add(image5_); /*-----------------------------Add image6_ to Container2_------------------------------*/ if (image6_ == nullptr) { image6_ = new UIImageView(); } image6_->SetPosition(30, 137); image6_->SetViewId("image6"); imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_HEARTRATE_CHART_WEEK, HR_IMAGE_BIN_PATH); image6_->SetSrc(imgInfo); container2_->Add(image6_); /*-----------------------------Add hrText1_ to container2_------------------------------*/ if (hrText1_ == nullptr) { hrText1_ = new UILabelExt(); } hrText1_->SetPosition(165, 70); hrText1_->SetViewId("hrText1"); hrText1_->SetTextId(STR_ID_111); // hrText1_->SetText("平均心率"); hrText1_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); hrText1_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); hrText1_->SetFont(TJD_VECTOR_FONT_FILENAME, 34); container2_->Add(hrText1_); hrText1_->SetVisible(true); /*-----------------------------Add hrText2_ to container2_------------------------------*/ if (hrText2_ == nullptr) { hrText2_ = new UILabelExt(); } hrText2_->SetPosition(0, 375, 466, 37); hrText2_->SetViewId("hrText2"); hrText2_->SetTextId(STR_ID_112); // hrText2_->SetText("近7天数据显示"); // hrText2_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); hrText2_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); hrText2_->SetFont(TJD_VECTOR_FONT_FILENAME, 28); // printf("height = %d\n", hrText2_->GetHeight()); container2_->Add(hrText2_); hrText2_->SetVisible(true); /*-----------------------------Add label2Num200_ to container2_------------------------------*/ if (label2Num200_ == nullptr) { label2Num200_ = new UILabel(); } label2Num200_->SetPosition(405, 137); label2Num200_->SetViewId("label2Num200"); label2Num200_->SetText("200"); label2Num200_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); label2Num200_->SetTextColor(Color::GetColorFromRGBA(0x6B, 0x6B, 0x6B, 0xff)); label2Num200_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label2Num200_->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_24); container2_->Add(label2Num200_); label2Num200_->SetVisible(true); /*-----------------------------Add label2Num150_ to container2_------------------------------*/ if (label2Num150_ == nullptr) { label2Num150_ = new UILabel(); } label2Num150_->SetPosition(405, 177); label2Num150_->SetViewId("label2Num150"); label2Num150_->SetText("150"); label2Num150_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); label2Num150_->SetTextColor(Color::GetColorFromRGBA(0x6B, 0x6B, 0x6B, 0xff)); label2Num150_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label2Num150_->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_24); container2_->Add(label2Num150_); label2Num150_->SetVisible(true); /*-----------------------------Add label2Num100_ to container2_------------------------------*/ if (label2Num100_ == nullptr) { label2Num100_ = new UILabel(); } label2Num100_->SetPosition(405, 216); label2Num100_->SetViewId("label2Num100"); label2Num100_->SetText("100"); label2Num100_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); label2Num100_->SetTextColor(Color::GetColorFromRGBA(0x6B, 0x6B, 0x6B, 0xff)); label2Num100_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label2Num100_->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_24); container2_->Add(label2Num100_); label2Num100_->SetVisible(true); /*-----------------------------Add label2Num50_ to container2_------------------------------*/ if (label2Num50_ == nullptr) { label2Num50_ = new UILabel(); } label2Num50_->SetPosition(405, 256); label2Num50_->SetViewId("label2Num50"); label2Num50_->SetText("50"); label2Num50_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); label2Num50_->SetTextColor(Color::GetColorFromRGBA(0x6B, 0x6B, 0x6B, 0xff)); label2Num50_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label2Num50_->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_24); container2_->Add(label2Num50_); label2Num50_->SetVisible(true); /*-----------------------------Add rodViewGroup[7] to container2_------------------------------*/ for (int i = 0; i < 7; i++) { rodViewGroup[i] = new UIView(); if (i == 0) { rodViewGroup[i]->SetPosition(46 + (6 * 54), TjdUiAppHrModel::GetInstance().GetWeekHrViewHigh()[i]); rodViewGroup[i]->Resize(15, TjdUiAppHrModel::GetInstance().GetWeekHrViewLow()[i]); } else { rodViewGroup[i]->SetPosition(46 + ((i - 1) * 54), TjdUiAppHrModel::GetInstance().GetWeekHrViewHigh()[i]); rodViewGroup[i]->Resize(15, TjdUiAppHrModel::GetInstance().GetWeekHrViewLow()[i]); } rodViewGroup[i]->Resize(15, TjdUiAppHrModel::GetInstance().GetWeekHrViewLow()[i]); rodViewGroup[i]->SetStyle(STYLE_BORDER_RADIUS, 30); rodViewGroup[i]->SetStyle(STYLE_BACKGROUND_COLOR, 0xffff0000); container2_->Add(rodViewGroup[i]); } swipeContainer_->Add(container2_); } void TjdUiAppHrView::UpdateRodViewGroup(void) { for (int i = 0; i < 7; i++) { if (i == 0) { rodViewGroup[i]->SetPosition(46 + (6 * 54), TjdUiAppHrModel::GetInstance().GetWeekHrViewHigh()[i]); rodViewGroup[i]->Resize(15, TjdUiAppHrModel::GetInstance().GetWeekHrViewLow()[i]); } else { rodViewGroup[i]->SetPosition(46 + ((i - 1) * 54), TjdUiAppHrModel::GetInstance().GetWeekHrViewHigh()[i]); rodViewGroup[i]->Resize(15, TjdUiAppHrModel::GetInstance().GetWeekHrViewLow()[i]); } rodViewGroup[i]->Invalidate(); } } void TjdUiAppHrView::AboutViewInit(void) { if (AboutView_ == nullptr) { AboutView_ = new UIViewGroup(); AboutView_->SetPosition(0, 0, OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION); AboutView_->SetVisible(false); AboutView_->SetStyle(STYLE_BACKGROUND_OPA, 0); } /*-----------------------------Add aboutText to AboutView_------------------------------*/ if (aboutText == nullptr) { aboutText = new UILabelExt(); } aboutText->SetViewId("aboutText"); aboutText->SetTextId(STR_ID_115); // aboutText->SetText("手表仅显示5分钟内最新的心率数据,更多数据请前往APP连接后查看"); aboutText->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); aboutText->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); aboutText->SetFont(TJD_VECTOR_FONT_FILENAME, 34); if (TjdUiMultiLanguageExt::GetCurrentLanguage() == LANGUAGE_ID_CHS) aboutText->SetPosition(31, 152, 405, 128); else aboutText->SetPosition(31, 86, 405, 128); /*-----------------------------Add aboutImg to AboutView_------------------------------*/ if (aboutImg == nullptr) { aboutImg = new UIImageView(); } aboutImg->SetPosition(187, 352); aboutImg->SetViewId("aboutImgReturn"); ImageInfo *imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_RETURN_IMG_RETURN, IMAGE_RETURN_BIN_PATH); if (imgInfo != nullptr) { aboutImg->SetSrc(imgInfo); } aboutImg->SetTouchable(true); aboutImageLister = new HrOnClickedListener(); aboutImg->SetOnClickListener(aboutImageLister); AboutView_->Add(aboutText); AboutView_->Add(aboutImg); } void TjdUiAppHrView::UnwearViewInit(void) { if (UnwearView_ == nullptr) { UnwearView_ = new UIViewGroup(); UnwearView_->SetPosition(0, 0, OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION); UnwearView_->SetVisible(false); UnwearView_->SetStyle(STYLE_BACKGROUND_OPA, 0); } /*-----------------------------Add unwearText1 to UnwearView_------------------------------*/ if (unwearText1 == nullptr) { unwearText1 = new UILabelExt(); } unwearText1->SetPosition(151, 224); unwearText1->SetViewId("unwearText1"); // unwearText1->SetText("监测到脱腕"); unwearText1->SetTextId(STR_ID_113); unwearText1->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); unwearText1->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); unwearText1->SetFont(TJD_VECTOR_FONT_FILENAME, 36); TjdUiUtils::AutoAlignHorizontalCenter(*unwearText1); /*-----------------------------Add unwearText2 to UnwearView_------------------------------*/ if (unwearText2 == nullptr) { unwearText2 = new UILabelExt(); } unwearText2->SetPosition(0, 272, 466, 47); unwearText2->SetViewId("unwearText2"); unwearText2->SetTextId(STR_ID_114); // unwearText2->SetText("请偏紧佩戴手表测量!"); unwearText2->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE); unwearText2->SetRollSpeed(30); unwearText2->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); unwearText2->SetFont(TJD_VECTOR_FONT_FILENAME, 36); unwearText2->SetStyle(STYLE_TEXT_OPA, 0xff * 0.3); TjdUiUtils::AutoAlignHorizontalCenter(*unwearText2); /*-----------------------------Add unwearImg1 to UnwearView_------------------------------*/ if (unwearImg1 == nullptr) { unwearImg1 = new UIImageView(); } unwearImg1->SetPosition(187, 352); unwearImg1->SetViewId("unwearImgReturn"); ImageInfo *imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_RETURN_IMG_RETURN, IMAGE_RETURN_BIN_PATH); if (imgInfo != nullptr) { unwearImg1->SetSrc(imgInfo); } unwearImg1->SetTouchable(true); unwearImageLister = new HrOnClickedListener(); unwearImg1->SetOnClickListener(unwearImageLister); /*-----------------------------Add unwearImg2 to UnwearView_------------------------------*/ if (unwearImg2 == nullptr) { unwearImg2 = new UIImageView(); } unwearImg2->SetPosition(155, 119); unwearImg2->SetViewId("unwearImg2"); imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_HEARTRATE_REMIND, HR_IMAGE_BIN_PATH); if (imgInfo != nullptr) { unwearImg2->SetSrc(imgInfo); } UnwearView_->Add(unwearText1); UnwearView_->Add(unwearText2); UnwearView_->Add(unwearImg1); UnwearView_->Add(unwearImg2); } void TjdUiAppHrView::ChangedView(HrView view, HrView hideView) { if (view >= HRMAX_VIEW) { return; } if (viewMapper_[view] == nullptr) { return; } (GetInstance()->*viewMapper_[view])(hideView); } bool TjdUiAppHrView::ShowSwipeView(HrView hideView) { if (groupList_[hideView] == nullptr) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "groupList_ is nullptr"); return false; } groupList_[hideView]->SetVisible(false); if (swipeContainer_) { swipeContainer_->RequestFocus(); swipeContainer_->SetRotateFactor(1.0); } if (groupList_[HrView::HR_SWIPE_VIEW] == nullptr) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "groupList_ is nullptr"); return false; } groupList_[HrView::HR_SWIPE_VIEW]->SetVisible(true); groupList_[HrView::HR_SWIPE_VIEW]->Invalidate(); curView = HR_SWIPE_VIEW; return true; } bool TjdUiAppHrView::ShowAboutView(HrView hideView) { if (groupList_[hideView] == nullptr) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "groupList_ is nullptr"); return false; } groupList_[hideView]->SetVisible(false); if (hideView == HR_SWIPE_VIEW && swipeContainer_) { swipeContainer_->ClearFocus(); } if (groupList_[HrView::HR_ABOUT_VIEW] == nullptr) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "groupList_ is nullptr"); return false; } groupList_[HrView::HR_ABOUT_VIEW]->SetVisible(true); groupList_[HrView::HR_ABOUT_VIEW]->Invalidate(); curView = HR_ABOUT_VIEW; return true; } bool TjdUiAppHrView::ShowUnwearView(HrView hideView) { if (groupList_[hideView] == nullptr) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "groupList_ is nullptr"); return false; } groupList_[hideView]->SetVisible(false); if (hideView == HR_SWIPE_VIEW && swipeContainer_) { swipeContainer_->ClearFocus(); } if (groupList_[HrView::HR_UNWEAR_VIEW] == nullptr) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "groupList_ is nullptr"); return false; } groupList_[HrView::HR_UNWEAR_VIEW]->SetVisible(true); groupList_[HrView::HR_UNWEAR_VIEW]->Invalidate(); curView = HR_UNWEAR_VIEW; return true; } void TjdUiAppHrView::UpdateHrViewData(uint32_t index, uint8_t hrValue) { Point curPoint = {index, hrValue}; if (hrValue == 0) { SetScrollPickerVisible(false); hrCurValue_->SetText("---"); } else { hrCurValue_->SetVisible(false); SetScrollPickerVisible(true); hrCurValue_->SetText(std::to_string(hrValue).c_str()); if (!leftCallback_->GetState()) { uint8_t leftValue = hrValue / 100; if (leftScrollPicker->CheckValueChanges(leftValue)) { leftAnimator_->Start(); } } if (!midCallback_->GetState()) { uint8_t midValue = hrValue / 10 % 10; if (midScrollPicker->CheckValueChanges(midValue)) { midAnimator_->Start(); } } if (!rightCallback_->GetState()) { uint8_t rightValue = hrValue % 10; if (rightScrollPicker->CheckValueChanges(rightValue)) { rightAnimator_->Start(); } rightAnimator_->Start(); } dataSerial_->ModifyPoint(index, curPoint); uiChart1_->RefreshChart(); // } if (hrMax_->GetText() != std::string("---")) { if (hrValue > std::stoi(hrMax_->GetText())) { hrMax_->SetText(std::to_string(hrValue).c_str()); hrMax_->Invalidate(); } } else { hrMax_->SetText(std::to_string(hrValue).c_str()); hrMax_->Invalidate(); } if (hrMin_->GetText() != std::string("---")) { if (hrValue < std::stoi(hrMin_->GetText())) { hrMin_->SetText(std::to_string(hrValue).c_str()); hrMin_->Invalidate(); } } else { hrMin_->SetText(std::to_string(hrValue).c_str()); hrMin_->Invalidate(); } } } UIImageAnimatorView *TjdUiAppHrView::GetAnimatorView(void) { return imageAnimator1_; } void TjdUiAppHrView::InitViewData(void) {} } // namespace TJD