${CMAKE_CURRENT_SOURCE_DIR}/nativeui/config/src/ConfigModel.cpp
+ #天气
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/MainWeatherPresenter.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/MainWeatherView.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/WeatherReportPresenter.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/WeatherReportView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/FutureWeatherPresenter.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/FutureWeatherView.cpp
VIEW_INDOORWALK, // 室内步行
VIEW_SHUTDOWN_OR_REBOOT, // 关机或重启界面
VIEW_WEATHER, // 天气
- VIEW_WEATHER_REPORT, // 气象报告
VIEW_FUTURE_WEATHER, // 未来天气
VIEW_GET_WEATHER_DATA_ERROR, // 获取天气数据失败
VIEW_SYSTEM, // 系统
void InitRecordingSlice(void);
/* ----------------------------------- 天气 ----------------------------------- */
void InitWeatherSlice(void);
- void InitWeatherReportSlice(void);
void InitFutureWeatherSlice(void);
void InitGetWeatherDataErrorSlice(void);
/* -------------------------------------------------------------------------- */
#include "weather/include/MainWeatherPresenter.h"
#include "weather/include/MainWeatherView.h"
-#include "weather/include/WeatherReportPresenter.h"
-#include "weather/include/WeatherReportView.h"
#include "weather/include/FutureWeatherPresenter.h"
#include "weather/include/FutureWeatherView.h"
#include "weather/include/GetWeatherDataErrorPresenter.h"
{VIEW_INDOORWALK, &NativeLauncher::InitIndoorWalkSlice},
{VIEW_SHUTDOWN_OR_REBOOT, &NativeLauncher::InitRebootSlice},
{VIEW_WEATHER, &NativeLauncher::InitWeatherSlice}, // 天气
- {VIEW_WEATHER_REPORT, &NativeLauncher::InitWeatherReportSlice}, // 气象报告
{VIEW_FUTURE_WEATHER, &NativeLauncher::InitFutureWeatherSlice}, // 未来天气
{VIEW_GET_WEATHER_DATA_ERROR, &NativeLauncher::InitGetWeatherDataErrorSlice}, // 获取天气数据失败
{VIEW_SYSTEM, &NativeLauncher::InitSystemSlice}, // 系统实例化地址
NativeAbility::GetInstance().AddSliceProxy(VIEW_WEATHER, mainweather);
}
- void NativeLauncher::InitWeatherReportSlice(void) // 气象报告
- {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitWeatherReportSlice");
- SliceProxy *weatherreport = new AbilitySliceProxy<WeatherReportView, WeatherReportPresenter>;
- if (weatherreport == nullptr)
- {
- return;
- }
- NativeAbility::GetInstance().AddSliceProxy(VIEW_WEATHER_REPORT, weatherreport);
- }
-
void NativeLauncher::InitFutureWeatherSlice(void) // 未来天气
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitFutureWeatherSlice");
#include <filesystem>
#include "../../../../../../open_source/openharmony/third_party/cJSON/cJSON.h"
#include "wearable_log.h"
-
+#include "components/ui_image_animator.h"
namespace OHOS
{
class ConfigModel
}
}
}
+ /* ------------------------------ ImageAnimator ----------------------------- */
+ /*
+ * 图片动画类
+ */
+ class ImageAnimator
+ {
+ public:
+ struct ImageAnimatorConfig
+ {
+ int16_t x;
+ int16_t y;
+ int16_t w;
+ int16_t h;
+
+ int numFrames;
+ int time;
+ } imageAnimatorConfig;
+ // 构造函数
+ ImageAnimator();
+ // 析构函数
+ ~ImageAnimator();
+ const char **CreateImagePathsArray(const char *basePath, const char *fileExtension, int numImages);
+
+ void InitImageAnimatorSource(UIImageAnimatorView *&imageAnimator, ImageAnimatorInfo *&imageAnimatorInfo, const char **imagePaths, const ImageAnimatorConfig &imageAnimatorConfig);
+
+ void FreeImagePathsArray(const char **imagePaths, const int numImages);
+
+ };
}
#endif
\ No newline at end of file
{
return HeartRateOrBloodOxygenQuickAccessSwitch;
}
+
+ /* ------------------------------ ImageAnimator ----------------------------- */
+
+ ImageAnimator::ImageAnimator()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ImageAnimator::ImageAnimator");
+ }
+
+ ImageAnimator::~ImageAnimator()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ImageAnimator::~ImageAnimator");
+ }
+
+ /*
+ * @brief 创建并初始化图像路径数组
+ * @param basePath 包含图片文件的基本路径
+ * @param fileExtension 图片文件的扩展名
+ * @param numImages 图片文件的数量
+ * @return 返回包含图片文件路径的数组
+ */
+ const char **ImageAnimator::CreateImagePathsArray(const char *basePath, const char *fileExtension, int numImages)
+ {
+ const char **imagePaths = new const char *[numImages];
+ char buffer[256];
+ for (int i = 0; i < numImages; i++)
+ {
+ snprintf(buffer, sizeof(buffer), "%s%d.%s", basePath, i + 1, fileExtension);
+ imagePaths[i] = strdup(buffer);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " imagePaths[%d] = %s", i, imagePaths[i]);
+ }
+ return imagePaths;
+ }
+
+ /*
+ * @brief 初始化UIImageAnimatorView,并设置为GIF动画
+ * 该函数用于使用提供的GIF图像和属性初始化UIImageAnimatorView
+ * @param imageAnimator 要初始化的UIImageAnimatorView对象的引用
+ * @param imagePaths 图片路径
+ * @param imageAnimatorInfo 图片映像的信息
+ * @param imageAnimatorConfig 样式配置信息
+ */
+ void ImageAnimator::InitImageAnimatorSource(UIImageAnimatorView *&imageAnimator, ImageAnimatorInfo *&imageAnimatorInfo, const char **imagePaths, const ImageAnimatorConfig &imageAnimatorConfig)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ImageAnimator::InitImageAnimatorSource");
+
+ if (imageAnimator == nullptr)
+ {
+ imageAnimator = new UIImageAnimatorView();
+ }
+ imageAnimator->SetPosition(imageAnimatorConfig.x, imageAnimatorConfig.y, imageAnimatorConfig.w, imageAnimatorConfig.h);
+ imageAnimator->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);
+ imageAnimator->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+
+ imageAnimatorInfo = new ImageAnimatorInfo[imageAnimatorConfig.numFrames];
+ for (int i = 0; i < imageAnimatorConfig.numFrames; i++)
+ {
+ imageAnimatorInfo[i].imagePath = imagePaths[i];
+ imageAnimatorInfo[i].pos.x = imageAnimatorConfig.x;
+ imageAnimatorInfo[i].pos.y = imageAnimatorConfig.y;
+ imageAnimatorInfo[i].width = imageAnimatorConfig.w;
+ imageAnimatorInfo[i].height = imageAnimatorConfig.h;
+ imageAnimatorInfo[i].imageType = IMG_SRC_FILE_PATH;
+ }
+
+ imageAnimator->SetImageAnimatorSrc(imageAnimatorInfo, imageAnimatorConfig.numFrames, imageAnimatorConfig.time); // 200 is the default delay time
+ imageAnimator->SetTimeOfPause(imageAnimatorConfig.time);
+ imageAnimator->SetRepeat(true);
+ }
+ /*
+ * 释放图片文件路径数组占用的内存
+ * @param imagePaths 图片文件路径数组
+ * @param numImages 图片文件的数量
+ */
+ void ImageAnimator::FreeImagePathsArray(const char **imagePaths, const int numImages)
+ {
+ for (int i = 0; i < numImages; i++)
+ {
+ free((void *)imagePaths[i]);
+ }
+ delete[] imagePaths;
+ }
}
\ No newline at end of file
/*主天气视图*/\r
namespace OHOS\r
{\r
+ static constexpr const char *MAIN_WEATHER_VIEW = "MainWeatherview";\r
class MainWeatherView;\r
class MainWeatherPresenter : public Presenter<MainWeatherView>,\r
public UIView::OnClickListener,\r
public RootView::OnKeyActListener,\r
- public UIView::OnDragListener\r
+ public UIView::OnDragListener,\r
+ public UISwipeView::OnSwipeListener\r
{\r
public:\r
MainWeatherPresenter();\r
// 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;\r
bool OnClick(UIView &view, const ClickEvent &event) override;\r
bool OnDrag(UIView &view, const DragEvent &event) override;\r
+ bool OnDragEnd(UIView &view, const DragEvent &event) override;\r
bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件\r
+ void OnSwipe(UISwipeView& view) override;\r
};\r
} // namespace OHOS\r
\r
\r
#include "BaseView.h"\r
#include "View.h"\r
-#include "weather/include/WeatherView.h"\r
+#include "components/ui_swipe_view.h"\r
\r
+#include "weather/include/WeatherView.h"\r
+#include "weather/include/WeatherReportView.h"\r
namespace OHOS\r
{\r
+ typedef enum\r
+ {\r
+ MAINWEATHERVIEW = 0, // 主天气视图\r
+ WEATHERREPORTVIEW, // 气象报告视图\r
+ // FUTUREWEATHERVIEW, // 未来七天天气视图\r
+ MAX_WEATHERVIEW,\r
+ } WeatherPageId;\r
+\r
class MainWeatherPresenter;\r
class MainWeatherView : public View<MainWeatherPresenter>\r
{\r
MainWeatherView();\r
virtual ~MainWeatherView();\r
static MainWeatherView *GetInstance(void);\r
+ UIViewGroup *MainWeatherViewInit(void);\r
+ void ClearAll(void);\r
+ AppGroupView *WeatherViewPageInit(void);\r
+ AppGroupView *WeatherReportViewPageInit(void);\r
+ WeatherView * GetWeatherView(void);\r
+ WeatherReportView *GetWeatherReportView(void);\r
\r
+ public:\r
void OnStart() override;\r
void OnSetUpView() override;\r
void OnTearDownView() override;\r
void OnStop() override;\r
\r
private:\r
- WeatherView * weatherView{nullptr};\r
+ WeatherView *weatherView{nullptr};\r
+ WeatherReportView *weatherReportView{nullptr};\r
+\r
+ private:\r
+ int16_t maxPage = MAX_WEATHERVIEW;\r
+ UISwipeView *weatherSwipeViewList{nullptr}; // 天气滑动视图列表\r
+ AppGroupView *recordCard[MAX_WEATHERVIEW]{nullptr};\r
+ bool pageStatus[MAX_WEATHERVIEW]{false};\r
+ AppGroupView *CreatePage(int32_t WeatherPageId);\r
};\r
} // namespace OHOS\r
#endif
\ No newline at end of file
+++ /dev/null
-#ifndef WEATHER_REPORT_PRESENTER_H\r
-#define WEATHER_REPORT_PRESENTER_H\r
-\r
-#include "Presenter.h"\r
-#include "WeatherReportView.h"\r
-\r
-namespace OHOS\r
-{\r
- class WeatherReportView;\r
-\r
- class WeatherReportPresenter : public Presenter<WeatherReportView>,\r
- public UIView::OnClickListener,\r
- public UIView::OnDragListener\r
- {\r
- public:\r
- WeatherReportPresenter();\r
- virtual ~WeatherReportPresenter();\r
-\r
- void OnStart() override;\r
- void OnPause() override;\r
- void OnResume() override;\r
- void OnStop() override;\r
-\r
- static WeatherReportPresenter *GetInstance();\r
-\r
- private:\r
- // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;\r
- bool OnClick(UIView &view, const ClickEvent &event) override;\r
- bool OnDrag(UIView &view, const DragEvent &event) override;\r
- };\r
-} // namespace OHOS\r
-\r
-#endif // WeatherReport_PRESENTER_H
\ No newline at end of file
\r
#include "BaseView.h"\r
#include "View.h"\r
+#include "AppGroupView.h"\r
#include "components/ui_view_group.h"\r
#include "components/ui_scroll_view.h"\r
-#include "components/ui_label.h"\r
+#include "components/ui_label_ext.h"\r
#include "components/ui_image_animator.h"\r
+#include "config/include/ConfigModel.h"\r
namespace OHOS\r
{\r
- class WeatherReportPresenter;\r
- class WeatherReportView : public View<WeatherReportPresenter>\r
+\r
+ class WeatherReportView : public AppGroupView\r
{\r
\r
public:\r
+ struct LabelConfig\r
+ {\r
+ int16_t left;\r
+ int16_t top;\r
+ int16_t width;\r
+ int16_t height;\r
+ int16_t fontSize; // 字体大小\r
+ int16_t lineHeigh; // 行高\r
+ const char *text; // 文本\r
+ uint8_t lineBreakMode; // 断行模式。\r
+ };\r
WeatherReportView();\r
virtual ~WeatherReportView();\r
static WeatherReportView *GetInstance(void);\r
-\r
- void OnStart() override;\r
- void OnSetUpView() override;\r
- void OnTearDownView() override;\r
- void OnStop() override;\r
-\r
- private:\r
- void InitView(void);\r
- void DeInitView(void);\r
- void PreLoad(void);\r
+ bool InitPage(void);\r
+ virtual bool InitView(void *caller) override;\r
+ void ClearAll(void);\r
+ UIImageAnimatorView *GetUVImageAnimatorView()\r
+ {\r
+ return UVImageAnimatorView;\r
+ }\r
\r
private:\r
- UIViewGroup *container_ = nullptr;\r
- UIScrollView *scrollView1_ = nullptr;\r
- UILabel *label5_ = nullptr;\r
- UIImageAnimatorView *imageAnimator3_ = nullptr;\r
- UIImageAnimatorView *imageAnimator2_ = nullptr;\r
- UIImageAnimatorView *imageAnimator1_ = nullptr;\r
- UIImageAnimatorView *imageAnimator = nullptr;\r
- UILabel *label6_ = nullptr;\r
- UILabel *label7_ = nullptr;\r
- UILabel *label8_ = nullptr;\r
- UILabel *label9_ = nullptr;\r
- UILabel *label10_ = nullptr;\r
- UILabel *label11_ = nullptr;\r
+ UILabelExt *SetUpLabel(LabelConfig &labelconfig); // 设置标签\r
+ bool WeatherReportViewLabelInit(void);\r
+ bool WeatherReportViewImageAnimatorViewInit(void);\r
+ UILabelExt *title{nullptr}; // 标题\r
+ UILabelExt *UV{nullptr}; // 紫外线\r
+ UILabelExt *UV_Number{nullptr}; //\r
+ UILabelExt *WindSpeed{nullptr}; // 风速\r
+ UILabelExt *WindSpeed_Number{nullptr}; //\r
+ UILabelExt *Humidity{nullptr}; // 湿度\r
+ UILabelExt *Humidity_Number{nullptr}; //\r
+ UIImageAnimatorView *UVImageAnimatorView{nullptr}; // 紫外线动画\r
+ UIImageAnimatorView *WindSpeedImageAnimatorView{nullptr}; // 风速动画\r
+ UIImageAnimatorView *HumidityImageAnimatorView{nullptr}; // 湿度动画\r
+ UIImageAnimatorView *AnimatorView{nullptr};\r
+ ImageAnimator *p_ImageAnimator{nullptr};\r
+ ImageAnimatorInfo *UVimageAnimatorInfo{nullptr};\r
+ ImageAnimatorInfo *WindSpeedimageAnimatorInfo{nullptr};\r
+ ImageAnimatorInfo *HumidityimageAnimatorInfo{nullptr};\r
+ const char **UVPaths{nullptr};\r
+ const char **WindSpeedPaths{nullptr};\r
+ const char **HumidityPaths{nullptr};\r
+ std::string imagePaths = "/user/res/weather/weather60x60gif";\r
bool viewInitStatus{false};\r
};\r
} // namespace OHOS\r
namespace OHOS
{
- class WeatherView : public UIViewGroup
+ class WeatherView : public AppGroupView
{
public:
virtual ~WeatherView();
static WeatherView *GetInstance(void);
bool InitPage(void);
- bool InitView(void);
+ virtual bool InitView(void *caller) override;
void ClearAll();
bool GetInitViewState(void);
if (event.GetDragDirection() == DragEvent::DIRECTION_TOP_TO_BOTTOM &&\r
(event.GetDeltaY() > 20) && (event.GetDeltaY() > (2 * MATH_ABS(event.GetDeltaX()))))\r
{\r
- NativeAbility::GetInstance().ChangeSlice(VIEW_WEATHER_REPORT); // 未来天气界面从上往下滑进入气象报告界面\r
+ //NativeAbility::GetInstance().ChangeSlice(VIEW_WEATHER_REPORT); // 未来天气界面从上往下滑进入气象报告界面\r
}\r
return true;\r
}\r
\r
bool MainWeatherPresenter::OnDrag(UIView &view, const DragEvent &event)\r
{\r
- if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&\r
- (event.GetDeltaX() > 20) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))\r
+\r
+ return true;\r
+ }\r
+\r
+ bool MainWeatherPresenter::OnDragEnd(UIView &view, const DragEvent &event)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " MainWeatherPresenter::OnDragEnd");\r
+ if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT)\r
{\r
NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);\r
return true;\r
}\r
- // else if (event.GetDragDirection() == DragEvent::DIRECTION_BOTTOM_TO_TOP)\r
- // {\r
- // NativeAbility::GetInstance().ChangeSlice(VIEW_WEATHER_REPORT); // 主天气界面从下往上滑进入气象报告界面\r
- // return true;\r
- // }\r
- return false;\r
+ return true;\r
}\r
\r
bool MainWeatherPresenter::OnClick(UIView &view, const ClickEvent &event)\r
{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " MainWeatherPresenter::OnClick");\r
\r
- // 根据控件id查找是哪个控件触发了点击回调\r
- // if (strcmp(view.GetViewId(), 控件ID) == 0)\r
+ UNUSED(view);\r
+ UNUSED(event);\r
return true;\r
}\r
\r
{\r
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SettingPresenter::OnKeyAct");\r
uint16 keyID = event.GetKeyId();\r
- //如果是power键就返回上一级\r
- if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER))\r
- {\r
- uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();\r
- NativeAbility::GetInstance().ChangeSlice(preSlice);\r
- }\r
+ // 如果是power键就返回上一级\r
+ if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER))\r
+ {\r
+ uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();\r
+ NativeAbility::GetInstance().ChangeSlice(preSlice);\r
+ }\r
return true;\r
}\r
+\r
+ void MainWeatherPresenter::OnSwipe(UISwipeView &view)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainWeatherPresenter::OnSwipe,current tab index = %d", view.GetCurrentPage());\r
+ //WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "the view index = %d,dragging direction = %d,current tab index = %d", view.GetViewIndex(), view.GetDirection(), view.GetCurrentPage());\r
+ }\r
}
\ No newline at end of file
#include "weather/include/MainWeatherView.h"\r
#include "weather/include/MainWeatherPresenter.h"\r
+#include "ScreenModels.h"\r
namespace OHOS\r
{\r
static MainWeatherView *g_pMainWeatherView{nullptr};\r
MainWeatherView::MainWeatherView()\r
{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainWeatherView::MainWeatherView");\r
g_pMainWeatherView = this;\r
}\r
\r
MainWeatherView::~MainWeatherView()\r
{\r
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainWeatherView::~MainWeatherView");\r
- RootView::GetInstance()->Remove(weatherView);\r
+ ClearAll();\r
+ g_pMainWeatherView = nullptr;\r
+ }\r
+\r
+ MainWeatherView *MainWeatherView::GetInstance(void)\r
+ {\r
+ return g_pMainWeatherView;\r
+ }\r
+\r
+ void MainWeatherView::ClearAll(void)\r
+ {\r
+ for (int32_t i = 0; i < maxPage; i++)\r
+ {\r
+ recordCard[i] = nullptr;\r
+ }\r
+ weatherSwipeViewList->RemoveAll();\r
+\r
delete weatherView;\r
weatherView = nullptr;\r
- g_pMainWeatherView = nullptr;\r
+\r
+ delete weatherReportView;\r
+ weatherReportView = nullptr;\r
+\r
+ delete weatherSwipeViewList;\r
+ weatherSwipeViewList = nullptr;\r
}\r
\r
- void MainWeatherView::OnStart()\r
+ /*\r
+ * @brief 主天气页面视图初始化\r
+ */\r
+ UIViewGroup *MainWeatherView::MainWeatherViewInit(void)\r
{\r
- View<MainWeatherPresenter>::OnStart();\r
- weatherView = new WeatherView();\r
- if (weatherView == nullptr)\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainWeatherView::MainWeatherViewInit");\r
+ weatherSwipeViewList = new UISwipeView(UISwipeView::VERTICAL);\r
+ if (nullptr == weatherSwipeViewList)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "weatherSwipeViewList new fail!!");\r
+ return nullptr;\r
+ }\r
+\r
+ weatherSwipeViewList->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);\r
+ weatherSwipeViewList->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); // 0 : X; 0 : Y\r
+ weatherSwipeViewList->SetAnimatorTime(50); // 50:animator drag time(ms)\r
+ for (uint16_t i = 0; i < maxPage; i++)\r
+ {\r
+ recordCard[i] = CreatePage(i);\r
+ if (nullptr == recordCard[i])\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "recordCard[%d] is nullptr!!", i);\r
+ return nullptr;\r
+ }\r
+ recordCard[i]->InitView(this);\r
+ weatherSwipeViewList->Add(recordCard[i]);\r
+ }\r
+\r
+ UIView::OnClickListener *weatherOnClickListener = (UIView::OnClickListener *)OHOS::MainWeatherPresenter::GetInstance();\r
+ if (weatherOnClickListener == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "weatherOnClickListener new fail");\r
+ return nullptr;\r
+ }\r
+\r
+ UIView::OnDragListener *weatherOnDragListener = (UIView::OnDragListener *)OHOS::MainWeatherPresenter::GetInstance();\r
+ if (weatherOnDragListener == nullptr)\r
{\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainWeatherView::new weatherView fail!");\r
- return;\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "weatherOnDragListener new fail");\r
+ return nullptr;\r
}\r
- UIView::OnDragListener *weatherDragListener = (UIView::OnDragListener *)OHOS::MainWeatherPresenter::GetInstance();\r
- if (weatherDragListener == nullptr)\r
+\r
+ UISwipeView::OnSwipeListener *weatherOnSwipeListener = (UISwipeView::OnSwipeListener *)OHOS::MainWeatherPresenter::GetInstance();\r
+ if (weatherOnSwipeListener == nullptr)\r
{\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "weatherDragListener new fail");\r
- return;\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "weatherOnSwipeListener new fail");\r
+ return nullptr;\r
}\r
- weatherView->SetOnDragListener(weatherDragListener);\r
- weatherView->InitView();\r
- RootView::GetInstance()->Add(weatherView);\r
- // 增加按键监听\r
+\r
+ weatherSwipeViewList->SetOnClickListener(weatherOnClickListener);\r
+ weatherSwipeViewList->SetOnDragListener(weatherOnDragListener);\r
+ weatherSwipeViewList->SetOnSwipeListener(weatherOnSwipeListener);\r
+ weatherSwipeViewList->SetViewId(MAIN_WEATHER_VIEW);\r
+ weatherSwipeViewList->SetDraggable(true);\r
+ weatherSwipeViewList->SetTouchable(true);\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainWeatherView InitPage over!!");\r
+\r
+ return weatherSwipeViewList;\r
+ }\r
+\r
+ void MainWeatherView::OnStart()\r
+ {\r
+ View<MainWeatherPresenter>::OnStart();\r
+ MainWeatherViewInit();\r
+\r
RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::MainWeatherPresenter::GetInstance();\r
RootView::GetInstance()->SetOnKeyActListener(keyactListener);\r
}\r
void MainWeatherView::OnSetUpView()\r
{\r
View<MainWeatherPresenter>::OnSetUpView();\r
+ RootView::GetInstance()->Add(weatherSwipeViewList);\r
Draw();\r
}\r
\r
RootView::GetInstance()->RemoveAll();\r
return;\r
}\r
+\r
+ WeatherView *MainWeatherView::GetWeatherView(void)\r
+ {\r
+ return weatherView;\r
+ }\r
+\r
+ WeatherReportView *MainWeatherView::GetWeatherReportView(void)\r
+ {\r
+ return weatherReportView;\r
+ }\r
+\r
+ /*\r
+ * @brief 天气页面视图初始化\r
+ */\r
+ AppGroupView *MainWeatherView::WeatherViewPageInit(void)\r
+ {\r
+ weatherView = new WeatherView();\r
+ if (weatherView == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainWeatherView::new weatherView fail!");\r
+ return nullptr;\r
+ }\r
+\r
+ return weatherView;\r
+ }\r
+\r
+ /*\r
+ * @brief 气象报告视图初始化\r
+ */\r
+ AppGroupView *MainWeatherView::WeatherReportViewPageInit(void)\r
+ {\r
+ weatherReportView = new WeatherReportView();\r
+ if (weatherReportView == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainWeatherView::new weatherReportView fail!");\r
+ return nullptr;\r
+ }\r
+ return weatherReportView;\r
+ }\r
+\r
+ struct MainWeatherViewMapper\r
+ {\r
+ const int16_t viewId;\r
+ AppGroupView *(MainWeatherView::*func)(void);\r
+ };\r
+\r
+ // 2.ViewMapper[] 是一个静态的视图映射数组,将视图ID与DisplayBrightnessViewMapper类中的特定成员函数指针进行了绑定。\r
+ static const MainWeatherViewMapper g_pageMapper[] = {\r
+ {MAINWEATHERVIEW, &MainWeatherView::WeatherViewPageInit},\r
+ {WEATHERREPORTVIEW, &MainWeatherView::WeatherReportViewPageInit},\r
+ };\r
+\r
+ /*\r
+ * @brief 根据提供的 WeatherPageId 查找对应的页面ID,然后根据这个页面ID来创建对应的页面视图\r
+ */\r
+ AppGroupView *MainWeatherView::CreatePage(int32_t WeatherPageId)\r
+ {\r
+ uint16_t i;\r
+ AppGroupView *view = nullptr;\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CreatePage WeatherPageId:%d", WeatherPageId);\r
+\r
+ for (i = 0; i < sizeof(g_pageMapper) / sizeof(g_pageMapper[0]); i++)\r
+ {\r
+ if (g_pageMapper[i].viewId == WeatherPageId)\r
+ { // 正确使用 WeatherPageId 来匹配视图ID\r
+ view = (this->*(g_pageMapper[i].func))(); // 如果找到匹配项,则调用相应的函数创建视图\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CreatePage view:%p", view);\r
+ return view; // 返回创建的视图\r
+ }\r
+ }\r
+ return nullptr; // 如果没有找到匹配的视图ID,返回 nullptr\r
+ }\r
}
\ No newline at end of file
+++ /dev/null
-#include "AppViewIDs.h"\r
-#include "NativeAbility.h"\r
-\r
-#include "weather/include/WeatherReportPresenter.h"\r
-\r
-namespace OHOS\r
-{\r
-\r
- // 当前Presenter属性实例化的内存指针\r
- static WeatherReportPresenter *g_pWeatherReportPresenter = nullptr;\r
-\r
- WeatherReportPresenter::WeatherReportPresenter()\r
- {\r
-\r
- g_pWeatherReportPresenter = this;\r
- }\r
-\r
- WeatherReportPresenter::~WeatherReportPresenter()\r
- {\r
-\r
- g_pWeatherReportPresenter = nullptr;\r
- }\r
-\r
- WeatherReportPresenter *WeatherReportPresenter::GetInstance()\r
- {\r
-\r
- return g_pWeatherReportPresenter;\r
- }\r
-\r
- void WeatherReportPresenter::OnStart()\r
- {\r
-\r
- Presenter<WeatherReportView>::OnStart();\r
- }\r
-\r
- void WeatherReportPresenter::OnPause(void)\r
- {\r
-\r
- Presenter<WeatherReportView>::OnPause();\r
- }\r
-\r
- void WeatherReportPresenter::OnResume(void)\r
- {\r
-\r
- Presenter<WeatherReportView>::OnResume();\r
- }\r
-\r
- void WeatherReportPresenter::OnStop(void)\r
- {\r
-\r
- Presenter<WeatherReportView>::OnStop();\r
- }\r
-\r
- bool WeatherReportPresenter::OnDrag(UIView &view, const DragEvent &event)\r
- {\r
-\r
- if (event.GetDragDirection() == DragEvent::DIRECTION_TOP_TO_BOTTOM &&\r
- (event.GetDeltaY() > 20) && (event.GetDeltaY() > (2 * MATH_ABS(event.GetDeltaX()))))\r
- {\r
- NativeAbility::GetInstance().ChangeSlice(VIEW_WEATHER); // 气象报告界面从上往下滑进入主天气界面\r
- return true;\r
- }\r
- if (event.GetDragDirection() == DragEvent::DIRECTION_BOTTOM_TO_TOP)\r
- {\r
- NativeAbility::GetInstance().ChangeSlice(VIEW_FUTURE_WEATHER); // 气象报告界面从下往上进入未来天气界面\r
- return true;\r
- }\r
- return false;\r
- }\r
-\r
- bool WeatherReportPresenter::OnClick(UIView &view, const ClickEvent &event)\r
- {\r
-\r
- // 根据控件id查找是哪个控件触发了点击回调\r
- // if (strcmp(view.GetViewId(), 控件ID) == 0)\r
- return true;\r
- }\r
-}
\ No newline at end of file
#include "weather/include/WeatherReportView.h"\r
-#include "weather/include/WeatherReportPresenter.h"\r
-#include "UiConfig.h"\r
+#include "wearable_log.h"\r
\r
namespace OHOS\r
{\r
-\r
- const char *IMAGEANIMATOR3 = "/user/res/weather/WEATHER_WINDSPEED.bin";\r
- const char *IMAGEANIMATOR2 = "/user/res/weather/WEATHER_HUMIDITY.bin";\r
- const char *IMAGEANIMATOR1 = "/user/res/weather/WEATHER_UVI.bin";\r
- static ImageAnimatorInfo g_imageAnimator3Info[2] = {\r
- {IMAGEANIMATOR3, {341, 167}, 60, 60, IMG_SRC_FILE_PATH},\r
- {"", {341, 167}, 60, 60, IMG_SRC_FILE_PATH},\r
- };\r
- static ImageAnimatorInfo g_imageAnimator2Info[2] = {\r
- {IMAGEANIMATOR2, {207, 167}, 60, 60, IMG_SRC_FILE_PATH},\r
- {"", {207, 167}, 60, 60, IMG_SRC_FILE_PATH},\r
- };\r
-\r
- static ImageAnimatorInfo g_imageAnimator1Info[2] = {\r
- {IMAGEANIMATOR1, {73, 167}, 60, 60, IMG_SRC_FILE_PATH},\r
- {"", {73, 167}, 60, 60, IMG_SRC_FILE_PATH},\r
- };\r
- static ImageAnimatorInfo g_imageAnimatorInfo[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 WeatherReportView *g_pWeatherReportView{nullptr};\r
\r
WeatherReportView::WeatherReportView()\r
{\r
-\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " WeatherReportView::WeatherReportView");\r
+ SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);\r
+ SetViewIndex(1);\r
g_pWeatherReportView = this;\r
}\r
\r
WeatherReportView::~WeatherReportView()\r
{\r
- if (viewInitStatus == true)\r
- {\r
- DeInitView();\r
- }\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " WeatherReportView::~WeatherReportView");\r
+ ClearAll();\r
g_pWeatherReportView = nullptr;\r
}\r
\r
WeatherReportView *WeatherReportView::GetInstance()\r
{\r
-\r
return g_pWeatherReportView;\r
}\r
\r
- void WeatherReportView::InitView()\r
+ /**\r
+ * 释放图片文件路径数组占用的内存\r
+ * @param imagePaths 图片文件路径数组\r
+ * @param numImages 图片文件的数量\r
+ */\r
+ static void FreeImagePathsArray(const char **imagePaths, int numImages)\r
{\r
- if (container_ == nullptr)\r
+ for (int i = 0; i < numImages; i++)\r
{\r
- container_ = new UIViewGroup();\r
- container_->SetPosition(0, 0, 466, 466);\r
- container_->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
- container_->SetTouchable(true);\r
- container_->SetDraggable(true);\r
- UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(WeatherReportPresenter::GetInstance());\r
- container_->SetOnDragListener(draglistener);\r
+ free((void *)imagePaths[i]);\r
}\r
+ delete[] imagePaths;\r
+ }\r
\r
- // Add ScrollView to App\r
- if (scrollView1_ == nullptr)\r
+ void WeatherReportView::ClearAll(void)\r
+ {\r
+ if (viewInitStatus == true)\r
{\r
- scrollView1_ = new UIScrollView();\r
- }\r
- scrollView1_->SetPosition(0, 0); // widget's left position and top position\r
- scrollView1_->Resize(466, 466); // widget's width and height\r
- scrollView1_->SetViewId("scrollView1"); // Set style\r
- scrollView1_->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
+ RemoveAll();\r
+ delete title;\r
+ title = nullptr;\r
\r
- // Set additional property\r
+ delete UV;\r
+ UV = nullptr;\r
\r
- // Add to rootView\r
- container_->Add(scrollView1_);\r
- scrollView1_->SetVisible(true);\r
+ delete UV_Number;\r
+ UV_Number = nullptr;\r
\r
- // Add Label to App\r
- if (label5_ == nullptr)\r
- {\r
- label5_ = new UILabel();\r
- }\r
- label5_->SetPosition(173, 52); // widget's left position and top position\r
- label5_->Resize(120, 35); // widget's width and height\r
- label5_->SetViewId("label5"); // Set style\r
- label5_->SetStyle(STYLE_TEXT_FONT, 30);\r
- label5_->SetStyle(STYLE_LINE_HEIGHT, 35);\r
-\r
- // Set additional property\r
- label5_->SetText("气象报告");\r
- label5_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
- label5_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
- label5_->SetRollSpeed(0);\r
- label5_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
-\r
- // Add to scrollView1\r
- scrollView1_->Add(label5_);\r
- label5_->SetVisible(true);\r
-\r
- // Add ImageAnimatorView to App\r
- if (imageAnimator3_ == nullptr)\r
- {\r
- imageAnimator3_ = new UIImageAnimatorView();\r
- }\r
- imageAnimator3_->SetPosition(341, 167); // widget's left position and top position\r
- imageAnimator3_->Resize(60, 60); // widget's width and height\r
- imageAnimator3_->SetViewId("imageAnimator3"); // Set style\r
-\r
- // Set additional property\r
- imageAnimator3_->SetImageAnimatorSrc(g_imageAnimator3Info, 2, 200);\r
- imageAnimator3_->SetTimeOfPause(500);\r
- imageAnimator3_->SetRepeatTimes(1);\r
- imageAnimator3_->SetReverse(true);\r
- imageAnimator3_->Start();\r
-\r
- // Add to scrollView1\r
- scrollView1_->Add(imageAnimator3_);\r
- imageAnimator3_->SetVisible(true);\r
-\r
- // Add ImageAnimatorView to App\r
- if (imageAnimator2_ == nullptr)\r
- {\r
- imageAnimator2_ = new UIImageAnimatorView();\r
- }\r
- imageAnimator2_->SetPosition(207, 167); // widget's left position and top position\r
- imageAnimator2_->Resize(60, 60); // widget's width and height\r
- imageAnimator2_->SetViewId("imageAnimator2"); // Set style\r
-\r
- // Set additional property\r
- imageAnimator2_->SetImageAnimatorSrc(g_imageAnimator2Info, 2, 200);\r
- imageAnimator2_->SetTimeOfPause(500);\r
- imageAnimator2_->SetRepeatTimes(1);\r
- imageAnimator2_->SetReverse(true);\r
- imageAnimator2_->Start();\r
-\r
- // Add to scrollView1\r
- scrollView1_->Add(imageAnimator2_);\r
- imageAnimator2_->SetVisible(true);\r
-\r
- // Add ImageAnimatorView to App\r
- if (imageAnimator1_ == nullptr)\r
- {\r
- imageAnimator1_ = new UIImageAnimatorView();\r
- }\r
- imageAnimator1_->SetPosition(73, 167); // widget's left position and top position\r
- imageAnimator1_->Resize(60, 60); // widget's width and height\r
- imageAnimator1_->SetViewId("imageAnimator1"); // Set style\r
-\r
- // Set additional property\r
- imageAnimator1_->SetImageAnimatorSrc(g_imageAnimator1Info, 2, 200);\r
- imageAnimator1_->SetTimeOfPause(500);\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
-\r
- // Add Label to App\r
- if (label6_ == nullptr)\r
- {\r
- label6_ = new UILabel();\r
- }\r
- label6_->SetPosition(93, 240); // widget's left position and top position\r
- label6_->Resize(20, 50); // widget's width and height\r
- label6_->SetViewId("label6"); // Set style\r
- label6_->SetStyle(STYLE_TEXT_FONT, 40);\r
- label6_->SetStyle(STYLE_LINE_HEIGHT, 50);\r
-\r
- // Set additional property\r
- label6_->SetText("7");\r
- label6_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
- label6_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
- label6_->SetRollSpeed(0);\r
- label6_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 40);\r
-\r
- // Add to scrollView1\r
- scrollView1_->Add(label6_);\r
- label6_->SetVisible(true);\r
-\r
- // Add Label to App\r
- if (label7_ == nullptr)\r
- {\r
- label7_ = new UILabel();\r
- }\r
- label7_->SetPosition(210, 240); // widget's left position and top position\r
- label7_->Resize(200, 60); // widget's width and height\r
- label7_->SetViewId("label7"); // Set style\r
- label7_->SetStyle(STYLE_TEXT_FONT, 40);\r
- label7_->SetStyle(STYLE_LINE_HEIGHT, 50);\r
-\r
- // Set additional property\r
- label7_->SetText("1-2");\r
- label7_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
- label7_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
- label7_->SetRollSpeed(0);\r
- label7_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 40);\r
-\r
- // Add to scrollView1\r
- scrollView1_->Add(label7_);\r
- label7_->SetVisible(true);\r
-\r
- // Add Label to App\r
- if (label8_ == nullptr)\r
- {\r
- label8_ = new UILabel();\r
- }\r
- label8_->SetPosition(337, 240); // widget's left position and top position\r
- label8_->Resize(200, 60); // widget's width and height\r
- label8_->SetViewId("label8"); // Set style\r
- label8_->SetStyle(STYLE_TEXT_FONT, 40);\r
- label8_->SetStyle(STYLE_LINE_HEIGHT, 50);\r
-\r
- // Set additional property\r
- label8_->SetText("75%");\r
- label8_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
- label8_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
- label8_->SetRollSpeed(0);\r
- label8_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 40);\r
-\r
- // Add to scrollView1\r
- scrollView1_->Add(label8_);\r
- label8_->SetVisible(true);\r
-\r
- // Add Label to App\r
- if (label9_ == nullptr)\r
- {\r
- label9_ = new UILabel();\r
- }\r
- label9_->SetPosition(63, 293); // widget's left position and top position\r
- label9_->Resize(200, 60); // widget's width and height\r
- label9_->SetViewId("label9"); // Set style\r
- label9_->SetStyle(STYLE_TEXT_FONT, 26);\r
- label9_->SetStyle(STYLE_LINE_HEIGHT, 30);\r
-\r
- // Set additional property\r
- label9_->SetText("紫外线");\r
- label9_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
- label9_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
- label9_->SetRollSpeed(0);\r
- label9_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 26);\r
-\r
- // Add to scrollView1\r
- scrollView1_->Add(label9_);\r
- label9_->SetVisible(true);\r
-\r
- // Add Label to App\r
- if (label10_ == nullptr)\r
- {\r
- label10_ = new UILabel();\r
- }\r
- label10_->SetPosition(212, 293); // widget's left position and top position\r
- label10_->Resize(290, 60); // widget's width and height\r
- label10_->SetViewId("label10"); // Set style\r
- label10_->SetStyle(STYLE_TEXT_FONT, 26);\r
- label10_->SetStyle(STYLE_LINE_HEIGHT, 30);\r
-\r
- // Set additional property\r
- label10_->SetText("风速");\r
- label10_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
- label10_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
- label10_->SetRollSpeed(0);\r
- label10_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 26);\r
-\r
- // Add to scrollView1\r
- scrollView1_->Add(label10_);\r
- label10_->SetVisible(true);\r
-\r
- // Add Label to App\r
- if (label11_ == nullptr)\r
- {\r
- label11_ = new UILabel();\r
- }\r
- label11_->SetPosition(345, 293); // widget's left position and top position\r
- label11_->Resize(200, 60); // widget's width and height\r
- label11_->SetViewId("label11"); // Set style\r
- label11_->SetStyle(STYLE_TEXT_FONT, 26);\r
- label11_->SetStyle(STYLE_LINE_HEIGHT, 30);\r
-\r
- // Set additional property\r
- label11_->SetText("湿度");\r
- label11_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
- label11_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
- label11_->SetRollSpeed(0);\r
- label11_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 26);\r
-\r
- // Add to scrollView1\r
- scrollView1_->Add(label11_);\r
- label11_->SetVisible(true);\r
- /* -------------------------------------------------------------------------- */\r
- #if 0\r
- // Add ImageAnimatorView to App\r
- if (imageAnimator == nullptr)\r
- {\r
- imageAnimator = new UIImageAnimatorView();\r
+ delete WindSpeed;\r
+ WindSpeed = nullptr;\r
+\r
+ delete WindSpeed_Number;\r
+ WindSpeed_Number = nullptr;\r
+\r
+ delete Humidity;\r
+ Humidity = nullptr;\r
+\r
+ delete Humidity_Number;\r
+ Humidity_Number = nullptr;\r
+\r
+ UVImageAnimatorView->Stop();\r
+ delete UVImageAnimatorView;\r
+ UVImageAnimatorView = nullptr;\r
+\r
+ WindSpeedImageAnimatorView->Stop();\r
+ delete WindSpeedImageAnimatorView;\r
+ WindSpeedImageAnimatorView = nullptr;\r
+\r
+ HumidityImageAnimatorView->Stop();\r
+ delete HumidityImageAnimatorView;\r
+ HumidityImageAnimatorView = nullptr;\r
+\r
+ if (p_ImageAnimator != nullptr)\r
+ {\r
+ p_ImageAnimator->FreeImagePathsArray(UVPaths, 24);\r
+ p_ImageAnimator->FreeImagePathsArray(WindSpeedPaths, 24);\r
+ p_ImageAnimator->FreeImagePathsArray(HumidityPaths, 20);\r
+\r
+ delete p_ImageAnimator;\r
+ p_ImageAnimator = nullptr;\r
+ }\r
+\r
+ delete UVimageAnimatorInfo;\r
+ delete WindSpeedimageAnimatorInfo;\r
+ delete HumidityimageAnimatorInfo;\r
}\r
- imageAnimator->SetPosition(213, 400);\r
- imageAnimator->Resize(40, 40);\r
- imageAnimator->SetViewId("imageAnimator1");\r
- imageAnimator->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
-\r
- // Set additional property\r
- imageAnimator->SetImageAnimatorSrc(g_imageAnimatorInfo, 2, 200);\r
- imageAnimator->SetTimeOfPause(200);\r
- imageAnimator->SetRepeatTimes(1);\r
- imageAnimator->SetReverse(true);\r
- imageAnimator->Start();\r
-\r
- // Add to scrollView1\r
- scrollView1_->Add(imageAnimator);\r
- #endif\r
}\r
\r
- void WeatherReportView::DeInitView()\r
+ // 设置标签\r
+ UILabelExt *WeatherReportView::SetUpLabel(LabelConfig &labelconfig)\r
{\r
- if (label5_ != nullptr)\r
- {\r
- delete label5_;\r
- label5_ = nullptr;\r
- }\r
- if (imageAnimator3_ != nullptr)\r
- {\r
- imageAnimator3_->Stop();\r
- delete imageAnimator3_;\r
- imageAnimator3_ = nullptr;\r
- }\r
- if (imageAnimator2_ != nullptr)\r
- {\r
- imageAnimator2_->Stop();\r
- delete imageAnimator2_;\r
- imageAnimator2_ = nullptr;\r
- }\r
- if (imageAnimator1_ != nullptr)\r
- {\r
- imageAnimator1_->Stop();\r
- delete imageAnimator1_;\r
- imageAnimator1_ = nullptr;\r
- }\r
- if (imageAnimator != nullptr)\r
- {\r
- imageAnimator->Stop();\r
- delete imageAnimator;\r
- imageAnimator = nullptr;\r
- }\r
- if (label6_ != nullptr)\r
+ UILabelExt *label = new UILabelExt();\r
+ if (label == nullptr)\r
{\r
- delete label6_;\r
- label6_ = nullptr;\r
+ return nullptr;\r
}\r
- if (label7_ != nullptr)\r
+ label->SetPosition(labelconfig.left, labelconfig.top, labelconfig.width, labelconfig.height); // 位置大小\r
+ label->SetStyle(STYLE_TEXT_FONT, labelconfig.fontSize); // 字体大小\r
+ label->SetStyle(STYLE_LINE_HEIGHT, labelconfig.lineHeigh); // 字体行高\r
+ label->SetText(labelconfig.text); // 内容\r
+ label->SetLineBreakMode(labelconfig.lineBreakMode); // 断行模式。\r
+ label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+ label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, labelconfig.fontSize);\r
+ return label;\r
+ }\r
+\r
+ bool WeatherReportView::WeatherReportViewLabelInit(void)\r
+ {\r
+ LabelConfig labelconfig = {\r
+ .left = 173,\r
+ .top = 52,\r
+ .width = 120,\r
+ .height = 40,\r
+ .fontSize = 30,\r
+ .lineHeigh = 35,\r
+ .text = "气象报告",\r
+ .lineBreakMode = UILabel::LINE_BREAK_ELLIPSIS,\r
+ };\r
+ title = SetUpLabel(labelconfig);\r
+ if (title == nullptr)\r
{\r
- delete label7_;\r
- label7_ = nullptr;\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherReportView::title new fail!");\r
+ return false;\r
}\r
- if (label8_ != nullptr)\r
+ /* -------------------------------------------------------------------------- */\r
+ labelconfig = {\r
+ .left = 23,\r
+ .top = 240,\r
+ .width = 120,\r
+ .height = 50,\r
+ .fontSize = 40,\r
+ .lineHeigh = 50,\r
+ .text = "7",\r
+ .lineBreakMode = UILabel::LINE_BREAK_ELLIPSIS,\r
+ };\r
+ UV_Number = SetUpLabel(labelconfig);\r
+ if (UV_Number == nullptr)\r
{\r
- delete label8_;\r
- label8_ = nullptr;\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherReportView::UV_Number new fail!");\r
+ return false;\r
}\r
- if (label9_ != nullptr)\r
+\r
+ labelconfig.left = 173;\r
+ labelconfig.text = "1-2";\r
+ WindSpeed_Number = SetUpLabel(labelconfig);\r
+ if (WindSpeed_Number == nullptr)\r
{\r
- delete label9_;\r
- label9_ = nullptr;\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherReportView::WindSpeed_Number new fail!");\r
+ return false;\r
}\r
- if (label10_ != nullptr)\r
+\r
+ labelconfig.left = 323;\r
+ labelconfig.text = "75%";\r
+ Humidity_Number = SetUpLabel(labelconfig);\r
+ if (Humidity_Number == nullptr)\r
{\r
- delete label10_;\r
- label10_ = nullptr;\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherReportView::Humidity_Number new fail!");\r
+ return false;\r
}\r
- if (label11_ != nullptr)\r
+\r
+ /* -------------------------------------------------------------------------- */\r
+ labelconfig = {\r
+ .left = 23,\r
+ .top = 290,\r
+ .width = 120,\r
+ .height = 30,\r
+ .fontSize = 26,\r
+ .lineHeigh = 35,\r
+ .text = "紫外线",\r
+ .lineBreakMode = UILabel::LINE_BREAK_ELLIPSIS,\r
+ };\r
+ UV = SetUpLabel(labelconfig);\r
+ if (UV == nullptr)\r
{\r
- delete label11_;\r
- label11_ = nullptr;\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherReportView::UV new fail!");\r
+ return false;\r
}\r
- if (scrollView1_ != nullptr)\r
+ UV->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff));\r
+\r
+ labelconfig.left = 173;\r
+ labelconfig.text = "风速";\r
+ WindSpeed = SetUpLabel(labelconfig);\r
+ if (WindSpeed == nullptr)\r
{\r
- delete scrollView1_;\r
- scrollView1_ = nullptr;\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherReportView::WindSpeed new fail!");\r
+ return false;\r
}\r
- if (container_ != nullptr)\r
+ WindSpeed->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff));\r
+\r
+ labelconfig.left = 323;\r
+ labelconfig.text = "湿度";\r
+ Humidity = SetUpLabel(labelconfig);\r
+ if (Humidity == nullptr)\r
{\r
- container_->RemoveAll();\r
- delete container_;\r
- container_ = nullptr;\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherReportView::Humidity new fail!");\r
+ return false;\r
}\r
+ Humidity->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff));\r
+ /* ----------------------------------- Add ---------------------------------- */\r
+\r
+ Add(title);\r
+\r
+ Add(UV_Number);\r
+ Add(WindSpeed_Number);\r
+ Add(Humidity_Number);\r
+ Add(UV);\r
+ Add(WindSpeed);\r
+ Add(Humidity);\r
+\r
+ return true;\r
}\r
\r
- void WeatherReportView::PreLoad(void)\r
+ bool WeatherReportView::WeatherReportViewImageAnimatorViewInit(void)\r
{\r
- if (!viewInitStatus)\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherReportView::WeatherReportViewImageAnimatorViewInit");\r
+\r
+ p_ImageAnimator = new ImageAnimator();\r
+ if (p_ImageAnimator == nullptr)\r
{\r
- InitView();\r
- viewInitStatus = true;\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "p_ImageAnimator new fail!!");\r
+ return false;\r
}\r
- }\r
- void WeatherReportView::OnStart()\r
- {\r
- View<WeatherReportPresenter>::OnStart();\r
- PreLoad();\r
- RootView::GetInstance()->Add(container_);\r
- }\r
-\r
- void WeatherReportView::OnSetUpView()\r
- {\r
\r
- View<WeatherReportPresenter>::OnSetUpView();\r
- Draw();\r
+ p_ImageAnimator->imageAnimatorConfig = {\r
+ .x = 53,\r
+ .y = 160,\r
+ .w = 60,\r
+ .h = 60,\r
+ .numFrames = 24,\r
+ .time = 100,\r
+ };\r
+ UVPaths = p_ImageAnimator->CreateImagePathsArray("/user/res/weather/weather60x60gif/UV/", "bin", 24);\r
+ p_ImageAnimator->InitImageAnimatorSource(UVImageAnimatorView, UVimageAnimatorInfo, UVPaths, p_ImageAnimator->imageAnimatorConfig);\r
+\r
+ p_ImageAnimator->imageAnimatorConfig.x = 203;\r
+ WindSpeedPaths = p_ImageAnimator->CreateImagePathsArray("/user/res/weather/weather60x60gif/WindSpeed/", "bin", 24);\r
+ p_ImageAnimator->InitImageAnimatorSource(WindSpeedImageAnimatorView, WindSpeedimageAnimatorInfo, WindSpeedPaths, p_ImageAnimator->imageAnimatorConfig);\r
+\r
+ p_ImageAnimator->imageAnimatorConfig.x = 353;\r
+ p_ImageAnimator->imageAnimatorConfig.numFrames = 20;\r
+ HumidityPaths = p_ImageAnimator->CreateImagePathsArray("/user/res/weather/weather60x60gif/Humidity/", "bin", 20);\r
+ p_ImageAnimator->InitImageAnimatorSource(HumidityImageAnimatorView, HumidityimageAnimatorInfo, HumidityPaths, p_ImageAnimator->imageAnimatorConfig);\r
+\r
+ /* ---------------------------------- Start --------------------------------- */\r
+ UVImageAnimatorView->Start();\r
+ WindSpeedImageAnimatorView->Start();\r
+ HumidityImageAnimatorView->Start();\r
+ /* ----------------------------------- Add ---------------------------------- */\r
+ Add(UVImageAnimatorView);\r
+ Add(WindSpeedImageAnimatorView);\r
+ Add(HumidityImageAnimatorView);\r
+\r
+ return true;\r
}\r
\r
- void WeatherReportView::OnTearDownView()\r
+ bool WeatherReportView::InitPage(void)\r
{\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherReportView::InitPage");\r
+ if (!WeatherReportViewLabelInit())\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (!WeatherReportViewImageAnimatorViewInit())\r
+ {\r
+ return false;\r
+ }\r
\r
- View<WeatherReportPresenter>::OnTearDownView();\r
- return;\r
+ viewInitStatus = true;\r
+ return true;\r
}\r
\r
- void WeatherReportView::OnStop()\r
+ bool WeatherReportView::InitView(void *caller)\r
{\r
-\r
- View<WeatherReportPresenter>::OnStop();\r
- RootView::GetInstance()->RemoveAll();\r
- return;\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherReportView InitView %p", caller);\r
+ if (InitPage() == false)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherReportView::InitPage fail");\r
+ return false;\r
+ }\r
+ SetDraggable(true);\r
+ SetTouchable(true);\r
+ return true;\r
}\r
+\r
}
\ No newline at end of file
static WeatherView *g_pWeatherView{nullptr};
WeatherView::WeatherView()
{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::WeatherView()");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherView::WeatherView");
SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
+ SetViewIndex(0);
Time = GetTime();
WeatherImag = GetWeatherImage();
Temperature = GetWeatherTemperature();
WeatherView::~WeatherView()
{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " WeatherView::~WeatherView()");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " WeatherView::~WeatherView");
ClearAll();
g_pWeatherView = nullptr;
}
// 初始化天气页面
bool WeatherView::InitPage(void)
{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " WeatherView::InitPage()");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " WeatherView::InitPage");
/* -------------------------------------------------------------------------- */
showWeatherImage = new UIImageView();
if (showWeatherImage == nullptr)
{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::new showWeatherImage fail!");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherView::new showWeatherImage fail!");
return false;
}
showWeatherImage->SetPosition(109, 124, 100, 100);
showCurrentTimeLabel = InitLabel(185, 52, Time.c_str(), "showCurrentTimeLabel", 40, 47);
if (showCurrentTimeLabel == nullptr)
{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::new showCurrentTimeLabel fail!");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherView::new showCurrentTimeLabel fail!");
return false;
}
/* -------------------------------------------------------------------------- */
showTemperatureLabel = InitLabel(249, 126, Temperature.c_str(), "showTemperatureLabel", 100, 125);
if (showTemperatureLabel == nullptr)
{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::new showTemperatureLabel fail!");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherView::new showTemperatureLabel fail!");
return false;
}
/* -------------------------------------------------------------------------- */
showWeatherDescriptionLabel = new UILabel();
- showWeatherDescriptionLabel->SetPosition(83, 264,300,40);
+ showWeatherDescriptionLabel->SetPosition(83, 264, 300, 40);
showWeatherDescriptionLabel->SetViewId("showWeatherDescriptionLabel");
showWeatherDescriptionLabel->SetStyle(STYLE_TEXT_FONT, 35);
showWeatherDescriptionLabel->SetStyle(STYLE_LINE_HEIGHT, 41);
showWeatherDescriptionLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 35);
if (showWeatherDescriptionLabel == nullptr)
{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::new showWeatherDescriptionLabel fail!");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherView::new showWeatherDescriptionLabel fail!");
return false;
}
/* -------------------------------------------------------------------------- */
showWeatherAreaLabel = InitLabel(155, 330, WeatherArea.c_str(), "showWeatherAreaLabel", 26, 30);
if (showWeatherAreaLabel == nullptr)
{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::new showWeatherAreaLabel fail!");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherView::new showWeatherAreaLabel fail!");
return false;
}
showWeatherAreaLabel->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff));
showMaxandMinTemperatureLabel = InitLabel(158, 368, MaxandMinTemperature.c_str(), "showMaxandMinTemperatureLabel", 20, 23);
if (showMaxandMinTemperatureLabel == nullptr)
{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::new showMaxandMinTemperatureLabel fail!");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherView::new showMaxandMinTemperatureLabel fail!");
return false;
}
showMaxandMinTemperatureLabel->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff));
-
+
/* -------------------------------- 将组件添加到根视图 ------------------------------- */
Add(showWeatherImage);
Add(showCurrentTimeLabel);
return true;
}
- bool WeatherView::InitView()
+ bool WeatherView::InitView(void *caller)
{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::InitView");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherView InitView %p", caller);
if (InitPage() == false)
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitPage fail");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherView::InitPage fail");
return false;
}
SetDraggable(true);