mcu_hi3321_watch/tjd/ui/app/daily_data/TjdUiAppDailyDataView.cpp
2025-05-26 20:15:20 +08:00

915 lines
36 KiB
C++

#include "TjdUiAppDailyDataView.h"
#include "TjdUiImageIds.h"
#include "TjdUiMemManage.h"
#include "TjdUiMultiLanguageExt.h"
#include "TjdUiUtils.h"
#include "common/image_cache_manager.h"
#include "style.h"
#include "sys_config.h"
#include "ui_label_ext.h"
#include <iomanip>
#include <sstream>
#include <stdio.h>
#define ENABLE_PRINT_INFO 1
#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__) // 错误信息打印一般常开
#define static_print_debug(...) sys_ui_log_d(__VA_ARGS__) // 调试信息打印
#else
#define static_print_info(...)
#define static_print_warn(...)
#define static_print_error(...)
#define static_print_debug(...)
#endif
using namespace OHOS;
namespace TJD {
// clang-format off
#define IMAGE_ICON_BIN_PATH TJD_IMAGE_PATH"img_icon.bin"
// clang-format on
static const char about_txt[] = {
"本应用数据统计您在一天内的运动数据,包含步数、卡路里,活动时长,您也可对每天的运动量进行目标"
"设置,我们会在达标时对您进行提醒。"};
static TjdUiAppDailyDataView *g_pv_AppDailyDataView = nullptr;
TjdUiAppDailyDataView::TjdUiAppDailyDataView() { g_pv_AppDailyDataView = this; }
TjdUiAppDailyDataView *TjdUiAppDailyDataView::GetInstance(void) { return g_pv_AppDailyDataView; }
TjdUiAppDailyDataView::~TjdUiAppDailyDataView()
{
static_print_info("[TjdUiAppDailyDataView]::%s", __func__);
g_pv_AppDailyDataView = nullptr;
ImageCacheManager::GetInstance().UnloadAllInMultiRes(IMAGE_ICON_BIN_PATH);
for (auto it = uiChartdataList.begin(); it != uiChartdataList.end(); ++it) {
if (*it != nullptr) {
// static_print_info("uiChartdata addr:%p", *it);
delete *it;
*it = nullptr;
}
}
for (auto it = uiChartList.begin(); it != uiChartList.end(); ++it) {
if (*it != nullptr) {
// static_print_info("uiChart addr:%p", *it);
static_cast<UIViewGroup *>((*it)->GetParent())->Remove(*it);
delete *it;
*it = nullptr;
}
}
TjdUiMemManage::DeleteChildren(containerAll_);
}
void TjdUiAppDailyDataView::OnStart()
{
static_print_info("[TjdUiAppDailyDataView]::%s", __func__);
presenter_->GetDailyDataModel()->RequestDaliyData();
presenter_->GetDailyDataModel()->LoadChartData();
presenter_->UpdatePointArray();
if (containerAll_ == nullptr) {
containerAll_ = new UIViewGroup();
containerAll_->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
containerAll_->SetStyle(STYLE_BACKGROUND_OPA, 0);
}
if (swipeContainer_ == nullptr) {
swipeContainer_ = new UISwipeViewNested(UISwipeView::VERTICAL);
swipeContainer_->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
swipeContainer_->SetViewId("swipeContainer_");
swipeContainer_->SetStyle(STYLE_BACKGROUND_OPA, 0);
if (OHOS::PageTransitionMgr::GetInstance().GetTopSlideBackImage() == nullptr) {
swipeContainer_->SetOnDragListener(presenter_);
}
// swipeContainer_->SetYScrollBarVisible();
}
swipeContainer_->Add(FirstPageViewInit());
swipeContainer_->Add(SecondPageViewInit());
swipeContainer_->Add(ThirdPageViewInit());
swipeContainer_->Add(FourthPageViewInit());
swipeContainer_->Add(FifthPageViewInit());
groupList_[DAILYDATA_SWIPE_VIEW] = swipeContainer_;
groupList_[DAILYDATA_ABOUT_VIEW] = AboutPageViewInit();
for (int i = 0; i < DAILYDATA_MAX_VIEW; i++) {
containerAll_->Add(groupList_[i]);
}
AddViewToRootContainer(containerAll_);
}
void TjdUiAppDailyDataView::OnStop() { static_print_info("[TjdUiAppDailyDataView]::%s", __func__); }
UIViewGroup *TjdUiAppDailyDataView::FirstPageViewInit(void)
{
if (swipeContainer_->GetChildById("firstPageContainer_") != nullptr) {
return static_cast<UIViewGroup *>(swipeContainer_->GetChildById("firstPageContainer_"));
}
UIViewGroup *firstPageContainer_ = new UIViewGroup();
if (firstPageContainer_ == nullptr) {
static_print_error("%s: firstPageContainer_ is nullptr", __func__);
return nullptr;
}
firstPageContainer_->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
firstPageContainer_->SetViewId("firstPageContainer_");
firstPageContainer_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);
UIImageView *iconBg_ = new UIImageView();
if (iconBg_ != nullptr) {
iconBg_->SetPosition(0, 0);
iconBg_->Resize(466, 466);
iconBg_->SetStyle(STYLE_BORDER_OPA, 0xff);
// iconBg_->SetStyle(STYLE_BORDER_WIDTH, 12);
ImageInfo *imgInfo =
ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_BJ_FIRST_PAGE, IMAGE_ICON_BIN_PATH);
if (imgInfo != nullptr) {
iconBg_->SetSrc(imgInfo);
} else {
static_print_info("%s: load image error", __func__);
}
firstPageContainer_->Add(iconBg_);
} else {
static_print_error("%s: %s is nullptr", __func__, ABOUT_ID);
}
canvas_.SetPosition(0, 0);
canvas_.Resize(466, 466);
canvas_.SetStyle(OHOS::STYLE_BACKGROUND_OPA, 0x0);
firstPageContainer_->Add(&canvas_);
UIImageView *iconTime_ = new UIImageView();
if (iconTime_ != nullptr) {
iconTime_->SetPosition(218, 10);
iconTime_->Resize(30, 30);
iconTime_->SetStyle(STYLE_BORDER_OPA, 0);
// iconTime_->SetStyle(STYLE_BORDER_WIDTH, 12);
ImageInfo *imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_FTIME, IMAGE_ICON_BIN_PATH);
if (imgInfo != nullptr) {
iconTime_->SetSrc(imgInfo);
} else {
static_print_info("%s: load image error", __func__);
}
firstPageContainer_->Add(iconTime_);
} else {
static_print_error("%s: %s is nullptr", __func__, ABOUT_ID);
}
UIImageView *iconStep_ = new UIImageView();
if (iconStep_ != nullptr) {
iconStep_->SetPosition(223, 68);
iconStep_->Resize(20, 30);
iconStep_->SetStyle(STYLE_BORDER_OPA, 0);
// iconStep_->SetStyle(STYLE_BORDER_WIDTH, 12);
ImageInfo *imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_FSTEP, IMAGE_ICON_BIN_PATH);
if (imgInfo != nullptr) {
iconStep_->SetSrc(imgInfo);
} else {
static_print_info("%s: load image error", __func__);
}
firstPageContainer_->Add(iconStep_);
} else {
static_print_error("%s: %s is nullptr", __func__, ABOUT_ID);
}
UIImageView *iconCal_ = new UIImageView();
if (iconCal_ != nullptr) {
iconCal_->SetPosition(221, 124);
iconCal_->Resize(24, 28);
iconCal_->SetStyle(STYLE_BORDER_OPA, 0);
// iconCal_->SetStyle(STYLE_BORDER_WIDTH, 12);
ImageInfo *imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_FKCAL, IMAGE_ICON_BIN_PATH);
if (imgInfo != nullptr) {
iconCal_->SetSrc(imgInfo);
} else {
static_print_info("%s: load image error", __func__);
}
firstPageContainer_->Add(iconCal_);
} else {
static_print_error("%s: %s is nullptr", __func__, ABOUT_ID);
}
return firstPageContainer_;
}
UIViewGroup *TjdUiAppDailyDataView::SecondPageViewInit(void)
{
if (swipeContainer_->GetChildById("secondPageContainer_") != nullptr) {
return static_cast<UIViewGroup *>(swipeContainer_->GetChildById("secondPageContainer_"));
}
UIViewGroup *secondPageContainer_ = new UIViewGroup();
if (secondPageContainer_ == nullptr) {
static_print_error("%s: secondPageContainer_ is nullptr", __func__);
return nullptr;
}
secondPageContainer_->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
secondPageContainer_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);
secondPageContainer_->SetViewId("secondPageContainer_");
UIImageView *image = new UIImageView();
image->SetPosition(172, 26, 26, 39);
ImageInfo *imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_STEP, IMAGE_ICON_BIN_PATH);
if (imgInfo == nullptr) {
static_print_info("%s: load image error", __func__);
}
image->SetSrc(imgInfo);
secondPageContainer_->Add(image);
UILabelExt *label1 = new UILabelExt();
if (label1 != nullptr) {
label1->SetPosition(206, 20, 82, 47);
// label1->SetText("步数");
label1->SetTextId(STR_ID_204);
label1->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
label1->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
label1->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_36);
secondPageContainer_->Add(label1);
}
UILabel *label2 = new UILabel();
if (label2 != nullptr) {
label2->SetPosition(171, 364, 121, 37);
if (presenter_->GetDailyDataModel()->GetTotalStep()) {
std::string str = std::to_string(presenter_->GetDailyDataModel()->GetTotalStep());
label2->SetText(str.c_str());
} else
label2->SetText("--");
label2->SetViewId("curStep");
label2->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
label2->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
label2->SetFont(TJD_DIN_MEDIUM_FONT_FILENAME, 50);
TjdUiUtils::AutoAlignHorizontalCenter(*(label2));
secondPageContainer_->Add(label2);
}
UILabelExt *label3 = new UILabelExt();
if (label3 != nullptr) {
label3->SetPosition(91, 375, 66, 40);
// std::string str = std::to_string(presenter_->GetDailyDataModel()->GetStepPersent()) + "%";
// label3->SetText("今天");
label3->SetTextId(STR_ID_251);
label3->SetViewId("today");
label3->SetStyle(STYLE_TEXT_COLOR, 0xFFA1A1A1);
label3->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
label3->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
label3->SetFont(TJD_VECTOR_FONT_FILENAME, 30);
secondPageContainer_->Add(label3);
}
UILabel *label4 = new UILabel();
if (label4 != nullptr) {
label4->SetPosition(299, 376, 88, 23);
label4->SetText("STEPS");
label4->SetStyle(STYLE_TEXT_COLOR, 0xFF8E8E8E);
label4->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
label4->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
label4->SetFont(TJD_VECTOR_FONT_FILENAME, 30);
secondPageContainer_->Add(label4);
}
uint32_t stepValue = stepArray.arrayStep; // 步进值
if (stepValue == 0)
stepValue = 1;
for (int i = 0; i < 4; i++) {
UILabel *label = new UILabel();
if (label != nullptr) {
label->SetPosition(398, 142 + (i * 41), 34, 17);
label->SetText(std::to_string((4 - i) * stepValue).c_str());
label->SetStyle(STYLE_TEXT_COLOR, 0xFF6D6D6D);
label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
label->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
label->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_22);
secondPageContainer_->Add(label);
}
}
UIChartPillar *uiChart = new UIChartPillar();
uiChartList.push_back(uiChart);
if (uiChart != nullptr) {
uiChart->SetPosition(80, 148);
uiChart->Resize(305, 164);
uiChart->SetViewId("uiChart");
uiChart->SetStyle(STYLE_LINE_CAP, true);
uiChart->SetStyle(STYLE_BACKGROUND_OPA, 0);
// Set additional property
UIXAxis &uiChartXAxis = uiChart->GetXAxis();
UIYAxis &uiChartYAxis = uiChart->GetYAxis();
uiChartXAxis.SetMarkNum(24);
uiChartXAxis.SetDataRange(0, 24);
uiChartXAxis.SetVisible(false);
uiChartYAxis.SetMarkNum(5);
uiChartYAxis.SetDataRange(0, 4 * stepValue);
uiChartYAxis.SetVisible(false);
UIChartDataSerial *uiChartdata = new UIChartDataSerial();
uiChartdataList.push_back(uiChartdata);
uiChartdata->SetMaxDataCount(24);
uiChartdata->AddPoints(stepArray.PointArray, 24);
uiChartdata->SetFillColor(Color::GetColorFromRGBA(0x0d, 0xeb, 0x34, 0xff));
uiChart->AddDataSerial(uiChartdata);
secondPageContainer_->Add(uiChart);
}
UIImageView *imageBg = new UIImageView();
imageBg->SetPosition(81, 146);
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_COMMON_BG, IMAGE_ICON_BIN_PATH);
if (imgInfo == nullptr) {
static_print_info("%s: load image error", __func__);
return nullptr;
}
imageBg->SetSrc(imgInfo);
secondPageContainer_->Add(imageBg);
UIImageView *imageTime = new UIImageView();
imageTime->SetPosition(59, 310);
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_BJ_TIME, IMAGE_ICON_BIN_PATH);
if (imgInfo == nullptr) {
static_print_info("%s: load image error", __func__);
return nullptr;
}
imageTime->SetSrc(imgInfo);
secondPageContainer_->Add(imageTime);
return secondPageContainer_;
}
UIViewGroup *TjdUiAppDailyDataView::ThirdPageViewInit(void)
{
if (swipeContainer_->GetChildById("thirdPageContainer_") != nullptr) {
return static_cast<UIViewGroup *>(swipeContainer_->GetChildById("thirdPageContainer_"));
}
UIViewGroup *thirdPageContainer_ = new UIViewGroup();
if (thirdPageContainer_ == nullptr) {
static_print_error("%s: thirdPageContainer_ is nullptr", __func__);
return nullptr;
}
thirdPageContainer_->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
thirdPageContainer_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);
thirdPageContainer_->SetViewId("thirdPageContainer_");
UIImageView *image = new UIImageView();
image->SetPosition(164, 24);
ImageInfo *imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_KCAL, IMAGE_ICON_BIN_PATH);
if (imgInfo == nullptr) {
static_print_info("%s: load image error", __func__);
}
image->SetSrc(imgInfo);
thirdPageContainer_->Add(image);
UILabelExt *label1 = new UILabelExt();
if (label1 != nullptr) {
label1->SetPosition(206, 20, 82, 47);
// label1->SetText("热量");
label1->SetTextId(STR_ID_230);
label1->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
label1->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
label1->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_36);
thirdPageContainer_->Add(label1);
}
UILabel *label2 = new UILabel();
if (label2 != nullptr) {
label2->SetPosition(182, 365, 98, 37);
if (presenter_->GetDailyDataModel()->GetTotalKCAL()) {
std::string str = std::to_string(presenter_->GetDailyDataModel()->GetTotalKCAL());
label2->SetText(str.c_str());
} else
label2->SetText("--");
label2->SetViewId("curKCAL");
label2->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
label2->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
label2->SetFont(TJD_DIN_MEDIUM_FONT_FILENAME, 50);
TjdUiUtils::AutoAlignHorizontalCenter(*(label2));
thirdPageContainer_->Add(label2);
}
UILabelExt *label3 = new UILabelExt();
if (label3 != nullptr) {
// std::string str = std::to_string(presenter_->GetDailyDataModel()->GetStepPersent()) + "%";
label3->SetPosition(91, 375, 66, 40);
// std::string str = std::to_string(presenter_->GetDailyDataModel()->GetStepPersent()) + "%";
// label3->SetText("今天");
label3->SetTextId(STR_ID_251);
label3->SetViewId("today");
label3->SetStyle(STYLE_TEXT_COLOR, 0xFFA1A1A1);
label3->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
label3->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
label3->SetFont(TJD_VECTOR_FONT_FILENAME, 30);
thirdPageContainer_->Add(label3);
}
UILabel *label4 = new UILabel();
if (label4 != nullptr) {
label4->SetPosition(291, 377);
label4->SetText("KCAL");
label4->SetStyle(STYLE_TEXT_COLOR, 0xFF8E8E8E);
label4->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
label4->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
label4->SetFont(TJD_VECTOR_FONT_FILENAME, 30);
thirdPageContainer_->Add(label4);
}
uint32_t stepValue = KCALArray.arrayStep; // 步进值
if (stepValue == 0)
stepValue = 1;
for (int i = 0; i < 4; i++) {
UILabel *label = new UILabel();
if (label != nullptr) {
label->SetPosition(398, 142 + (i * 41), 34, 17);
label->SetText(std::to_string((4 - i) * stepValue).c_str());
label->SetStyle(STYLE_TEXT_COLOR, 0xFF6D6D6D);
label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
label->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
label->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_22);
thirdPageContainer_->Add(label);
}
}
UIChartPillar *uiChart = new UIChartPillar();
uiChartList.push_back(uiChart);
if (uiChart != nullptr) {
uiChart->SetPosition(80, 148);
uiChart->Resize(305, 164);
uiChart->SetViewId("uiChart");
uiChart->SetStyle(STYLE_LINE_CAP, true);
uiChart->SetStyle(STYLE_BACKGROUND_OPA, 0);
// Set additional property
UIXAxis &uiChartXAxis = uiChart->GetXAxis();
UIYAxis &uiChartYAxis = uiChart->GetYAxis();
uiChartXAxis.SetMarkNum(24);
uiChartXAxis.SetDataRange(0, 24);
uiChartXAxis.SetVisible(false);
uiChartYAxis.SetMarkNum(5);
uiChartYAxis.SetDataRange(0, 4 * stepValue);
uiChartYAxis.SetVisible(false);
UIChartDataSerial *uiChartdata = new UIChartDataSerial();
uiChartdataList.push_back(uiChartdata);
uiChartdata->SetMaxDataCount(24);
uiChartdata->AddPoints(KCALArray.PointArray, 24);
uiChartdata->SetFillColor(Color::GetColorFromRGBA(0xff, 0x46, 0x11, 0xff));
uiChart->AddDataSerial(uiChartdata);
thirdPageContainer_->Add(uiChart);
}
UIImageView *imageBg = new UIImageView();
imageBg->SetPosition(81, 146);
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_COMMON_BG, IMAGE_ICON_BIN_PATH);
if (imgInfo == nullptr) {
static_print_info("%s: load image error", __func__);
return nullptr;
}
imageBg->SetSrc(imgInfo);
thirdPageContainer_->Add(imageBg);
UIImageView *imageTime = new UIImageView();
imageTime->SetPosition(59, 310);
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_BJ_TIME, IMAGE_ICON_BIN_PATH);
if (imgInfo == nullptr) {
static_print_info("%s: load image error", __func__);
return nullptr;
}
imageTime->SetSrc(imgInfo);
thirdPageContainer_->Add(imageTime);
return thirdPageContainer_;
}
UIViewGroup *TjdUiAppDailyDataView::FourthPageViewInit(void)
{
if (swipeContainer_->GetChildById("fourthPageContainer_") != nullptr) {
return static_cast<UIViewGroup *>(swipeContainer_->GetChildById("fourthPageContainer_"));
}
UIViewGroup *fourthPageContainer_ = new UIViewGroup();
if (fourthPageContainer_ == nullptr) {
static_print_error("%s: fourthPageContainer_ is nullptr", __func__);
return nullptr;
}
fourthPageContainer_->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
fourthPageContainer_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);
fourthPageContainer_->SetViewId("fourthPageContainer_");
UIImageView *image = new UIImageView();
image->SetPosition(136, 26);
ImageInfo *imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_TIME, IMAGE_ICON_BIN_PATH);
if (imgInfo == nullptr) {
static_print_info("%s: load image error", __func__);
}
image->SetSrc(imgInfo);
fourthPageContainer_->Add(image);
UILabelExt *label1 = new UILabelExt();
if (label1 != nullptr) {
label1->SetPosition(183, 20, 144, 47);
// label1->SetText("中高强度");
label1->SetTextId(STR_ID_231);
label1->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
label1->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
label1->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_36);
fourthPageContainer_->Add(label1);
}
UILabel *label2 = new UILabel();
if (label2 != nullptr) {
label2->SetPosition(188, 364, 86, 37);
if (presenter_->GetDailyDataModel()->GetTotalTime()) {
std::string str = std::to_string(presenter_->GetDailyDataModel()->GetTotalTime());
label2->SetText(str.c_str());
} else
label2->SetText("--");
label2->SetViewId("curTime");
label2->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
label2->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
label2->SetFont(TJD_DIN_MEDIUM_FONT_FILENAME, 50);
TjdUiUtils::AutoAlignHorizontalCenter(*(label2));
fourthPageContainer_->Add(label2);
}
UILabelExt *label3 = new UILabelExt();
if (label3 != nullptr) {
// std::string str = std::to_string(presenter_->GetDailyDataModel()->GetStepPersent()) + "%";
label3->SetPosition(91, 375, 66, 40);
// std::string str = std::to_string(presenter_->GetDailyDataModel()->GetStepPersent()) + "%";
// label3->SetText("今天");
label3->SetTextId(STR_ID_251);
label3->SetViewId("today");
label3->SetStyle(STYLE_TEXT_COLOR, 0xFFA1A1A1);
label3->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
label3->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
label3->SetFont(TJD_VECTOR_FONT_FILENAME, 30);
fourthPageContainer_->Add(label3);
}
UILabel *label4 = new UILabel();
if (label4 != nullptr) {
label4->SetPosition(292, 379);
label4->SetText("MIN");
label4->SetStyle(STYLE_TEXT_COLOR, 0xFF8E8E8E);
label4->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
label4->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
label4->SetFont(TJD_VECTOR_FONT_FILENAME, 30);
fourthPageContainer_->Add(label4);
}
uint32_t stepValue = exerTimeArray.arrayStep; // 步进值
if (stepValue == 0)
stepValue = 25;
for (int i = 0; i < 4; i++) {
UILabel *label = new UILabel();
if (label != nullptr) {
label->SetPosition(398, 142 + (i * 41), 34, 17);
label->SetText(std::to_string((4 - i) * stepValue).c_str());
label->SetStyle(STYLE_TEXT_COLOR, 0xFF6D6D6D);
label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
label->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
label->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_22);
fourthPageContainer_->Add(label);
}
}
UIChartPillar *uiChart = new UIChartPillar();
uiChartList.push_back(uiChart);
if (uiChart != nullptr) {
uiChart->SetPosition(80, 148);
uiChart->Resize(305, 164);
uiChart->SetViewId("uiChart");
uiChart->SetStyle(STYLE_LINE_CAP, true);
uiChart->SetStyle(STYLE_BACKGROUND_OPA, 0);
// Set additional property
UIXAxis &uiChartXAxis = uiChart->GetXAxis();
UIYAxis &uiChartYAxis = uiChart->GetYAxis();
uiChartXAxis.SetMarkNum(24);
uiChartXAxis.SetDataRange(0, 24);
uiChartXAxis.SetVisible(false);
uiChartYAxis.SetMarkNum(5);
uiChartYAxis.SetDataRange(0, 4 * stepValue);
uiChartYAxis.SetVisible(false);
UIChartDataSerial *uiChartdata = new UIChartDataSerial();
uiChartdataList.push_back(uiChartdata);
uiChartdata->SetMaxDataCount(24);
uiChartdata->AddPoints(exerTimeArray.PointArray, 24);
uiChartdata->SetFillColor(Color::GetColorFromRGBA(0xff, 0xd5, 0x22, 0xff));
uiChart->AddDataSerial(uiChartdata);
fourthPageContainer_->Add(uiChart);
}
UIImageView *imageBg = new UIImageView();
imageBg->SetPosition(81, 146);
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_COMMON_BG, IMAGE_ICON_BIN_PATH);
if (imgInfo == nullptr) {
static_print_info("%s: load image error", __func__);
return nullptr;
}
imageBg->SetSrc(imgInfo);
fourthPageContainer_->Add(imageBg);
UIImageView *imageTime = new UIImageView();
imageTime->SetPosition(59, 310);
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_BJ_TIME, IMAGE_ICON_BIN_PATH);
if (imgInfo == nullptr) {
static_print_info("%s: load image error", __func__);
return nullptr;
}
imageTime->SetSrc(imgInfo);
fourthPageContainer_->Add(imageTime);
return fourthPageContainer_;
}
UIViewGroup *TjdUiAppDailyDataView::FifthPageViewInit(void)
{
if (swipeContainer_->GetChildById("fifthPageContainer_") != nullptr) {
return static_cast<UIViewGroup *>(swipeContainer_->GetChildById("fifthPageContainer_"));
}
UIViewGroup *fifthPageContainer_ = new UIViewGroup();
if (fifthPageContainer_ == nullptr) {
static_print_error("%s: fifthPageContainer_ is nullptr", __func__);
return nullptr;
}
fifthPageContainer_->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
fifthPageContainer_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);
fifthPageContainer_->SetViewId("fifthPageContainer_");
UIImageView *image = new UIImageView();
image->SetPosition(167, 22);
ImageInfo *imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_DISTANCE, IMAGE_ICON_BIN_PATH);
if (imgInfo == nullptr) {
static_print_info("%s: load image error", __func__);
}
image->SetSrc(imgInfo);
fifthPageContainer_->Add(image);
UILabelExt *label1 = new UILabelExt();
if (label1 != nullptr) {
label1->SetPosition(208, 20, 97, 37);
// label1->SetText("里程");
label1->SetTextId(STR_ID_556);
label1->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
label1->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
label1->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_28);
fifthPageContainer_->Add(label1);
}
UILabel *label2 = new UILabel();
if (label2 != nullptr) {
label2->SetPosition(202, 364, 60, 37);
//转换m->km,显示小数点一位
float value = presenter_->GetDailyDataModel()->GetTotalDistance() / 1000.0f;
if (value > 0) {
std::ostringstream oss;
oss << std::fixed << std::setprecision(1) << value;
std::string formattedText = oss.str();
label2->SetText(formattedText.c_str());
} else
label2->SetText("--");
label2->SetViewId("curDistance");
label2->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
label2->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
label2->SetFont(TJD_DIN_MEDIUM_FONT_FILENAME, 50);
TjdUiUtils::AutoAlignHorizontalCenter(*(label2));
fifthPageContainer_->Add(label2);
}
UILabelExt *label3 = new UILabelExt();
if (label3 != nullptr) {
// std::string str = std::to_string(presenter_->GetDailyDataModel()->GetStepPersent()) + "%";
label3->SetPosition(91, 375, 66, 40);
// label3->SetText("今天");
label3->SetTextId(STR_ID_251);
label3->SetViewId("today");
label3->SetStyle(STYLE_TEXT_COLOR, 0xFFA1A1A1);
label3->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
label3->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
label3->SetFont(TJD_VECTOR_FONT_FILENAME, 30);
fifthPageContainer_->Add(label3);
}
UILabel *label4 = new UILabel();
if (label4 != nullptr) {
label4->SetPosition(279, 379);
label4->SetText("KM");
label4->SetStyle(STYLE_TEXT_COLOR, 0xFF8E8E8E);
label4->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
label4->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
label4->SetFont(TJD_VECTOR_FONT_FILENAME, 30);
fifthPageContainer_->Add(label4);
}
UIChartPillar *uiChart = new UIChartPillar();
uiChartList.push_back(uiChart);
if (uiChart != nullptr) {
uiChart->SetPosition(80, 148);
uiChart->Resize(305, 164);
uiChart->SetViewId("uiChart");
uiChart->SetStyle(STYLE_LINE_CAP, true);
uiChart->SetStyle(STYLE_BACKGROUND_OPA, 0);
// Set additional property
UIXAxis &uiChartXAxis = uiChart->GetXAxis();
UIYAxis &uiChartYAxis = uiChart->GetYAxis();
uiChartXAxis.SetMarkNum(24);
uiChartXAxis.SetDataRange(0, 24);
uiChartXAxis.SetVisible(false);
uiChartYAxis.SetMarkNum(5);
if (distanceArray.arrayMax <= 4000)
uiChartYAxis.SetDataRange(0, 4000);
else
uiChartYAxis.SetDataRange(0, ((distanceArray.arrayMax) / 1000 + 1) * 1000);
uiChartYAxis.SetVisible(false);
UIChartDataSerial *uiChartdata = new UIChartDataSerial();
uiChartdataList.push_back(uiChartdata);
uiChartdata->SetMaxDataCount(24);
uiChartdata->AddPoints(distanceArray.PointArray, 24);
uiChartdata->SetFillColor(Color::GetColorFromRGBA(0x37, 0x8b, 0xff, 0xff));
uiChart->AddDataSerial(uiChartdata);
fifthPageContainer_->Add(uiChart);
}
UIImageView *imageBg = new UIImageView();
imageBg->SetPosition(81, 146);
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_COMMON_BG, IMAGE_ICON_BIN_PATH);
if (imgInfo == nullptr) {
static_print_info("%s: load image error", __func__);
return nullptr;
}
imageBg->SetSrc(imgInfo);
fifthPageContainer_->Add(imageBg);
UIImageView *imageTime = new UIImageView();
imageTime->SetPosition(59, 310);
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_ICON_BJ_TIME, IMAGE_ICON_BIN_PATH);
if (imgInfo == nullptr) {
static_print_info("%s: load image error", __func__);
return nullptr;
}
imageTime->SetSrc(imgInfo);
fifthPageContainer_->Add(imageTime);
uint32_t stepValue = (distanceArray.arrayStep) / 1000; // 步进值,单位换算m -> km
if (stepValue == 0)
stepValue = 1;
for (int i = 0; i < 4; i++) {
UILabel *label = new UILabel();
if (label != nullptr) {
label->SetPosition(398, 142 + (i * 41), 34, 17);
label->SetText(std::to_string((4 - i) * stepValue).c_str());
label->SetStyle(STYLE_TEXT_COLOR, 0xFF6D6D6D);
label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
label->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
label->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_22);
fifthPageContainer_->Add(label);
}
}
return fifthPageContainer_;
}
UIScrollView *TjdUiAppDailyDataView::AboutPageViewInit(void)
{
UIScrollView *AboutPageView = new UIScrollView();
if (AboutPageView == nullptr) {
static_print_error("%s: AboutPageView is nullptr", __func__);
return nullptr;
}
AboutPageView->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
AboutPageView->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);
AboutPageView->SetVisible(false);
AboutPageView->SetOnDragListener(presenter_);
UILabel *label1 = new UILabel();
if (label1 != nullptr) {
label1->SetPosition(100, 17, 266, 32);
label1->SetText("关于");
label1->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
label1->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
label1->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_28);
AboutPageView->Add(label1);
}
UILabel *label2 = new UILabel();
if (label2 != nullptr) {
label2->SetPosition(27, 130, 412, 200);
label2->SetText(about_txt);
label2->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
label2->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
label2->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_28);
AboutPageView->Add(label2);
}
return AboutPageView;
}
uint8_t TjdUiAppDailyDataView::GetSwipeCurIndex(void)
{
if (swipeContainer_ != nullptr) {
return swipeContainer_->GetCurrentPage();
}
return 0;
}
void TjdUiAppDailyDataView::ChangedView(DailyDataView view, DailyDataView hideView)
{
if (view >= DAILYDATA_MAX_VIEW || viewMapper_[view] == nullptr) {
return;
}
(GetInstance()->*viewMapper_[view])(hideView);
}
bool TjdUiAppDailyDataView::ShowSwipeView(DailyDataView hideView)
{
if (groupList_[hideView] == nullptr) {
static_print_error("%s: groupList_ is nullptr", __func__);
return false;
}
groupList_[hideView]->SetVisible(false);
if (swipeContainer_) {
swipeContainer_->RequestFocus();
swipeContainer_->SetRotateFactor(1.0);
}
if (groupList_[DailyDataView::DAILYDATA_SWIPE_VIEW] == nullptr) {
static_print_error("%s: groupList_ is nullptr", __func__);
return false;
}
groupList_[DailyDataView::DAILYDATA_SWIPE_VIEW]->SetVisible(true);
groupList_[DailyDataView::DAILYDATA_SWIPE_VIEW]->Invalidate();
return true;
}
bool TjdUiAppDailyDataView::ShowAboutView(DailyDataView hideView)
{
if (groupList_[hideView] == nullptr) {
static_print_error("%s: groupList_ is nullptr", __func__);
return false;
}
groupList_[hideView]->SetVisible(false);
if (hideView == DAILYDATA_SWIPE_VIEW && swipeContainer_) {
swipeContainer_->ClearFocus();
}
if (groupList_[DailyDataView::DAILYDATA_ABOUT_VIEW] == nullptr) {
static_print_error("%s: groupList_ is nullptr", __func__);
return false;
}
groupList_[DailyDataView::DAILYDATA_ABOUT_VIEW]->SetVisible(true);
groupList_[DailyDataView::DAILYDATA_ABOUT_VIEW]->Invalidate();
return true;
}
void TjdUiAppDailyDataView::UpdateFirstPage(void)
{
auto timeEndAngle = presenter_->GetDailyDataModel()->GetTimePersent() * 360 / 100;
auto stepEndAngle = presenter_->GetDailyDataModel()->GetStepPersent() * 360 / 100;
auto calEndAngle = presenter_->GetDailyDataModel()->GetKCALPersent() * 360 / 100;
PaintExt paint;
paint.SetStyle(Paint::STROKE_STYLE);
paint.SetStrokeColor((ColorType){.full = 0xFF0e7dff});
// paint.SetFillColor((ColorType){.full = 0xFF0e7dff});
paint.SetCapType(CAP_ROUND);
// paint.SetGradientSpread(GradientSpread::SPREAD_REFLECT);
canvas_.Clear();
paint.SetStrokeWidth(50);
if (timeEndAngle)
canvas_.DrawArc({233, 233}, 208, 0, timeEndAngle, paint); // 10, 0, 90: radius, startAngle, endAngle
paint.SetStrokeColor((ColorType){.full = 0xFF0CC54F});
if (stepEndAngle)
canvas_.DrawArc({233, 233}, 152, 0, stepEndAngle, paint); // 10, 0, 90: radius, startAngle, endAngle
paint.SetStrokeColor((ColorType){.full = 0xFFFF8200});
if (calEndAngle)
canvas_.DrawArc({233, 233}, 96, 0, calEndAngle, paint); // 10, 0, 90: radius, startAngle, endAngle
}
DDPointArray *TjdUiAppDailyDataView::GetPointArray(const char *id)
{
if (std::string(id) == STEP_ID) {
return &stepArray;
} else if (std::string(id) == CALORIE_ID) {
return &KCALArray;
} else if (std::string(id) == SPORTTIME_ID) {
return &exerTimeArray;
} else if (std::string(id) == DISTANCE_ID) {
return &distanceArray;
}
static_print_error("has no such array that id is %s", id);
return nullptr;
}
} // namespace TJD