#include "weather/include/MainWeatherView.h"\r
#include "weather/include/MainWeatherPresenter.h"\r
-#include "UiConfig.h"\r
-/*\r
-当至天气界面时,主动获取最新天气数据。\r
-(此操作静默将进行,获取到则立刻更新显示,获取不到则重试\r
-重试3次无果结束更新)\r
-在加载该视图时,需要加载:1时间,2天气图片,3温度,4天气描述,5,地点,6,温度范围\r
-*/\r
-\r
namespace OHOS\r
{\r
- static ImageAnimatorInfo g_imageAnimator1Info[2] = {\r
- {PNG_ANIMATOR1_IMAGE, {213, 400}, 40, 40, IMG_SRC_FILE_PATH},\r
- {PNG_ANIMATOR2_IMAGE, {213, 400}, 40, 40, IMG_SRC_FILE_PATH},\r
- };\r
static MainWeatherView *g_pMainWeatherView{nullptr};\r
-\r
MainWeatherView::MainWeatherView()\r
{\r
- Time = GetTime();\r
- WeatherImag = GetWeatherImage();\r
- Temperature = GetWeatherTemperature();\r
- WeatherDescription = GetWeatherDescription();\r
- WeatherArea = GetWeatherArea();\r
- MaxandMinTemperature = GetWeatherMaxAndMinTemperature();\r
g_pMainWeatherView = this;\r
}\r
\r
MainWeatherView::~MainWeatherView()\r
{\r
- if (viewInitStatus == true)\r
- {\r
- DeInitView();\r
- }\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainWeatherView::~MainWeatherView");\r
+ RootView::GetInstance()->Remove(weatherView);\r
+ delete weatherView;\r
+ weatherView = nullptr;\r
g_pMainWeatherView = nullptr;\r
}\r
\r
- MainWeatherView *MainWeatherView::GetInstance()\r
- {\r
- return g_pMainWeatherView;\r
- }\r
-\r
- // 获取时间\r
- std::string MainWeatherView::GetTime()\r
- {\r
- srand(time(0));\r
- std::string area[] = {"23:54", "12:00", "7:25"};\r
- int num = rand() % (sizeof(area) / sizeof(area[0]));\r
- return area[1];\r
- }\r
-\r
- // 获取天气图片\r
- std::string MainWeatherView::GetWeatherImage()\r
- {\r
- int size = sizeof(weather130x130) / sizeof(weather130x130[0]);\r
- return weather130x130[8];\r
- }\r
- // 获取温度\r
-\r
- std::string MainWeatherView::GetWeatherTemperature()\r
- {\r
- // 使用系统时间作为种子\r
- srand(time(0));\r
- int temperature = rand() % 50;\r
- return std::to_string(22) + "°";\r
- }\r
- // 获取天气描述\r
-\r
- std::string MainWeatherView::GetWeatherDescription()\r
- {\r
- srand(time(0));\r
- std::string area[] = {"晴", "雨夹雪", "雷阵雨伴有冰雹"};\r
- int num = rand() % (sizeof(area) / sizeof(area[0]));\r
- return area[0];\r
- }\r
- // 获取天气地区\r
-\r
- std::string MainWeatherView::GetWeatherArea()\r
- {\r
- srand(time(0));\r
- std::string area[] = {"北京市东城区", "深圳市保安区"};\r
- int num = rand() % (sizeof(area) / sizeof(area[0]));\r
- return area[1];\r
- }\r
- // 获取最高气温和最低气温\r
-\r
- std::string MainWeatherView::GetWeatherMaxAndMinTemperature()\r
- {\r
- // 使用系统时间作为种子\r
- srand(time(0));\r
- // 生成随机数\r
- int maxtemperature = 20 + rand() % 40; // 最高气温:20°~60°\r
- int mintemperature = -5 + rand() % 20;\r
- std::string MaxandMinTemperature = "最高" + std::to_string(22) + "°" + " " + "最低" + std::to_string(18) + "°";\r
- return MaxandMinTemperature;\r
- }\r
-\r
- // 初始化标签\r
- UILabel *MainWeatherView::InitLabel(int x, int y, const char *text, const char *id, int textfont, int lineheight)\r
- {\r
- UILabel *label = new UILabel();\r
- label->SetPosition(x, y);\r
- label->Resize(200, 30);\r
- label->SetViewId(id);\r
- label->SetStyle(STYLE_TEXT_FONT, textfont);\r
- label->SetStyle(STYLE_LINE_HEIGHT, lineheight);\r
- label->SetText(text);\r
- label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
- label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
- label->SetRollSpeed(0);\r
- label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, textfont);\r
- label->SetVisible(true);\r
- return label;\r
- }\r
-\r
- void MainWeatherView::InitView(void)\r
+ void MainWeatherView::OnStart()\r
{\r
- if (container_ == nullptr)\r
+ View<MainWeatherPresenter>::OnStart();\r
+ weatherView = new WeatherView();\r
+ if (weatherView == nullptr)\r
{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainWeatherView::new weatherView fail!");\r
return;\r
}\r
- // Add ScrollView to App\r
- if (scrollView1_ == nullptr)\r
- {\r
- scrollView1_ = new UIScrollView();\r
- }\r
- scrollView1_->SetPosition(0, 0);\r
- scrollView1_->Resize(466, 466);\r
- scrollView1_->SetViewId("scrollView1");\r
- scrollView1_->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
- scrollView1_->SetVerticalScrollState(false); // 设置纵向是否可滚动。\r
- scrollView1_->SetHorizontalScrollState(false); // 设置横向是否可滚动。\r
- container_->Add(scrollView1_);\r
- scrollView1_->SetVisible(true);\r
- /* -------------------------------------------------------------------------- */\r
- if (image1_ == nullptr)\r
- {\r
- image1_ = new UIImageView();\r
- }\r
- image1_->SetPosition(109, 124);\r
- image1_->Resize(100, 100);\r
- image1_->SetViewId("image1");\r
- image1_->SetSrc(WeatherImag.c_str());\r
- scrollView1_->Add(image1_);\r
- image1_->SetVisible(true);\r
- /* -------------------------------------------------------------------------- */\r
- label1_ = InitLabel(185, 52, Time.c_str(), "label1", 40, 47);\r
- scrollView1_->Add(label1_);\r
- /* -------------------------------------------------------------------------- */\r
- label2_ = InitLabel(249, 126, Temperature.c_str(), "label2", 100, 125);\r
- scrollView1_->Add(label2_);\r
- /* -------------------------------------------------------------------------- */\r
- showWeatherDescriptionLabel = new UILabel();\r
- if (showWeatherDescriptionLabel == nullptr)\r
- {\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::new showWeatherDescriptionLabel fail!");\r
- return ;\r
- }\r
- showWeatherDescriptionLabel->SetPosition(83, 264,300,40);\r
- showWeatherDescriptionLabel->SetViewId("showWeatherDescriptionLabel");\r
- showWeatherDescriptionLabel->SetStyle(STYLE_TEXT_FONT, 35);\r
- showWeatherDescriptionLabel->SetStyle(STYLE_LINE_HEIGHT, 41);\r
- showWeatherDescriptionLabel->SetText(WeatherDescription.c_str());\r
- showWeatherDescriptionLabel->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);\r
- showWeatherDescriptionLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
- showWeatherDescriptionLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 35);\r
- scrollView1_->Add(showWeatherDescriptionLabel);\r
- /* -------------------------------------------------------------------------- */\r
- label4_ = InitLabel(155, 330, WeatherArea.c_str(), "label4", 26, 30);\r
- label4_->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff));\r
- scrollView1_->Add(label4_);\r
- /* -------------------------------------------------------------------------- */\r
- label5_ = InitLabel(158, 368, MaxandMinTemperature.c_str(), "label5", 20, 23);\r
- label5_->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff));\r
- scrollView1_->Add(label5_);\r
- /* -------------------------------------------------------------------------- */\r
- #if 0\r
- // Add ImageAnimatorView to App\r
- if (imageAnimator1_ == nullptr)\r
+ UIView::OnDragListener *weatherDragListener = (UIView::OnDragListener *)OHOS::MainWeatherPresenter::GetInstance();\r
+ if (weatherDragListener == nullptr)\r
{\r
- imageAnimator1_ = new UIImageAnimatorView();\r
- }\r
- imageAnimator1_->SetPosition(213, 400);\r
- imageAnimator1_->Resize(40, 40);\r
- imageAnimator1_->SetViewId("imageAnimator1");\r
- imageAnimator1_->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
-\r
- // Set additional property\r
- imageAnimator1_->SetImageAnimatorSrc(g_imageAnimator1Info, 2, 200);\r
- imageAnimator1_->SetTimeOfPause(200);\r
- imageAnimator1_->SetRepeatTimes(1);\r
- imageAnimator1_->SetReverse(true);\r
- imageAnimator1_->Start();\r
-\r
- // Add to scrollView1\r
- scrollView1_->Add(imageAnimator1_);\r
- imageAnimator1_->SetVisible(true);\r
- #endif\r
- }\r
-\r
- void MainWeatherView::DeInitView()\r
- {\r
- container_->RemoveAll();\r
- scrollView1_->RemoveAll();\r
- if (label1_ != nullptr)\r
- {\r
- delete label1_;\r
- label1_ = nullptr;\r
- }\r
- if (label2_ != nullptr)\r
- {\r
- delete label2_;\r
- label2_ = nullptr;\r
- }\r
- if (image1_ != nullptr)\r
- {\r
- delete image1_;\r
- image1_ = nullptr;\r
- }\r
- if (showWeatherDescriptionLabel != nullptr)\r
- {\r
- delete showWeatherDescriptionLabel;\r
- showWeatherDescriptionLabel = nullptr;\r
- }\r
- if (label4_ != nullptr)\r
- {\r
- delete label4_;\r
- label4_ = nullptr;\r
- }\r
- if (label5_ != nullptr)\r
- {\r
- delete label5_;\r
- label5_ = nullptr;\r
- }\r
- if (imageAnimator1_ != nullptr)\r
- {\r
- imageAnimator1_->Stop(); // 视图退出后动画停止\r
- delete imageAnimator1_;\r
- imageAnimator1_ = nullptr;\r
- }\r
- if (scrollView1_ != nullptr)\r
- {\r
- delete scrollView1_;\r
- scrollView1_ = nullptr;\r
- }\r
- if (container_ != nullptr)\r
- {\r
- delete container_;\r
- container_ = nullptr;\r
- }\r
- }\r
-\r
- void MainWeatherView::PreLoad(void)\r
- {\r
- if (!viewInitStatus)\r
- {\r
- InitView();\r
- viewInitStatus = true;\r
- }\r
- }\r
- void MainWeatherView::OnStart()\r
- {\r
- View<MainWeatherPresenter>::OnStart();\r
- if (container_ == nullptr)\r
- {\r
- container_ = new UIViewGroup();\r
- container_->Resize(466, 466);\r
- container_->SetTouchable(true);\r
- container_->SetDraggable(true);\r
- UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(MainWeatherPresenter::GetInstance());\r
- container_->SetOnDragListener(draglistener);\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "weatherDragListener new fail");\r
+ return;\r
}\r
- PreLoad();\r
- RootView::GetInstance()->Add(container_);\r
+ weatherView->SetOnDragListener(weatherDragListener);\r
+ weatherView->InitView();\r
+ RootView::GetInstance()->Add(weatherView);\r
// 增加按键监听\r
RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::MainWeatherPresenter::GetInstance();\r
RootView::GetInstance()->SetOnKeyActListener(keyactListener);\r