${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingView.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
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/GetWeatherDataErrorPresenter.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/GetWeatherDataErrorView.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/WeatherControlView.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/WeatherView.cpp
+
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/compass/src/CompassControlView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/compass/src/CompassCalibrationView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/compass/src/CompassModel.cpp
VIEW_UISAMPLE,
VIEW_DIAL,//切换表盘
+ VIEW_WEATHER, // 天气
+ VIEW_WEATHER_REPORT, // 气象报告
+ VIEW_FUTURE_WEATHER, // 未来天气
+ VIEW_GET_WEATHER_DATA_ERROR, // 获取天气数据失败
+
VIEW_MAX_INTER_APP, // 在此之前添加native应用ID.
VIEW_EXTERN_APP = 0xFFFE, // 三方应用
VIEW_INVALIDE_APP = 0xFFFF,
void InitRebootSlice(void);
void InitUISampleSlice(void);
void InitDialSlice(void);
-
+ /* ----------------------------------- 天气 ----------------------------------- */
+ void InitWeatherSlice(void);
+ void InitWeatherReportSlice(void);
+ void InitFutureWeatherSlice(void);
+ void InitGetWeatherDataErrorSlice(void);
+ /* -------------------------------------------------------------------------- */
private:
void InitAllNativeSlices(void);
static constexpr const char *PNG_A019_095_IMAGE_PATH = APP_RES_PATH "/BLUETOOTH_IMAGE_16.bin";
static constexpr const char *PNG_BLUETOOTHEAR = APP_RES_PATH "/BLUETOOTHEAR.bin";
/* --------------------------------- AppList -------------------------------- */
- static constexpr const char *PNG_APPLIST_ALARM_IMAGE = APP_RES_PATH "/APPLIST_ALARM.bin"; // 闹钟
- static constexpr const char *PNG_APPLIST_SPO2_IMAGE = APP_RES_PATH "/APPLIST_SPO2.bin"; // 血氧
- static constexpr const char *PNG_APPLIST_SETTING_IMAGE = APP_RES_PATH "/APPLIST_SETTING.bin"; // 设置
- static constexpr const char *PNG_APPLIST_CALLER_IMAGE = APP_RES_PATH "/APPLIST_CALLER_IMAGE.bin";
- static constexpr const char *PNG_APPLIST_COMPASS_IMAGE = APP_RES_PATH "/APPLIST_COMPASS_IMAGE.bin";
+ static constexpr const char *PNG_APPLIST_ALARM_IMAGE = APP_RES_PATH "/APPLIST_ALARM.bin"; // 闹钟
+ static constexpr const char *PNG_APPLIST_SPO2_IMAGE = APP_RES_PATH "/APPLIST_SPO2.bin"; // 血氧
+ static constexpr const char *PNG_APPLIST_SETTING_IMAGE = APP_RES_PATH "/APPLIST_SETTING.bin"; // 设置
+ static constexpr const char *PNG_APPLIST_CALLER_IMAGE = APP_RES_PATH "/APPLIST_CALLER_IMAGE.bin"; // 打电话
+ static constexpr const char *PNG_APPLIST_COMPASS_IMAGE = APP_RES_PATH "/APPLIST_COMPASS_IMAGE.bin"; // 指南针
+ static constexpr const char *PNG_APPLIST_WEATHER_IMAGE = APP_RES_PATH "/APPLIST_WEATHER_IMAGE.bin"; // 天气
/* ---------------------------------- 快速训练 ---------------------------------- */
static constexpr const char *PNG_TRAING_BOUTTONMORE_IMAGE = APP_RES_PATH "/Training/More.bin";
static constexpr const char *PNG_TRAING_BUTTONGRONG_IMAGE = APP_RES_PATH "/Training/Bouttonground.bin";
static constexpr const char *PNG_SETTINGS_DISPLAY_BRIGHTNESS = APP_RES_PATH "/settings/SETTINGS_DISPLAY_BRIGHTNESS.bin"; // 显示与亮度
static constexpr const char *PNG_SETTINGS_BLUETOOTH = APP_RES_PATH "/settings/SETTINGS_BLUETOOTH.bin"; // 蓝牙
static constexpr const char *PNG_SETTINGS_SOUND_VIBRATION = APP_RES_PATH "/settings/SETTINGS_SOUND_VIBRATION.bin"; // 声音与震动
- static constexpr const char *PNG_SETTINGS_SECONDARY_FUNCTION = APP_RES_PATH "/settings/SETTINGS_QUICK_ACCESS.bin"; // 辅助功能
+ static constexpr const char *PNG_SETTINGS_SECONDARY_FUNCTION = APP_RES_PATH "/settings/SETTINGS_QUICK_ACCESS.bin"; // 辅助功能
static constexpr const char *PNG_SETTINGS_SYSTEM = APP_RES_PATH "/settings/SETTINGS_SYSTEM.bin"; // 系统
/* ---------------------------------- 通用图片 ---------------------------------- */
static constexpr const char *PNG_CHECKBOX_OFF_IMAGE = APP_RES_PATH "/CHECKBOX_OFF.bin"; // checkbox未选中图片
static constexpr const char *PNG_SETTING_NEXT_IMAGE = APP_RES_PATH "/SETTING_NEXT.bin"; // 箭头图片
static constexpr const char *PNG_SETTING_BACKGROUND_IMAGE = APP_RES_PATH "/SETTING_BACKGROUND.bin"; // 按钮的背景图片
static constexpr const char *PNG_VOLUME_CONTROL_VECTOR = APP_RES_PATH "/VolumeControlVector.bin"; // 调节音量图片
+ static constexpr const char *PNG_ANIMATOR1_IMAGE = APP_RES_PATH "/Record/animator1.bin";
+ static constexpr const char *PNG_ANIMATOR2_IMAGE = APP_RES_PATH "/Record/animator2.bin";
/* -------------------------------- 已删除的不必要图片 ------------------------------- */
static constexpr const char *PNG_APPLIST_UI_SAMPLE_IMAGE = APP_RES_PATH "/APPLIST_UI_SAMPLE.bin"; // Applist图标
static constexpr const char *PNG_APPLIST_TEMP_IMAGE = APP_RES_PATH "/TEMP_IMAGE.bin";
#include "dial/include/DialPresenter.h"
#include "dial/include/DialView.h"
+#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"
+#include "weather/include/GetWeatherDataErrorView.h"
+
#include "BluetoothHeadsetEvent.h"
#include "graphic_hardware_config.h"
#include "graphic_service.h"
{VIEW_REBOOT, &NativeLauncher::InitRebootSlice},
{VIEW_DIAL, &NativeLauncher::InitDialSlice},
+ {VIEW_WEATHER,&NativeLauncher::InitWeatherSlice}, //天气
+ {VIEW_WEATHER_REPORT,&NativeLauncher::InitWeatherReportSlice}, //气象报告
+ {VIEW_FUTURE_WEATHER,&NativeLauncher::InitFutureWeatherSlice}, //未来天气
+ {VIEW_GET_WEATHER_DATA_ERROR,&NativeLauncher::InitGetWeatherDataErrorSlice}, //获取天气数据失败
{VIEW_UISAMPLE, &NativeLauncher::InitUISampleSlice}};
static const ViewIdToString VIEW_MAPPER[] = {
}
void NativeLauncher::InitDialSlice(void)
{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitBloodSlice");
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitDialSlice");
SliceProxy *dialview = new AbilitySliceProxy<DialView, DialPresenter>;
if (dialview == nullptr)
{
NativeAbility::GetInstance().AddSliceProxy(VIEW_DIAL, dialview);
}
+ void NativeLauncher::InitWeatherSlice(void) // 天气
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitWeatherSlice");
+ SliceProxy *mainweather = new AbilitySliceProxy<MainWeatherView, MainWeatherPresenter>;
+ if (mainweather == nullptr)
+ {
+ return;
+ }
+ 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");
+ SliceProxy *futureweather = new AbilitySliceProxy<FutureWeatherView, FutureWeatherPresenter>;
+ if (futureweather == nullptr)
+ {
+ return;
+ }
+ NativeAbility::GetInstance().AddSliceProxy(VIEW_FUTURE_WEATHER, futureweather);
+ }
+
+ void NativeLauncher::InitGetWeatherDataErrorSlice(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitGetWeatherDataErrorSlice");
+ SliceProxy *getweatherdataerror = new AbilitySliceProxy<GetWeatherDataErrorView, GetWeatherDataErrorPresenter>;
+ if (getweatherdataerror == nullptr)
+ {
+ return;
+ }
+ NativeAbility::GetInstance().AddSliceProxy(VIEW_GET_WEATHER_DATA_ERROR, getweatherdataerror);
+ }
+
}
{VIEW_BLOODOXY_SAMPLE, PNG_APPLIST_SPO2_IMAGE, PNG_APPLIST_SPO2_IMAGE, "血氧饱和度", nullptr},
{VIEW_COMPASS, PNG_APPLIST_COMPASS_IMAGE, PNG_APPLIST_COMPASS_IMAGE, "指南针", nullptr},
{VIEW_INDOORWALK, PNG_APPLIST_WALK_IMAGE, PNG_APPLIST_WALK_IMAGE, "室内步行", nullptr},
+ {VIEW_WEATHER, PNG_APPLIST_WEATHER_IMAGE, PNG_APPLIST_WEATHER_IMAGE, "天气", nullptr},
{VIEW_SETTING, PNG_APPLIST_SETTING_IMAGE, PNG_APPLIST_SETTING_IMAGE, "设置", nullptr},
#if 0
{VIEW_MAIN_TEMP, PNG_APPLIST_TEMP_IMAGE, PNG_APPLIST_TEMP_IMAGE, "体温", nullptr},
#include "blood/include/BloodView.h"
#include "traing/include/TraingView.h"
#include "ApplistCardView.h"
+#include "weather/include/WeatherControlView.h"
namespace OHOS
{
class MainPresenterSample;
HeartRateView *heartRateView{nullptr};
Digital_clockView *dialView{nullptr};
BloodView *bloodView{nullptr};
+ WeatherControlView *weatherControlView{nullptr};
TraingView *traingView{nullptr};
ApplistCardView *applistCardView{nullptr};
/* -------------------------------------------------------------------------- */
{BloodOxygen, &MainViewSample::InitBloodOxygenPage},
{TRAINING, &MainViewSample::InitTrainingPage},
{COMPASS, &MainViewSample::InitCompassPage},
+ {WEATHER, &MainViewSample::InitWeatherPage},
{PLAYER,&MainViewSample::InitMusicPlayerPage},
#if 0
{APPLIST,&MainViewSample::InitApplistPage}
return traingView;
}
+ //主界面天气卡片
+ UICardPage *MainViewSample::InitWeatherPage(void)
+ {
+ weatherControlView = new WeatherControlView();
+ if(weatherControlView == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mainweatherView new fail");
+ return nullptr;
+ }
+ return weatherControlView;
+ }
+
// 主界面功能列表界面
UICardPage *MainViewSample::InitApplistPage(void)
{
TRAINING,
BloodOxygen,
COMPASS,
+ WEATHER,
PLAYER,
//APPLIST,
MAX_CARD,
--- /dev/null
+#ifndef FUTURE_WEATHER_PRESENTER_H\r
+#define FUTURE_WEATHER_PRESENTER_H\r
+\r
+#include "Presenter.h"\r
+\r
+#include "FutureWeatherView.h"\r
+\r
+namespace OHOS\r
+{\r
+ class FutureWeatherView;\r
+\r
+ class FutureWeatherPresenter : public Presenter<FutureWeatherView>,\r
+ public UIView::OnClickListener,\r
+ public UIView::OnDragListener\r
+ {\r
+ public:\r
+ FutureWeatherPresenter();\r
+ virtual ~FutureWeatherPresenter();\r
+\r
+ void OnStart() override;\r
+ void OnPause() override;\r
+ void OnResume() override;\r
+ void OnStop() override;\r
+\r
+ static FutureWeatherPresenter *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 // FutureWeather_PRESENTER_H
\ No newline at end of file
--- /dev/null
+#ifndef FUTURE_WEATHER_VIEW_H\r
+#define FUTURE_WEATHER_VIEW_H\r
+\r
+#include "BaseView.h"\r
+#include "View.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_list.h"\r
+#include "components/icon_adapter.h"\r
+\r
+namespace OHOS\r
+{\r
+#define weather_src "/user/res/weather/"\r
+static const char *weather65x65[] =\r
+{\r
+weather_src"weather_sunny.bin", //晴天\r
+weather_src"weather_clear-cloudy.bin", //多云\r
+weather_src"weather_rain.bin", //阵雨\r
+weather_src"weather_thundershower.bin",\r
+weather_src"weather_foggy.bin",\r
+weather_src"weather_unknown.bin",\r
+weather_src"weather_overcast.bin",\r
+weather_src"weather_clear-sunny.bin",\r
+weather_src"weather_duststorm.bin",\r
+weather_src"weather_haze.bin",\r
+weather_src"weather_snow.bin",\r
+weather_src"weather_sunny-cloudy.bin", \r
+};\r
+\r
+\r
+}\r
+\r
+namespace OHOS\r
+{\r
+ class FutureWeatherPresenter;\r
+ class FutureWeatherView : public View<FutureWeatherPresenter>\r
+ {\r
+\r
+ public:\r
+ FutureWeatherView();\r
+ virtual ~FutureWeatherView();\r
+ static FutureWeatherView *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
+\r
+ private:\r
+ UIView::OnDragListener *draglistener{nullptr};\r
+ UIViewGroup *container_ = nullptr;\r
+ UIScrollView *scrollView1_ = nullptr;\r
+ UILabel *label1_ = nullptr;\r
+ UIList *list = nullptr;\r
+ IconAdapter *listadapter = nullptr;\r
+ List<IconItemNode *> *listdata = nullptr;\r
+ bool viewInitStatus{false};\r
+ };\r
+} // namespace OHOS\r
+#endif // FutureWeather_PRESENTER_H
\ No newline at end of file
--- /dev/null
+#ifndef Get_WEATHER_DATA_ERROR_PRESENTER_H\r
+#define Get_WEATHER_DATA_ERROR_PRESENTER_H\r
+\r
+#include "Presenter.h"\r
+#include "GetWeatherDataErrorView.h"\r
+\r
+namespace OHOS\r
+{\r
+ class GetWeatherDataErrorView;\r
+\r
+ class GetWeatherDataErrorPresenter : public Presenter<GetWeatherDataErrorView>,\r
+ public UIView::OnClickListener,\r
+ public UIView::OnDragListener\r
+ {\r
+ public:\r
+ GetWeatherDataErrorPresenter();\r
+ virtual ~GetWeatherDataErrorPresenter();\r
+\r
+ void OnStart() override;\r
+ void OnPause() override;\r
+ void OnResume() override;\r
+ void OnStop() override;\r
+\r
+ static GetWeatherDataErrorPresenter *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 // GetWeatherDataError_PRESENTER_H
\ No newline at end of file
--- /dev/null
+#ifndef Get_WEATHER_DATA_ERROR_VIEW_H\r
+#define Get_WEATHER_DATA_ERROR_VIEW_H\r
+\r
+#include "BaseView.h"\r
+#include "View.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_image_view.h"\r
+namespace OHOS\r
+{\r
+ class GetWeatherDataErrorPresenter;\r
+ class GetWeatherDataErrorView : public View<GetWeatherDataErrorPresenter>\r
+ {\r
+\r
+ public:\r
+ GetWeatherDataErrorView();\r
+ virtual ~GetWeatherDataErrorView();\r
+ static GetWeatherDataErrorView *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
+\r
+ private:\r
+ UIView::OnDragListener *draglistener{nullptr};\r
+ UIViewGroup *container_ = nullptr;\r
+ UIScrollView *scrollView1_ = nullptr;\r
+ UILabel *label1_ = nullptr;\r
+ UIImageView *image1_ = nullptr;\r
+ bool viewInitStatus{false};\r
+ };\r
+} // namespace OHOS\r
+#endif // GetWeatherDataError_PRESENTER_H
\ No newline at end of file
--- /dev/null
+#ifndef MAIN_WEATHER_PRESENTER_H\r
+#define MAIN_WEATHER_PRESENTER_H\r
+\r
+#include "Presenter.h"\r
+#include "MainWeatherView.h"\r
+\r
+/*主天气视图*/\r
+namespace OHOS\r
+{\r
+ class MainWeatherView;\r
+\r
+ class MainWeatherPresenter : public Presenter<MainWeatherView>,\r
+ public UIView::OnClickListener,\r
+ public UIView::OnDragListener\r
+ {\r
+ public:\r
+ MainWeatherPresenter();\r
+ virtual ~MainWeatherPresenter();\r
+\r
+ void OnStart() override;\r
+ void OnPause() override;\r
+ void OnResume() override;\r
+ void OnStop() override;\r
+\r
+ static MainWeatherPresenter *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 // MainWeather_PRESENTER_H
\ No newline at end of file
--- /dev/null
+#ifndef MAIN_WEATHER_VIEW_H\r
+#define MAIN_WEATHER_VIEW_H\r
+\r
+#include "BaseView.h"\r
+#include "View.h"\r
+\r
+#include "components/ui_view_group.h"\r
+#include "components/ui_scroll_view.h"\r
+#include "components/ui_label.h"\r
+#include "components/ui_image_view.h"\r
+#include "components/ui_image_animator.h"\r
+#include "weather/include/WeatherView.h"\r
+#include <iostream>\r
+\r
+\r
+namespace OHOS\r
+{\r
+ class MainWeatherPresenter;\r
+ class MainWeatherView : public View<MainWeatherPresenter>\r
+ {\r
+\r
+ public:\r
+ MainWeatherView();\r
+ virtual ~MainWeatherView();\r
+ static MainWeatherView *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
+ UILabel *InitLabel(int x, int y, const char *text, const char *id, int textfont, int lineheight);\r
+ void PreLoad(void);\r
+\r
+ private:\r
+ std::string GetTime();\r
+ std::string GetWeatherImage();\r
+ std::string GetWeatherTemperature();\r
+ std::string GetWeatherDescription();\r
+ std::string GetWeatherArea();\r
+ std::string GetWeatherMaxAndMinTemperature();\r
+\r
+ std::string Time; // 时间\r
+ std::string WeatherImag; // 天气图片\r
+ std::string Temperature; // 温度\r
+ std::string WeatherDescription; // 天气描述\r
+ std::string WeatherArea; // 天气地区\r
+ std::string MaxandMinTemperature; // 最高与最低气温\r
+ private:\r
+ UIViewGroup *container_ = nullptr;\r
+ UIScrollView *scrollView1_ = nullptr;\r
+ UILabel *label1_ = nullptr;\r
+ UILabel *label2_ = nullptr;\r
+ UIImageView *image1_ = nullptr;\r
+ UILabel *label3_ = nullptr;\r
+ UILabel *label4_ = nullptr;\r
+ UILabel *label5_ = nullptr;\r
+ UIImageAnimatorView *imageAnimator1_ = nullptr;\r
+ bool viewInitStatus{false};\r
+ };\r
+} // namespace OHOS\r
+#endif
\ No newline at end of file
--- /dev/null
+#ifndef WEATHER_CONTROL_VIEW_H
+#define WEATHER_CONTROL_VIEW_H
+/*该视图主要放在主视图*/
+
+#include "components/root_view.h"
+#include "components/ui_card_page.h"
+#include "wearable_log.h"
+#include "weather/include/WeatherView.h"
+namespace OHOS
+{
+ class WeatherControlView : public UICardPage
+ {
+ public:
+ WeatherControlView();
+ virtual ~WeatherControlView();
+ bool InitView(void);
+ void PreLoad(void) override;
+ void UnLoad(void) override;
+
+ private:
+ void ClearAll(void);
+ WeatherView *weatherView{nullptr};
+ bool viewiInitStatus{false};
+ };
+}
+#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
--- /dev/null
+#ifndef WEATHER_REPORT_VIEW_H\r
+#define WEATHER_REPORT_VIEW_H\r
+\r
+#include "BaseView.h"\r
+#include "View.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_image_animator.h"\r
+namespace OHOS\r
+{\r
+ class WeatherReportPresenter;\r
+ class WeatherReportView : public View<WeatherReportPresenter>\r
+ {\r
+\r
+ public:\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
+\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
+ bool viewInitStatus{false};\r
+ };\r
+} // namespace OHOS\r
+#endif // WeatherReport_PRESENTER_H
\ No newline at end of file
--- /dev/null
+#ifndef WEATHER_VIEW_H
+#define WEATHER_VIEW_H
+
+#include "BaseView.h"
+#include "View.h"
+
+#include "components/root_view.h"
+#include "components/ui_view_group.h"
+#include "components/ui_scroll_view.h"
+#include "components/ui_label.h"
+#include "components/ui_image_view.h"
+#include "components/ui_image_animator.h"
+#include "wearable_log.h"
+#include "AppGroupView.h"
+#include <iostream>
+
+namespace OHOS
+{
+#define weather_src "/user/res/weather/"
+ static const char *background = weather_src "WEATHER_BACKGROUND.bin";
+ static const char *weather130x130[] =
+ {
+ weather_src "WEATHER_CLEAR-CLOUDY.bin",
+ weather_src "WEATHER_CLEAR-SUNNY.bin",
+ weather_src "WEATHER_DUSTSTORM.bin",
+ weather_src "WEATHER_FOGGY.bin",
+ weather_src "WEATHER_HAZE.bin",
+ weather_src "WEATHER_OVERCAST.bin",
+ weather_src "WEATHER_RAIN.bin",
+ weather_src "WEATHER_SNOW.bin",
+ weather_src "WEATHER_SUNNY.bin",
+ weather_src "WEATHER_SUNNY-CLOUNDY.bin",
+ weather_src "WEATHER_THUNDERSHOWER.bin",
+ weather_src "WEATHER_UNKNOWN.bin"};
+}
+
+namespace OHOS
+{
+ class WeatherView : public UIViewGroup
+ {
+
+ public:
+ WeatherView();
+ virtual ~WeatherView();
+ static WeatherView *GetInstance(void);
+ bool InitPage(void);
+ bool InitView(void);
+ void ClearAll();
+ bool GetInitViewState(void);
+
+ private:
+ UILabel *InitLabel(int x, int y, const char *text, const char *id, int textfont, int lineheight);
+
+ private:
+ std::string GetTime();
+ std::string GetWeatherImage();
+ std::string GetWeatherTemperature();
+ std::string GetWeatherDescription();
+ std::string GetWeatherArea();
+ std::string GetWeatherMaxAndMinTemperature();
+
+ std::string Time; // 时间
+ std::string WeatherImag; // 天气图片
+ std::string Temperature; // 温度
+ std::string WeatherDescription; // 天气描述
+ std::string WeatherArea; // 天气地区
+ std::string MaxandMinTemperature; // 最高与最低气温
+ private:
+ UIImageView *showWeatherImage = nullptr; // 显示天气图片
+ UILabel *showCurrentTimeLabel{nullptr}; // 显示当前时间
+ UILabel *showTemperatureLabel{nullptr}; // 显示天气温度
+ UILabel *showWeatherDescriptionLabel{nullptr}; // 显示天气描述
+ UILabel *showWeatherAreaLabel{nullptr}; // 显示天气地区
+ UILabel *showMaxandMinTemperatureLabel{nullptr}; // 显示最高与最低气温
+ bool viewInitStatus{false};
+ };
+} // namespace OHOS
+
+#endif
\ No newline at end of file
--- /dev/null
+#include "AppViewIDs.h"\r
+#include "NativeAbility.h"\r
+\r
+#include "weather/include/FutureWeatherPresenter.h"\r
+\r
+namespace OHOS\r
+{\r
+\r
+ // 当前Presenter属性实例化的内存指针\r
+ static FutureWeatherPresenter *g_pFutureWeatherPresenter = nullptr;\r
+\r
+ FutureWeatherPresenter::FutureWeatherPresenter()\r
+ {\r
+\r
+ g_pFutureWeatherPresenter = this;\r
+ }\r
+\r
+ FutureWeatherPresenter::~FutureWeatherPresenter()\r
+ {\r
+\r
+ g_pFutureWeatherPresenter = nullptr;\r
+ }\r
+\r
+ FutureWeatherPresenter *FutureWeatherPresenter::GetInstance()\r
+ {\r
+\r
+ return g_pFutureWeatherPresenter;\r
+ }\r
+\r
+ void FutureWeatherPresenter::OnStart()\r
+ {\r
+\r
+ Presenter<FutureWeatherView>::OnStart();\r
+ }\r
+\r
+ void FutureWeatherPresenter::OnPause(void)\r
+ {\r
+\r
+ Presenter<FutureWeatherView>::OnPause();\r
+ }\r
+\r
+ void FutureWeatherPresenter::OnResume(void)\r
+ {\r
+\r
+ Presenter<FutureWeatherView>::OnResume();\r
+ }\r
+\r
+ void FutureWeatherPresenter::OnStop(void)\r
+ {\r
+\r
+ Presenter<FutureWeatherView>::OnStop();\r
+ }\r
+\r
+ bool FutureWeatherPresenter::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_REPORT); // 未来天气界面从上往下滑进入气象报告界面\r
+ }\r
+ return true;\r
+ }\r
+\r
+ bool FutureWeatherPresenter::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
--- /dev/null
+#include "weather/include/FutureWeatherView.h"\r
+#include "weather/include/FutureWeatherPresenter.h"\r
+\r
+#include "common/image_cache_manager.h"\r
+#include "UiConfig.h"\r
+#include "ui_resource_image.h"\r
+\r
+namespace OHOS\r
+{\r
+\r
+ static FutureWeatherView *g_pFutureWeatherView{nullptr};\r
+\r
+ FutureWeatherView::FutureWeatherView()\r
+ {\r
+\r
+ g_pFutureWeatherView = this;\r
+ }\r
+\r
+ FutureWeatherView::~FutureWeatherView()\r
+ {\r
+ DeInitView();\r
+ g_pFutureWeatherView = nullptr;\r
+ }\r
+\r
+ FutureWeatherView *FutureWeatherView::GetInstance()\r
+ {\r
+\r
+ return g_pFutureWeatherView;\r
+ }\r
+\r
+ void FutureWeatherView::InitView()\r
+ {\r
+ if (scrollView1_ == nullptr)\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
+ scrollView1_->SetReboundSize(50); // 设置回弹大小\r
+ scrollView1_->SetScrollBarCenter({200, 200});\r
+ container_->Add(scrollView1_);\r
+ scrollView1_->SetVisible(true);\r
+\r
+ if (label1_ == nullptr)\r
+ {\r
+ label1_ = new UILabel();\r
+ }\r
+ label1_->SetPosition(179, 52);\r
+ label1_->Resize(108, 35);\r
+ label1_->SetViewId("label1");\r
+ label1_->SetStyle(STYLE_TEXT_FONT, 30);\r
+ label1_->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+ label1_->SetText("未来7天");\r
+ label1_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+ label1_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+ label1_->SetRollSpeed(0);\r
+ label1_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+ scrollView1_->Add(label1_);\r
+ label1_->SetVisible(true);\r
+\r
+ if (list == nullptr)\r
+ {\r
+ list = new UIList();\r
+ }\r
+ list->SetPosition(65, 140);\r
+ list->Resize(354, 520);\r
+ list->SetViewId("list1");\r
+ list->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);\r
+ list->SetReboundSize(50); // 设置回弹值\r
+ if (listdata == nullptr)\r
+ {\r
+ listdata = new List<IconItemNode *>();\r
+ }\r
+ IconItemNode *list3data1 = new IconItemNode();\r
+ list3data1->imagePath = "/user/res/weather/weather_sunny.bin";\r
+ list3data1->txt = "周一 晴天 18°/24°";\r
+ listdata->PushBack(list3data1);\r
+\r
+ IconItemNode *list3data2 = new IconItemNode();\r
+ list3data2->imagePath = "/user/res/weather/weather_clear-cloudy.bin";\r
+ list3data2->txt = "周二 多云 19°/24°";\r
+ listdata->PushBack(list3data2);\r
+\r
+ IconItemNode *list3data3 = new IconItemNode();\r
+ list3data3->imagePath = "/user/res/weather/weather_rain.bin";\r
+ list3data3->txt = " 周三 阵雨 -11°/-12°";\r
+ listdata->PushBack(list3data3);\r
+\r
+ IconItemNode *list3data4 = new IconItemNode();\r
+ list3data4->imagePath = "/user/res/weather/weather_sunny.bin";\r
+ list3data4->txt = "周四 晴天 18°/22°";\r
+ listdata->PushBack(list3data4);\r
+\r
+ IconItemNode *list3data5 = new IconItemNode();\r
+ list3data5->imagePath = "/user/res/weather/weather_foggy.bin";\r
+ list3data5->txt = "周五 阴天 16°/20°";\r
+ listdata->PushBack(list3data5);\r
+\r
+ IconItemNode *list3data6 = new IconItemNode();\r
+ list3data6->imagePath = "/user/res/weather/weather_thundershower.bin";\r
+ list3data6->txt = " 周六 雷阵雨 10°/15°";\r
+ listdata->PushBack(list3data6);\r
+\r
+ IconItemNode *list3data7 = new IconItemNode();\r
+ list3data7->imagePath = "/user/res/weather/weather_overcast.bin";\r
+ list3data7->txt = "周日 阴 20°/24°";\r
+ listdata->PushBack(list3data7);\r
+ if (listadapter == nullptr)\r
+ {\r
+ listadapter = new IconAdapter();\r
+ }\r
+ listadapter->SetItemSize(355, 65);\r
+ listadapter->SetImageSize(65, 65);\r
+ listadapter->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 26);\r
+ listadapter->SetData(listdata);\r
+ list->SetAdapter(listadapter);\r
+\r
+ // Add to scrollView1\r
+ scrollView1_->Add(list);\r
+ list->SetVisible(true);\r
+ }\r
+\r
+ void FutureWeatherView::DeInitView()\r
+ {\r
+ if (viewInitStatus == true)\r
+ {\r
+ container_->RemoveAll();\r
+ scrollView1_->RemoveAll();\r
+ delete label1_;\r
+ label1_ = nullptr;\r
+\r
+ delete list;\r
+ list = nullptr;\r
+\r
+ delete listadapter;\r
+ listadapter = nullptr;\r
+\r
+ delete draglistener;\r
+ draglistener = nullptr;\r
+\r
+ listdata->Clear();\r
+ delete listdata;\r
+ listdata = nullptr;\r
+\r
+ delete scrollView1_;\r
+ scrollView1_ = nullptr;\r
+\r
+ delete container_;\r
+ container_ = nullptr;\r
+ }\r
+ }\r
+\r
+ void FutureWeatherView::PreLoad(void)\r
+ {\r
+ if (!viewInitStatus)\r
+ {\r
+ InitView();\r
+ viewInitStatus = true;\r
+ }\r
+ }\r
+ void FutureWeatherView::OnStart()\r
+ {\r
+ View<FutureWeatherPresenter>::OnStart();\r
+ if (container_ == nullptr)\r
+ {\r
+ container_ = new UIViewGroup();\r
+ container_->Resize(466, 466);\r
+ container_->SetTouchable(true);\r
+ container_->SetDraggable(true);\r
+ draglistener = static_cast<UIView::OnDragListener *>(FutureWeatherPresenter::GetInstance());\r
+ container_->SetOnDragListener(draglistener);\r
+ }\r
+ PreLoad();\r
+ RootView::GetInstance()->Add(container_);\r
+ }\r
+\r
+ void FutureWeatherView::OnSetUpView()\r
+ {\r
+\r
+ View<FutureWeatherPresenter>::OnSetUpView();\r
+ Draw();\r
+ }\r
+\r
+ void FutureWeatherView::OnTearDownView()\r
+ {\r
+\r
+ View<FutureWeatherPresenter>::OnTearDownView();\r
+ return;\r
+ }\r
+\r
+ void FutureWeatherView::OnStop()\r
+ {\r
+\r
+ View<FutureWeatherPresenter>::OnStop();\r
+ RootView::GetInstance()->RemoveAll();\r
+ return;\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+#include "AppViewIDs.h"\r
+#include "NativeAbility.h"\r
+#include "weather/include/GetWeatherDataErrorPresenter.h"\r
+\r
+namespace OHOS\r
+{\r
+\r
+ // 当前Presenter属性实例化的内存指针\r
+ static GetWeatherDataErrorPresenter *g_pGetWeatherDataErrorPresenter = nullptr;\r
+\r
+ GetWeatherDataErrorPresenter::GetWeatherDataErrorPresenter()\r
+ {\r
+\r
+ g_pGetWeatherDataErrorPresenter = this;\r
+ }\r
+\r
+ GetWeatherDataErrorPresenter::~GetWeatherDataErrorPresenter()\r
+ {\r
+\r
+ g_pGetWeatherDataErrorPresenter = nullptr;\r
+ }\r
+\r
+ GetWeatherDataErrorPresenter *GetWeatherDataErrorPresenter::GetInstance()\r
+ {\r
+\r
+ return g_pGetWeatherDataErrorPresenter;\r
+ }\r
+\r
+ void GetWeatherDataErrorPresenter::OnStart()\r
+ {\r
+\r
+ Presenter<GetWeatherDataErrorView>::OnStart();\r
+ }\r
+\r
+ void GetWeatherDataErrorPresenter::OnPause(void)\r
+ {\r
+\r
+ Presenter<GetWeatherDataErrorView>::OnPause();\r
+ }\r
+\r
+ void GetWeatherDataErrorPresenter::OnResume(void)\r
+ {\r
+\r
+ Presenter<GetWeatherDataErrorView>::OnResume();\r
+ }\r
+\r
+ void GetWeatherDataErrorPresenter::OnStop(void)\r
+ {\r
+\r
+ Presenter<GetWeatherDataErrorView>::OnStop();\r
+ }\r
+\r
+ bool GetWeatherDataErrorPresenter::OnDrag(UIView &view, const DragEvent &event)\r
+ {\r
+\r
+ if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&\r
+ (event.GetDeltaX() > 20) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))\r
+ {\r
+ NativeAbility::GetInstance().ChangeSlice(VIEW_WEATHER);\r
+ }\r
+ return true;\r
+ }\r
+\r
+ bool GetWeatherDataErrorPresenter::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
--- /dev/null
+#include "weather/include/GetWeatherDataErrorView.h"\r
+#include "weather/include/GetWeatherDataErrorPresenter.h"\r
+#include "UiConfig.h"\r
+\r
+/* 天气获取数据失败后会调用该视图*/\r
+namespace OHOS\r
+{\r
+\r
+ static GetWeatherDataErrorView *g_pGetWeatherDataErrorView{nullptr};\r
+\r
+ GetWeatherDataErrorView::GetWeatherDataErrorView()\r
+ {\r
+\r
+ g_pGetWeatherDataErrorView = this;\r
+ }\r
+\r
+ GetWeatherDataErrorView::~GetWeatherDataErrorView()\r
+ {\r
+ if (viewInitStatus == true)\r
+ {\r
+ DeInitView();\r
+ }\r
+ g_pGetWeatherDataErrorView = nullptr;\r
+ }\r
+\r
+ GetWeatherDataErrorView *GetWeatherDataErrorView::GetInstance()\r
+ {\r
+\r
+ return g_pGetWeatherDataErrorView;\r
+ }\r
+\r
+ void GetWeatherDataErrorView::InitView()\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
+ container_->Add(scrollView1_);\r
+ scrollView1_->SetVisible(true);\r
+\r
+ // Add Label to App\r
+ if (label1_ == nullptr)\r
+ {\r
+ label1_ = new UILabel();\r
+ }\r
+ label1_->SetPosition(113, 268);\r
+ label1_->Resize(240, 70);\r
+ label1_->SetViewId("label1");\r
+ label1_->SetStyle(STYLE_TEXT_FONT, 30);\r
+ label1_->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+\r
+ // Set additional property\r
+ label1_->SetText("未获取到天气信息\n请前往APP更新");\r
+ label1_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+ label1_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+ label1_->SetRollSpeed(0);\r
+ label1_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+\r
+ // Add to scrollView1\r
+ scrollView1_->Add(label1_);\r
+ label1_->SetVisible(true);\r
+\r
+ // Add ImageView to App\r
+ if (image1_ == nullptr)\r
+ {\r
+ image1_ = new UIImageView();\r
+ }\r
+ image1_->SetPosition(168, 127);\r
+ image1_->Resize(130, 130);\r
+ image1_->SetViewId("image1");\r
+ image1_->SetSrc("/user/res/weather/WEATHER_UNKNOWN.bin");\r
+\r
+ // Add to scrollView1\r
+ scrollView1_->Add(image1_);\r
+ image1_->SetVisible(true);\r
+ }\r
+\r
+ void GetWeatherDataErrorView::DeInitView()\r
+ {\r
+ container_->RemoveAll();\r
+ scrollView1_->RemoveAll();\r
+ if (label1_ != nullptr)\r
+ {\r
+ delete label1_;\r
+ label1_ = nullptr;\r
+ }\r
+ if (image1_ != nullptr)\r
+ {\r
+ delete image1_;\r
+ image1_ = 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 GetWeatherDataErrorView::PreLoad(void)\r
+ {\r
+ if (!viewInitStatus)\r
+ {\r
+ InitView();\r
+ viewInitStatus = true;\r
+ }\r
+ }\r
+ void GetWeatherDataErrorView::OnStart()\r
+ {\r
+ container_ = new UIViewGroup();\r
+ if (container_ == nullptr)\r
+ {\r
+ return;\r
+ }\r
+ // container_容器属性 扩展\r
+ container_->SetPosition(0, 0);\r
+ container_->SetWidth(Screen::GetInstance().GetWidth());\r
+ container_->SetHeight(Screen::GetInstance().GetHeight());\r
+\r
+ draglistener = static_cast<UIView::OnDragListener *>(GetWeatherDataErrorPresenter::GetInstance());\r
+ if (draglistener == nullptr)\r
+ {\r
+ return;\r
+ }\r
+ container_->SetOnDragListener(draglistener);\r
+ container_->SetTouchable(true);\r
+ container_->SetDraggable(true);\r
+ PreLoad();\r
+ RootView::GetInstance()->Add(container_);\r
+ }\r
+\r
+ void GetWeatherDataErrorView::OnSetUpView()\r
+ {\r
+\r
+ View<GetWeatherDataErrorPresenter>::OnSetUpView();\r
+ Draw();\r
+ }\r
+\r
+ void GetWeatherDataErrorView::OnTearDownView()\r
+ {\r
+\r
+ View<GetWeatherDataErrorPresenter>::OnTearDownView();\r
+ return;\r
+ }\r
+\r
+ void GetWeatherDataErrorView::OnStop()\r
+ {\r
+\r
+ View<GetWeatherDataErrorPresenter>::OnStop();\r
+ RootView::GetInstance()->RemoveAll();\r
+ return;\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+#include "AppViewIDs.h"\r
+#include "NativeAbility.h"\r
+#include "weather/include/MainWeatherPresenter.h"\r
+\r
+namespace OHOS\r
+{\r
+\r
+ // 当前Presenter属性实例化的内存指针\r
+ static MainWeatherPresenter *g_pMainWeatherPresenter = nullptr;\r
+\r
+ MainWeatherPresenter::MainWeatherPresenter()\r
+ {\r
+\r
+ g_pMainWeatherPresenter = this;\r
+ }\r
+\r
+ MainWeatherPresenter::~MainWeatherPresenter()\r
+ {\r
+\r
+ g_pMainWeatherPresenter = nullptr;\r
+ }\r
+\r
+ MainWeatherPresenter *MainWeatherPresenter::GetInstance()\r
+ {\r
+\r
+ return g_pMainWeatherPresenter;\r
+ }\r
+\r
+ void MainWeatherPresenter::OnStart()\r
+ {\r
+\r
+ Presenter<MainWeatherView>::OnStart();\r
+ }\r
+\r
+ void MainWeatherPresenter::OnPause(void)\r
+ {\r
+\r
+ Presenter<MainWeatherView>::OnPause();\r
+ }\r
+\r
+ void MainWeatherPresenter::OnResume(void)\r
+ {\r
+\r
+ Presenter<MainWeatherView>::OnResume();\r
+ }\r
+\r
+ void MainWeatherPresenter::OnStop(void)\r
+ {\r
+\r
+ Presenter<MainWeatherView>::OnStop();\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
+ 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
+ }\r
+\r
+ bool MainWeatherPresenter::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
--- /dev/null
+#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
+ 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
+ {\r
+ if (container_ == nullptr)\r
+ {\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
+ label3_ = InitLabel(111, 264, WeatherDescription.c_str(), "label3", 35, 41);\r
+ scrollView1_->Add(label3_);\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
+ {\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 (label3_ != nullptr)\r
+ {\r
+ delete label3_;\r
+ label3_ = 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
+ }\r
+ PreLoad();\r
+ RootView::GetInstance()->Add(container_);\r
+ }\r
+\r
+ void MainWeatherView::OnSetUpView()\r
+ {\r
+ View<MainWeatherPresenter>::OnSetUpView();\r
+ Draw();\r
+ }\r
+\r
+ void MainWeatherView::OnTearDownView()\r
+ {\r
+\r
+ View<MainWeatherPresenter>::OnTearDownView();\r
+ return;\r
+ }\r
+\r
+ void MainWeatherView::OnStop()\r
+ {\r
+\r
+ View<MainWeatherPresenter>::OnStop();\r
+ RootView::GetInstance()->RemoveAll();\r
+ return;\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+#include "weather/include/WeatherControlView.h"
+
+namespace OHOS
+{
+ WeatherControlView::WeatherControlView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherControlView::WeatherControlView()");
+ SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
+ }
+
+ WeatherControlView::~WeatherControlView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherControlView::~WeatherControlView()");
+ ClearAll();
+ }
+
+ void WeatherControlView::ClearAll(void)
+ {
+ if (viewiInitStatus == true)
+ {
+ RemoveAll();
+ if (weatherView != nullptr)
+ {
+ delete weatherView;
+ weatherView = nullptr;
+ }
+ }
+ }
+
+ bool WeatherControlView::InitView(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherControlView::InitView()");
+ weatherView = new WeatherView();
+ if (weatherView == nullptr)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::new mainweatherView fail!");
+ return false;
+ }
+ if (weatherView->InitPage() == false)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView->InitPage() == false!");
+ return false;
+ }
+ Add(weatherView);
+ viewiInitStatus = true;
+ return true;
+ }
+
+ void WeatherControlView::PreLoad(void)
+ {
+ if (!viewiInitStatus)
+ {
+ InitView();
+ viewiInitStatus = true;
+ }
+ }
+
+ void WeatherControlView::UnLoad(void)
+ {
+ // Weather's usage scenes is complicated, so we do not release it's resources inner slice.
+ }
+
+}
\ 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
--- /dev/null
+#include "weather/include/WeatherReportView.h"\r
+#include "weather/include/WeatherReportPresenter.h"\r
+#include "UiConfig.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
+ g_pWeatherReportView = this;\r
+ }\r
+\r
+ WeatherReportView::~WeatherReportView()\r
+ {\r
+ if (viewInitStatus == true)\r
+ {\r
+ DeInitView();\r
+ }\r
+ g_pWeatherReportView = nullptr;\r
+ }\r
+\r
+ WeatherReportView *WeatherReportView::GetInstance()\r
+ {\r
+\r
+ return g_pWeatherReportView;\r
+ }\r
+\r
+ void WeatherReportView::InitView()\r
+ {\r
+ if (container_ == nullptr)\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
+ }\r
+\r
+ // Add ScrollView to App\r
+ if (scrollView1_ == nullptr)\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
+\r
+ // Set additional property\r
+\r
+ // Add to rootView\r
+ container_->Add(scrollView1_);\r
+ scrollView1_->SetVisible(true);\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
+ }\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
+ 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
+ {\r
+ delete label6_;\r
+ label6_ = nullptr;\r
+ }\r
+ if (label7_ != nullptr)\r
+ {\r
+ delete label7_;\r
+ label7_ = nullptr;\r
+ }\r
+ if (label8_ != nullptr)\r
+ {\r
+ delete label8_;\r
+ label8_ = nullptr;\r
+ }\r
+ if (label9_ != nullptr)\r
+ {\r
+ delete label9_;\r
+ label9_ = nullptr;\r
+ }\r
+ if (label10_ != nullptr)\r
+ {\r
+ delete label10_;\r
+ label10_ = nullptr;\r
+ }\r
+ if (label11_ != nullptr)\r
+ {\r
+ delete label11_;\r
+ label11_ = nullptr;\r
+ }\r
+ if (scrollView1_ != nullptr)\r
+ {\r
+ delete scrollView1_;\r
+ scrollView1_ = nullptr;\r
+ }\r
+ if (container_ != nullptr)\r
+ {\r
+ container_->RemoveAll();\r
+ delete container_;\r
+ container_ = nullptr;\r
+ }\r
+ }\r
+\r
+ void WeatherReportView::PreLoad(void)\r
+ {\r
+ if (!viewInitStatus)\r
+ {\r
+ InitView();\r
+ viewInitStatus = true;\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
+ }\r
+\r
+ void WeatherReportView::OnTearDownView()\r
+ {\r
+\r
+ View<WeatherReportPresenter>::OnTearDownView();\r
+ return;\r
+ }\r
+\r
+ void WeatherReportView::OnStop()\r
+ {\r
+\r
+ View<WeatherReportPresenter>::OnStop();\r
+ RootView::GetInstance()->RemoveAll();\r
+ return;\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+#include "weather/include/WeatherView.h"
+#include "UiConfig.h"
+
+/*
+当至天气界面时,主动获取最新天气数据。
+(此操作静默将进行,获取到则立刻更新显示,获取不到则重试
+重试3次无果结束更新)
+在加载该视图时,需要加载:1时间,2天气图片,3温度,4天气描述,5,地点,6,温度范围
+*/
+
+namespace OHOS
+{
+ static WeatherView *g_pWeatherView{nullptr};
+ WeatherView::WeatherView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::WeatherView()");
+ SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
+ Time = GetTime();
+ WeatherImag = GetWeatherImage();
+ Temperature = GetWeatherTemperature();
+ WeatherDescription = GetWeatherDescription();
+ WeatherArea = GetWeatherArea();
+ MaxandMinTemperature = GetWeatherMaxAndMinTemperature();
+ g_pWeatherView = this;
+ }
+
+ WeatherView::~WeatherView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " WeatherView::~WeatherView()");
+ ClearAll();
+ g_pWeatherView = nullptr;
+ }
+
+ void WeatherView::ClearAll()
+ {
+ if (viewInitStatus == true)
+ {
+ RemoveAll();
+ if (showCurrentTimeLabel != nullptr)
+ {
+ delete showCurrentTimeLabel;
+ showCurrentTimeLabel = nullptr;
+ }
+ if (showTemperatureLabel != nullptr)
+ {
+ delete showTemperatureLabel;
+ showTemperatureLabel = nullptr;
+ }
+ if (showWeatherImage != nullptr)
+ {
+ delete showWeatherImage;
+ showWeatherImage = nullptr;
+ }
+ if (showWeatherDescriptionLabel != nullptr)
+ {
+ delete showWeatherDescriptionLabel;
+ showWeatherDescriptionLabel = nullptr;
+ }
+ if (showWeatherAreaLabel != nullptr)
+ {
+ delete showWeatherAreaLabel;
+ showWeatherAreaLabel = nullptr;
+ }
+ if (showMaxandMinTemperatureLabel != nullptr)
+ {
+ delete showMaxandMinTemperatureLabel;
+ showMaxandMinTemperatureLabel = nullptr;
+ }
+ }
+ }
+
+ WeatherView *WeatherView::GetInstance()
+ {
+ return g_pWeatherView;
+ }
+
+ // 获取时间
+ std::string WeatherView::GetTime()
+ {
+ srand(time(0));
+ std::string area[] = {"23:54", "12:00", "7:25"};
+ int num = rand() % (sizeof(area) / sizeof(area[0]));
+ return area[1];
+ }
+
+ // 获取天气图片
+ std::string WeatherView::GetWeatherImage()
+ {
+ int size = sizeof(weather130x130) / sizeof(weather130x130[0]);
+ return weather130x130[8];
+ }
+ // 获取温度
+
+ std::string WeatherView::GetWeatherTemperature()
+ {
+ // 使用系统时间作为种子
+ srand(time(0));
+ int temperature = rand() % 50;
+ return std::to_string(22) + "°";
+ }
+ // 获取天气描述
+
+ std::string WeatherView::GetWeatherDescription()
+ {
+ srand(time(0));
+ std::string area[] = {"晴", "雨夹雪", "雷阵雨伴有冰雹"};
+ int num = rand() % (sizeof(area) / sizeof(area[0]));
+ return area[0];
+ }
+ // 获取天气地区
+
+ std::string WeatherView::GetWeatherArea()
+ {
+ srand(time(0));
+ std::string area[] = {"北京市东城区", "深圳市保安区"};
+ int num = rand() % (sizeof(area) / sizeof(area[0]));
+ return area[1];
+ }
+ // 获取最高气温和最低气温
+
+ std::string WeatherView::GetWeatherMaxAndMinTemperature()
+ {
+ // 使用系统时间作为种子
+ srand(time(0));
+ // 生成随机数
+ int maxtemperature = 20 + rand() % 40; // 最高气温:20°~60°
+ int mintemperature = -5 + rand() % 20;
+ std::string MaxandMinTemperature = "最高" + std::to_string(22) + "°" + " " + "最低" + std::to_string(18) + "°";
+ return MaxandMinTemperature;
+ }
+
+ // 初始化标签
+ UILabel *WeatherView::InitLabel(int x, int y, const char *text, const char *id, int textfont, int lineheight)
+ {
+ UILabel *label = new UILabel();
+ if (label == nullptr)
+ {
+ return nullptr;
+ }
+ label->SetPosition(x, y);
+ label->Resize(200, 30);
+ label->SetViewId(id);
+ label->SetStyle(STYLE_TEXT_FONT, textfont);
+ label->SetStyle(STYLE_LINE_HEIGHT, lineheight);
+ label->SetText(text);
+ label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+ label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ label->SetRollSpeed(0);
+ label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, textfont);
+ label->SetVisible(true);
+ return label;
+ }
+
+ // 初始化天气页面
+ bool WeatherView::InitPage(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " WeatherView::InitPage()");
+ /* -------------------------------------------------------------------------- */
+ showWeatherImage = new UIImageView();
+ if (showWeatherImage == nullptr)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::new showWeatherImage fail!");
+ return false;
+ }
+ showWeatherImage->SetPosition(109, 124, 100, 100);
+ showWeatherImage->SetSrc(WeatherImag.c_str());
+ /* -------------------------------------------------------------------------- */
+ showCurrentTimeLabel = InitLabel(185, 52, Time.c_str(), "showCurrentTimeLabel", 40, 47);
+ if (showCurrentTimeLabel == nullptr)
+ {
+ WEARABLE_LOGD(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!");
+ return false;
+ }
+ /* -------------------------------------------------------------------------- */
+ UILabel *showWeatherDescriptionLabel = new UILabel();
+ showWeatherDescriptionLabel->SetPosition(83, 264,300,40);
+ showWeatherDescriptionLabel->SetViewId("showWeatherDescriptionLabel");
+ showWeatherDescriptionLabel->SetStyle(STYLE_TEXT_FONT, 35);
+ showWeatherDescriptionLabel->SetStyle(STYLE_LINE_HEIGHT, 41);
+ showWeatherDescriptionLabel->SetText(WeatherDescription.c_str());
+ showWeatherDescriptionLabel->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
+ showWeatherDescriptionLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ showWeatherDescriptionLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 35);
+ if (showWeatherDescriptionLabel == nullptr)
+ {
+ WEARABLE_LOGD(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!");
+ 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!");
+ return false;
+ }
+ showMaxandMinTemperatureLabel->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff));
+
+ /* -------------------------------- 将组件添加到根视图 ------------------------------- */
+ Add(showWeatherImage);
+ Add(showCurrentTimeLabel);
+ Add(showTemperatureLabel);
+ Add(showWeatherDescriptionLabel);
+ Add(showWeatherAreaLabel);
+ Add(showMaxandMinTemperatureLabel);
+ viewInitStatus = true;
+ return true;
+ }
+
+ bool WeatherView::InitView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::InitView");
+ if (InitPage() == false)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitPage fail");
+ return false;
+ }
+ SetDraggable(true);
+ SetTouchable(true);
+ return true;
+ }
+
+ // 获取视图初始化状态
+ bool WeatherView::GetInitViewState(void)
+ {
+ return viewInitStatus;
+ }
+}
\ No newline at end of file