#446 运动界面,上下滑,下界面是覆盖式的,优化为U6那种滑动式界面
authorCaisking <3449750381@qq.com>
Mon, 23 Sep 2024 12:54:49 +0000 (20:54 +0800)
committerCaisking <3449750381@qq.com>
Mon, 23 Sep 2024 12:54:49 +0000 (20:54 +0800)
code/sdk/application/wearable/fd230app/CMakeLists.txt
code/sdk/application/wearable/fd230app/nativeui/main/include/MainPresenterSample.h
code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingCardView.h
code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingDataAllView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TrainingDataView.h
code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TrainingDetailView.h
code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardView.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingDataAllView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TrainingDataView.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TrainingDetailView.cpp

index 8497548..7372ec0 100644 (file)
@@ -612,6 +612,7 @@ set(SOURCES
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_card/src/TrainingControlView.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_card/src/TrainingDataView.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_card/src/TrainingDetailView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_card/src/TraingDataAllView.cpp
 
     #训练记录
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traingrecord/src/TraingRecordView.cpp
index 3837b51..2fcb1ea 100644 (file)
  * @Date: 2024-03-01 15:10:34
  * @LastEditors: luozheng 1732036298@qq.com
  * @LastEditTime: 2024-09-03 17:53:43
- * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/include/MainPresenterSample.h
+ * @FilePath:
+ * /FD230/code/sdk/application/wearable/fd230app/nativeui/main/include/MainPresenterSample.h
  */
 
 #ifndef MAIN_PRESENTER_SAMPLE_H
 #define MAIN_PRESENTER_SAMPLE_H
 
-#include "Presenter.h"
-#include "ModelListenerSample.h"
-#include "components/root_view.h"
+#include "HeartRateView.h"
 #include "KeyInputListener.h"
-#include "drag_event.h"
-#include "MainViewSample.h"
+#include "MainCompassPresenter.h"
+#include "MainCompassView.h"
 #include "MainModel.h"
+#include "MainViewSample.h"
+#include "ModelListenerSample.h"
+#include "PlayersView.h"
+#include "Presenter.h"
+#include "components/root_view.h"
 #include "components/ui_swipe_view.h"
 #include "components/ui_view.h"
-#include "MainCompassView.h"
-#include "MainCompassPresenter.h"
-#include "PlayersView.h"
-#include "HeartRateView.h"
+#include "drag_event.h"
 #include "swipe_effect/zoom_effect.h"
 
-namespace OHOS
-{
-    static constexpr const char *MAIN_CLICK_WEATHER = "mainclickweather";
-    static constexpr const char *MAIN_CLICK_ACTIVITY = "mainclickactivity";
-    static constexpr const char *MAIN_CLICK_MESSAGE = "mainclickmessage";
-    static constexpr const char *MAIN_CLICK_HEARTRATE = "mainclickheartrate";
-    static constexpr const char *MAIN_CLICK_BLOOD = "mainclickblood";     // 血氧检测
-    static constexpr const char *MAIN_CLICK_SETCARD = "mainclicksetcard"; // 设置卡片
+namespace OHOS {
+static constexpr const char *MAIN_CLICK_WEATHER = "mainclickweather";
+static constexpr const char *MAIN_CLICK_ACTIVITY = "mainclickactivity";
+static constexpr const char *MAIN_CLICK_MESSAGE = "mainclickmessage";
+static constexpr const char *MAIN_CLICK_HEARTRATE = "mainclickheartrate";
+static constexpr const char *MAIN_CLICK_BLOOD = "mainclickblood"; // 血氧检测
+static constexpr const char *MAIN_CLICK_SETCARD =
+    "mainclicksetcard"; // 设置卡片
 
-    static constexpr const char *DROPDOWN_CLICK_DONOTDISTURB = "dropdownclickdonotdisturb";
-    static constexpr const char *DROPDOWN_CLICK_BRIGHTENSCREEN = "dropdownclickbrightscreen";
+static constexpr const char *DROPDOWN_CLICK_DONOTDISTURB =
+    "dropdownclickdonotdisturb";
+static constexpr const char *DROPDOWN_CLICK_BRIGHTENSCREEN =
+    "dropdownclickbrightscreen";
 
-    static constexpr const char *DROPDOWN_CLICK_SETTING = "dropdownclicksetting";         // 设置
-    static constexpr const char *DROPDOWN_CLICK_BLUETOOTH = "dropdownclickbluetooth";     // 蓝牙
-    static constexpr const char *DROPDOWN_CLICK_DNOTDISTURB = "dropdownclickdnotdisturb"; // 勿扰
-    static constexpr const char *DROPDOWN_CLICK_SAVEELE = "dropdownclicksaveele";         // 省电
-    static constexpr const char *DROPDOWN_CLICK_FINDMYPHONE = "dropdownclickfindmyphone"; // 找手机
+static constexpr const char *DROPDOWN_CLICK_SETTING =
+    "dropdownclicksetting"; // 设置
+static constexpr const char *DROPDOWN_CLICK_BLUETOOTH =
+    "dropdownclickbluetooth"; // 蓝牙
+static constexpr const char *DROPDOWN_CLICK_DNOTDISTURB =
+    "dropdownclickdnotdisturb"; // 勿扰
+static constexpr const char *DROPDOWN_CLICK_SAVEELE =
+    "dropdownclicksaveele"; // 省电
+static constexpr const char *DROPDOWN_CLICK_FINDMYPHONE =
+    "dropdownclickfindmyphone"; // 找手机
 
-    static constexpr const char *CONNECTEDSTATUSBACKGROUNDBUTTON = "connectedstatusbackgroundbutton"; // 连接状态按钮
-    static constexpr const char *CONNECTEDSTATUSVIEWCLOSEBUTTON = "connectedstatusviewclosebutton";   // 连接状态视图的关闭按钮
+static constexpr const char *CONNECTEDSTATUSBACKGROUNDBUTTON =
+    "connectedstatusbackgroundbutton"; // 连接状态按钮
+static constexpr const char *CONNECTEDSTATUSVIEWCLOSEBUTTON =
+    "connectedstatusviewclosebutton"; // 连接状态视图的关闭按钮
 
-    constexpr uint16_t VERTICAL_STATUS = 1;
-    constexpr uint16_t HORIZONTAL_STATUS = 0;
+constexpr uint16_t VERTICAL_STATUS = 1;
+constexpr uint16_t HORIZONTAL_STATUS = 0;
 
-    class MainViewSample;
-    class MainPresenterSample : public Presenter<MainViewSample>, public ModelListenerSample, public UIView::OnClickListener, public UIView::OnDragListener, public UISwipeView::OnSwipeListener, public UIView::OnLongPressListener, public UISwipeView, public CompassPresenter
-    {
-    public:
-        MainPresenterSample();
-        ~MainPresenterSample() override;
-        static MainPresenterSample *GetInstance(void);
+class MainViewSample;
+class MainPresenterSample : public Presenter<MainViewSample>,
+                            public ModelListenerSample,
+                            public UIView::OnClickListener,
+                            public UIView::OnDragListener,
+                            public UISwipeView::OnSwipeListener,
+                            public UIView::OnLongPressListener,
+                            public UISwipeView,
+                            public CompassPresenter {
+public:
+  MainPresenterSample();
+  ~MainPresenterSample() override;
+  static MainPresenterSample *GetInstance(void);
 
-        void OnStart() override;
-        void OnPause() override;
-        void OnResume() override;
-        void OnStop() override;
-        void Notify() override;
-        bool OnClick(UIView &view, const ClickEvent &event) override;
-        bool OnDrag(UIView &view, const DragEvent &event) override;
-        bool OnLongPress(UIView &view, const LongPressEvent &event) override;
-        void OnSwipe(UISwipeView &view) override;
-        void SetPage(int8_t id);
-        void SetTaskPeroid(CardId cardId);
-        void setCallback(ZoomEffect *callback)
-        {
-            callback_ = callback;
-        }
+  void OnStart() override;
+  void OnPause() override;
+  void OnResume() override;
+  void OnStop() override;
+  void Notify() override;
+  bool OnClick(UIView &view, const ClickEvent &event) override;
+  bool OnDrag(UIView &view, const DragEvent &event) override;
+  bool OnLongPress(UIView &view, const LongPressEvent &event) override;
+  void OnSwipe(UISwipeView &view) override;
+  void SetPage(int8_t id);
+  void SetTaskPeroid(CardId cardId);
+  void setCallback(ZoomEffect *callback) { callback_ = callback; }
 
-        void InitCardSettings(void);
-        uint8_t GetCardSettingCount(void);
-        CardId *GetCardSettings(void);
-        void InitDialSettings(void);
-        DialSetting &GetDialSetting();
-        void UpdataTime();
-        uint32_t GetWeekStr(char *p_week);
-        void UpdataBaseData();
-        void PullUpDown_StartTimer(uint32_t interval);
-        void PullUpDown_StopTimer(void);
-        static uint8_t g_PullUpDownTimes;
+  void InitCardSettings(void);
+  uint8_t GetCardSettingCount(void);
+  CardId *GetCardSettings(void);
+  void InitDialSettings(void);
+  DialSetting &GetDialSetting();
+  void UpdataTime();
+  uint32_t GetWeekStr(char *p_week);
+  void UpdataBaseData();
+  void PullUpDown_StartTimer(uint32_t interval);
+  void PullUpDown_StopTimer(void);
+  static uint8_t g_PullUpDownTimes;
 
-        void get_memcheck();
+  void get_memcheck();
 
-        bool IsFromSetCardView(void) const;
-        void SetFromSetCardView(bool isFrom);
-        uint8_t GetFromCardId(void);
+  bool IsFromSetCardView(void) const;
+  void SetFromSetCardView(bool isFrom);
+  uint8_t GetFromCardId(void);
 
-    private:
-        void LogCardTransition(CardId previous, CardId current);
-        void ResetSleepCardView();
-        void ResetWeatherCardView();
-        void ResetgoalCardView();
-        void StartHeartRateDetection();
-        void UpdateWatchFace();
-        void UpdateWeather();
-        void Updategoal();
-        void ProcessDataNotify(void);
-        void SetCircleProgress(void);
-        void SetCompassRotate(void);
-        KeyInputListener *keyActListener_{nullptr};
-        ZoomEffect *callback_{nullptr};
-        uint8_t state_ = UICheckBox::UICheckBoxState::MAX_STATUS_NUM;
-        int64_t playerCurrentTime_{0};
-        int64_t playerMusicDuration_{0};
-        int64_t playerProgressValue_{0};
-        bool isCompassSensorOpened_{false};
-        CardId previousCardId{WATCH_FACE};
-    };
+private:
+  void LogCardTransition(CardId previous, CardId current);
+  void ResetSleepCardView();
+  void ResetWeatherCardView();
+  void ResetgoalCardView();
+  void StartHeartRateDetection();
+  void UpdateWatchFace();
+  void UpdateWeather();
+  void Updategoal();
+  void ProcessDataNotify(void);
+  void SetCircleProgress(void);
+  void SetCompassRotate(void);
+  KeyInputListener *keyActListener_{nullptr};
+  ZoomEffect *callback_{nullptr};
+  uint8_t state_ = UICheckBox::UICheckBoxState::MAX_STATUS_NUM;
+  int64_t playerCurrentTime_{0};
+  int64_t playerMusicDuration_{0};
+  int64_t playerProgressValue_{0};
+  bool isCompassSensorOpened_{false};
+  CardId previousCardId{WATCH_FACE};
+};
 }
 
 #endif // MAIN_PRESENTER_H
index 704b059..3812646 100644 (file)
@@ -35,6 +35,7 @@
 #include "traing/training_card/include/TraingCardPresenter.h"\r
 \r
 #include "PlayersView.h"\r
+#include "traing/training_card/include/TraingDataAllView.h"\r
 #include "traing/training_card/include/TrainingControlView.h"\r
 #include "traing/training_card/include/TrainingDataView.h"\r
 #include "traing/training_card/include/TrainingDetailView.h"\r
@@ -80,6 +81,7 @@ namespace OHOS
         UICardPage *InitControlPage(void);\r
         UICardPage *InitDataPage(void);\r
         UICardPage *InitMusicPage(void);\r
+\r
         UICardPage *InitDetailPage(void);\r
 \r
         void InitView();\r
@@ -106,10 +108,10 @@ namespace OHOS
         UIScrollView *endView{nullptr};\r
         UIScrollView *getView{nullptr};\r
         UIScrollView *heartView{nullptr};\r
-        TrainingControlView *ControlView{nullptr}; // 控制卡片\r
-        TrainingDataView *DataVIew{nullptr};       // 数据卡片\r
+        TrainingControlView *controlview_{nullptr}; // 控制卡片\r
+        TraingDataAllView *dataallview_{nullptr};      // 数据卡片\r
         TrainingDetailView *DetailView{nullptr};   // 详细数据卡片\r
-        PlayersView *MusicView{nullptr};           // 音乐卡片\r
+        PlayersView *musicview_{nullptr};           // 音乐卡片\r
 \r
         /*结束弹窗*/\r
         UILabelExt *endtitle{nullptr};  // 结束弹窗title\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingDataAllView.h b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingDataAllView.h
new file mode 100644 (file)
index 0000000..ee8312d
--- /dev/null
@@ -0,0 +1,75 @@
+/***
+ * @Date: 2024-06-25 10:41:08
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-09-02 09:22:33
+ * @FilePath:
+ * /FD230/code/sdk/application/wearable/fd230app/nativeui/TraingDataAll/include/TraingDataAllView.h
+ */
+
+#ifndef TRAING_DATA_ALL__VIEW_H
+#define TRAING_DATA_ALL__VIEW_H
+
+#include "BaseView.h"
+#include "View.h"
+#include "components/ui_swipe_view.h"
+#include "traing/training_card/include/TraingCardPresenter.h"
+#include "traing/training_card/include/TrainingDataView.h"
+#include "traing/training_card/include/TrainingDetailView.h"
+
+#include "components/ui_card_page.h"
+namespace OHOS {
+
+typedef enum {
+  TRAING_DATA_ALL_MAIN_VIEW = 0, // Heart rate time data chart
+  TRAING_DATA_ALL_DETAIL_VIEW,   // Detailed view
+  TRAING_DATA_ALL_MAX_VIEW,
+} TraingDataAllPageId;
+
+#define TRAING_DATA_ALL_VIEW "TraingDataAllView"
+
+class TraingCardPresenter;
+class TrainingDataView;
+class TrainingDetailView;
+
+class TraingDataAllView : public UICardPage {
+public:
+  TraingDataAllView();
+  virtual ~TraingDataAllView();
+
+  static TraingDataAllView *GetInstance(void);
+
+  UISwipeView *TraingDataAllViewInit(void);
+  void ClearAll(void);
+
+  AppGroupView *TraingDataPageInit(void);
+  AppGroupView *TraingDetailPageInit(void);
+
+  TrainingDataView *GetTrainingDataView(void);
+  TrainingDetailView *GetTrainingDetailView(void);
+
+  UISwipeView *GetTraingDataAllPageView(void);
+  void ChangeView(int16_t hideView, int16_t showView);
+
+  void InitPage(void);
+
+  void PreLoad(void) override;
+  void UnLoad(void) override;
+  bool InitView(void);
+
+private:
+  TrainingDataView *trainingDataView{nullptr};
+  TrainingDetailView *trainingDetailView{nullptr};
+  TraingDataAllView *trainingDataAllView{nullptr};
+  UISwipeView *traingDataAllPageView{nullptr};
+
+  int16_t maxPage = TRAING_DATA_ALL_MAX_VIEW;
+  UISwipeView *TraingDataAllSwipeViewList{nullptr};
+  AppGroupView *recordCard[TRAING_DATA_ALL_MAX_VIEW]{nullptr};
+
+  AppGroupView *CreatePage(uint8_t pageId);
+  bool viewiInitStatus{false};
+};
+
+} // namespace OHOS
+
+#endif // TRAING_DATA_ALL__VIEW_H
\ No newline at end of file
index 82dd76e..593c898 100644 (file)
 #include "components/icon_adapter.h"
 #include "components/ui_circle_progress.h"
 
-#include "wearable_log.h"
-#include "ohos_types.h"
+#include "AppGroupView.h"
 #include "components/ui_card_page.h"
+#include "ohos_types.h"
+#include "traing/Training_UiConfig.h"
 #include "traing/include/TraingModel.h"
 #include "uicomponents/UIComponents.h"
-#include "traing/Training_UiConfig.h"
+#include "wearable_log.h"
 
 #include "traing/include/TraingModel.h"
 #include "uicomponents/UIComponents.h"
@@ -39,51 +40,48 @@ namespace OHOS
 {
 #define BUTTONNOTE "button1"
 
-    class TrainingDataView : public UICardPage
-    {
-    public:
-        TrainingDataView();
-        virtual ~TrainingDataView();
-        static TrainingDataView *GetInstance(void);
-
-        void InitView();
-        void DeInit();
+class TrainingDataView : public AppGroupView {
+public:
+  TrainingDataView();
+  virtual ~TrainingDataView();
+  static TrainingDataView *GetInstance(void);
+  bool InitPage(void);
+  virtual bool InitView(void *caller) override;
+  void DeInit();
 
-        void PreLoad(void) override;
-        void UnLoad(void) override;
-        UILabelExt *GetTimeLabel();
-        UILabelExt *GetHeartLabel();
-        UICircleProgress*GetProgress();
+  UILabelExt *GetTimeLabel();
+  UILabelExt *GetHeartLabel();
+  UICircleProgress *GetProgress();
 
-        void UpdataTime();
+  void UpdataTime();
 
-    private:
-        UIView::OnDragListener *draglistener{nullptr};
-        TrainingDataView(TrainingDataView &&) = delete;
-        TrainingDataView &operator=(TrainingDataView &&) = delete;
+private:
+  UIView::OnDragListener *draglistener{nullptr};
+  TrainingDataView(TrainingDataView &&) = delete;
+  TrainingDataView &operator=(TrainingDataView &&) = delete;
 
-        UIViewGroup *container_ = nullptr;
+  UIViewGroup *container_ = nullptr;
 
-        UILabelExt *curtimelabel = nullptr; // 当前时间
-        UILabelExt *sportlabel = nullptr;   // 运动项目名称
-        UILabelExt *timerlabel = nullptr;   // 计时
-        UILabelExt *heartlabel = nullptr;   // 运动实时心率
-        UILabelExt *ubpmlabel = nullptr;    // 运动强度
+  UILabelExt *curtimelabel = nullptr; // 当前时间
+  UILabelExt *sportlabel = nullptr;   // 运动项目名称
+  UILabelExt *timerlabel = nullptr;   // 计时
+  UILabelExt *heartlabel = nullptr;   // 运动实时心率
+  UILabelExt *ubpmlabel = nullptr;    // 运动强度
 
-        UIImageView *image_progress = nullptr;
-        UIImageView *image_heart = nullptr;
-        UIImageView *image_lowIntensity = nullptr;       // 低等强度
-        UIImageView *image_mediumIntensity = nullptr;    // 中等强度
-        UIImageView *image_highIntensity = nullptr;      // 高等强度
-        UIImageView *image_superHighIntensity = nullptr; // 超高等强度
+  UIImageView *image_progress = nullptr;
+  UIImageView *image_heart = nullptr;
+  UIImageView *image_lowIntensity = nullptr;       // 低等强度
+  UIImageView *image_mediumIntensity = nullptr;    // 中等强度
+  UIImageView *image_highIntensity = nullptr;      // 高等强度
+  UIImageView *image_superHighIntensity = nullptr; // 超高等强度
 
-        UICircleProgress *circleProgress = nullptr;
+  UICircleProgress *circleProgress = nullptr;
 
-        UIImageView *image_iconup = nullptr;
-        UIImageView *image_iconpoint = nullptr;
+  UIImageView *image_iconup = nullptr;
+  UIImageView *image_iconpoint = nullptr;
 
-        UIButton *buttonNote = nullptr; // 注意事项按键
-        bool viewiInitStatus{false};
-    };
+  UIButton *buttonNote = nullptr; // 注意事项按键
+  bool viewiInitStatus{false};
+};
 } // namespace OHOS
 #endif // TraingData_PRESENTER_H
index 84566bf..7f32c43 100644 (file)
 namespace OHOS
 {
 
-    class TrainingDetailView : public UICardPage
-    {
-    public:
-        TrainingDetailView();
-        virtual ~TrainingDetailView();
-        static TrainingDetailView *GetInstance(void);
+class TrainingDetailView : public AppGroupView {
+public:
+  TrainingDetailView();
+  virtual ~TrainingDetailView();
+  static TrainingDetailView *GetInstance(void);
 
-        void InitView();
-        void DeInit();
+  void DeInit();
 
-        void PreLoad(void) override;
-        void UnLoad(void) override;
+  bool InitPage(void);
+  virtual bool InitView(void *caller) override;
 
-        UILabelExt *GetMileLabel();
-        UILabelExt *GetStepLabel();
-        UILabelExt *GetCalorieLabel();
-        UILabelButtonExt *Get_Intensity_Button();
+  UILabelExt *GetMileLabel();
+  UILabelExt *GetStepLabel();
+  UILabelExt *GetCalorieLabel();
+  UILabelButtonExt *Get_Intensity_Button();
 
-    private:
-        UIView::OnDragListener *draglistener{nullptr};
-        TrainingDetailView(TrainingDetailView &&) = delete;
-        TrainingDetailView &operator=(TrainingDetailView &&) = delete;
+private:
+  UIView::OnDragListener *draglistener{nullptr};
+  TrainingDetailView(TrainingDetailView &&) = delete;
+  TrainingDetailView &operator=(TrainingDetailView &&) = delete;
 
-        UIViewGroup *container_ = nullptr;
+  UIViewGroup *container_ = nullptr;
 
-        UILabelButtonExt *intensity_button{nullptr};
+  UILabelButtonExt *intensity_button{nullptr};
 
-        UILabelExt *u_milelabel = nullptr;
-        UILabelExt *u_stepslabel = nullptr;
-        UILabelExt *u_calorielabel = nullptr;
-        UILabelExt *milelabel = nullptr;
-        UILabelExt *steplabel = nullptr;
-        UILabelExt *calorielabel = nullptr;
+  UILabelExt *u_milelabel = nullptr;
+  UILabelExt *u_stepslabel = nullptr;
+  UILabelExt *u_calorielabel = nullptr;
+  UILabelExt *milelabel = nullptr;
+  UILabelExt *steplabel = nullptr;
+  UILabelExt *calorielabel = nullptr;
 
-        UIImageView *progress_image = nullptr;
-        UIImageView *lineimage2_ = nullptr;
+  UIImageView *progress_image = nullptr;
+  UIImageView *lineimage2_ = nullptr;
 
-        bool viewiInitStatus{false};
-    };
+  bool viewiInitStatus{false};
+};
 } // namespace OHOS
 #endif // TraingDetail_PRESENTER_H
index 860980b..29a583e 100644 (file)
@@ -1,12 +1,12 @@
 \r
 #include "traing/training_card/include/TraingCardView.h"\r
+#include "UiConfig.h"\r
 #include "common/image_cache_manager.h"\r
+#include "components/ui_button.h"\r
 #include "components/ui_label_ext.h"\r
-#include "ui_resource_string.h"\r
-#include "UiConfig.h"\r
 #include "ui_resource_image.h"\r
+#include "ui_resource_string.h"\r
 #include <ui_scroll_view.h>\r
-#include "components/ui_button.h"\r
 \r
 #include "common/screen.h"\r
 #include "components/ui_digital_clock.h"\r
 #include "components/ui_label_ext.h"\r
 #include "font/ui_font.h"\r
 \r
-#include "traing/include/TraingModel.h"\r
-#include "uicomponents/UIComponents.h"\r
 #include "ConfigModel.h"\r
 #include "custom_utils.h"\r
+#include "traing/include/TraingModel.h"\r
+#include "uicomponents/UIComponents.h"\r
 \r
-extern "C"\r
-{\r
-    void InitTimer();\r
-    void DisableTimer();\r
+extern "C" {\r
+void InitTimer();\r
+void DisableTimer();\r
 }\r
 \r
-namespace OHOS\r
-{\r
+namespace OHOS {\r
 \r
 #ifdef __cplusplus\r
-    extern "C"\r
-    {\r
+extern "C" {\r
 #endif\r
 \r
-#include "pm_veto.h"\r
 #include "pm.h"\r
-        /*移除睡眠否决投票*/\r
-        void uapi_remove_sport_vote(void)\r
-        {\r
-            uint8_t cnt = pm_veto_get_id_cnt(PM_ID_HEART);\r
-            if (cnt == 1)\r
-            {\r
-                uapi_pm_remove_sleep_veto(PM_ID_HEART);\r
-            }\r
-            else\r
-            {\r
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_MAIN_SERVICE, "Sport SERVICE MCU has delete pm_id_Sport vote");\r
-            }\r
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_MAIN_SERVICE, "Sport SERVICE MCU SLEEP SUCCESS");\r
-        }\r
-\r
-        /*添加睡眠否决投票*/\r
-        void uapi_add_sport_vote(void)\r
-        {\r
-            uint8_t cnt = pm_veto_get_id_cnt(PM_ID_HEART);\r
-            if (cnt == 0)\r
-            {\r
-                uapi_pm_add_sleep_veto(PM_ID_HEART);\r
-            }\r
-            else\r
-            {\r
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_MAIN_SERVICE, "Sport SERVICE MCU has got pm_id_Sport vote");\r
-            }\r
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_MAIN_SERVICE, "Sport SERVICE MCU WAKEUP SUCCESS");\r
-        }\r
+#include "pm_veto.h"\r
+/*移除睡眠否决投票*/\r
+void uapi_remove_sport_vote(void) {\r
+  uint8_t cnt = pm_veto_get_id_cnt(PM_ID_HEART);\r
+  if (cnt == 1) {\r
+    uapi_pm_remove_sleep_veto(PM_ID_HEART);\r
+  } else {\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_MAIN_SERVICE,\r
+                  "Sport SERVICE MCU has delete pm_id_Sport vote");\r
+  }\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_MAIN_SERVICE,\r
+                "Sport SERVICE MCU SLEEP SUCCESS");\r
+}\r
+\r
+/*添加睡眠否决投票*/\r
+void uapi_add_sport_vote(void) {\r
+  uint8_t cnt = pm_veto_get_id_cnt(PM_ID_HEART);\r
+  if (cnt == 0) {\r
+    uapi_pm_add_sleep_veto(PM_ID_HEART);\r
+  } else {\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_MAIN_SERVICE,\r
+                  "Sport SERVICE MCU has got pm_id_Sport vote");\r
+  }\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_MAIN_SERVICE,\r
+                "Sport SERVICE MCU WAKEUP SUCCESS");\r
+}\r
 \r
 #ifdef __cplusplus\r
-    }\r
+}\r
 #endif\r
 \r
-    static const uint16_t LABEL_FONT_SIZE = 200;\r
-    static const uint32_t BACK_GROUND_COLOR = 0xfff6f6f6;\r
-    static const uint32_t CARD_PAGE_COLOR = 0xffd0d0d0;\r
-\r
-    static TraingCardView *g_pTraingCardView{nullptr};\r
-\r
-    TraingCardView::TraingCardView()\r
-    {\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingCardView::TraingCardView");\r
-        InitTimer();                                                     // 开启计时器\r
-        TraingModel::GetInstance()->SetSportState(ExerciseState::Start); // 设置运动状态为开始\r
-        TraingModel::GetInstance()->SetTimestamp();\r
-        uapi_add_sport_vote(); // 保护进程\r
-        g_pTraingCardView = this;\r
-    }\r
-\r
-    TraingCardView::~TraingCardView()\r
-    {\r
-        imageAnimator->Stop();\r
-        FreeImageInfoArray(winimageInfos, winbasePath.c_str(), 94);\r
-        ReleaseImageAnimatorSource(winimageAnimatorInfo, 94);\r
-        DeInit();\r
-\r
-        g_pTraingCardView = nullptr;\r
-        DisableTimer(); // 关闭计时器\r
-        TraingModel::GetInstance()->SetTimestamp();\r
-        uapi_remove_sport_vote(); // 移除\r
-    }\r
-\r
-    TraingCardView *TraingCardView::GetInstance()\r
-    {\r
-        return g_pTraingCardView;\r
-    }\r
-\r
-    /* InitView:初始化界面*/\r
-    void TraingCardView ::InitView()\r
-    {\r
-        UISwipeView::OnSwipeListener *listener = nullptr;\r
-\r
-        if (swipe_ == nullptr)\r
-        {\r
-            swipe_ = new UICrossView();\r
-            swipe_->SetPosition(0, 0, 466, 466);\r
-            swipe_->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
-        }\r
-\r
-        InitControlPage();\r
-        InitDataPage();\r
-        InitMusicPage();\r
-        InitDetailPage();\r
-\r
-        swipe_->HorAdd(ControlView);\r
-        swipe_->HorAdd(DataVIew);\r
-        swipe_->HorAdd(MusicView);\r
-\r
-        ShowEndView();\r
-        ShowGetTagView();\r
-        ShowHeartView();\r
-        //  swipe_->HorAdd(DetailView);\r
-\r
-        swipe_->VerAdd(DetailView, UICrossView::VPage::DOWN_PAGE);\r
-        swipe_->SetHorCurrentPage(Control_Card::DATA); // 设置进入索引 [数据]\r
-\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingCardView::InitPage over");\r
-    }\r
-\r
-    /* DeInit:删除组件 */\r
-    void TraingCardView::DeInit()\r
-    {\r
-        swipe_->RemoveAll();\r
-\r
-        /*界面*/\r
-        ControlView->RemoveAll();\r
-        DataVIew->RemoveAll();\r
-        DetailView->RemoveAll();\r
-        MusicView->RemoveAll();\r
-        endView->RemoveAll();\r
-        getView->RemoveAll();\r
-        heartView->RemoveAll();\r
-\r
-        /*标签*/\r
-        delete endtitle;\r
-        endtitle = nullptr;\r
-        delete notelabel;\r
-        notelabel = nullptr;\r
-        delete endnotelabel;\r
-        endnotelabel = nullptr;\r
-        delete endnote;\r
-        endnote = nullptr;\r
-        delete labeltitle;\r
-        labeltitle = nullptr;\r
-        delete labeltag;\r
-        labeltag = nullptr;\r
-        delete labelgettag;\r
-        labelgettag = nullptr;\r
-        delete labelpre;\r
-        labelpre = nullptr;\r
-        delete hearttitle;\r
-        hearttitle = nullptr;\r
-        delete labelnote;\r
-        labelnote = nullptr;\r
-        /*图片*/\r
-        delete heartiamge;\r
-        heartiamge = nullptr;\r
-\r
-        /*按键*/\r
-        delete exit;\r
-        exit = nullptr;\r
-        delete back;\r
-        back = nullptr;\r
-        delete buttonok_;\r
-        buttonok_ = nullptr;\r
-        delete buttonnote_;\r
-        buttonnote_ = nullptr;\r
-\r
-        /*动画*/\r
-        delete imageAnimator;\r
-        imageAnimator = nullptr;\r
-\r
-        /*卡片*/\r
-        delete ControlView;\r
-        ControlView = nullptr;\r
-        delete DataVIew;\r
-        DataVIew = nullptr;\r
-        delete DetailView;\r
-        DetailView = nullptr;\r
-        delete swipe_;\r
-        delete MusicView;\r
-        MusicView = nullptr;\r
-        /*弹窗*/\r
-        delete endView;\r
-        endView = nullptr;\r
-        delete getView;\r
-        getView = nullptr;\r
-        delete heartView;\r
-        heartView = nullptr;\r
-\r
-        swipe_ = nullptr;\r
-    }\r
-    UICardPage *TraingCardView::InitControlPage(void)\r
-    {\r
-        ControlView = new TrainingControlView();\r
-        ControlView->PreLoad();\r
-        if (ControlView == nullptr)\r
-        {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ControlView new fail");\r
-            return nullptr;\r
-        }\r
-        return ControlView;\r
-    }\r
-    UICardPage *TraingCardView::InitDataPage(void)\r
-    {\r
-        DataVIew = new TrainingDataView();\r
-        DataVIew->PreLoad();\r
-        if (DataVIew == nullptr)\r
-        {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DataVIew new fail");\r
-            return nullptr;\r
-        }\r
-        return DataVIew;\r
-    }\r
-    UICardPage *TraingCardView::InitMusicPage(void)\r
-    {\r
-        MusicView = new PlayersView();\r
-        MusicView->PreLoad();\r
-        if (MusicView == nullptr)\r
-        {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MusicView new fail");\r
-            return nullptr;\r
-        }\r
-        return MusicView;\r
-    }\r
-    UICardPage *TraingCardView::InitDetailPage()\r
-    {\r
-        DetailView = new TrainingDetailView();\r
-        DetailView->PreLoad();\r
-        DetailView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
-        DetailView->SetStyle(STYLE_BORDER_RADIUS, 466); // 设置为圆形\r
-        if (DetailView == nullptr)\r
-        {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DetailView new fail");\r
-            return nullptr;\r
-        }\r
-        return DetailView;\r
-    }\r
-    void TraingCardView::PreLoad(void)\r
-    {\r
-        if (!viewiInitStatus)\r
-        {\r
-            InitView();\r
-            viewiInitStatus = true;\r
-        }\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingCardView  PreLoad");\r
-    }\r
-    void TraingCardView::OnStart()\r
-    {\r
-        swipe_ = new UICrossView();\r
-        if (swipe_ == nullptr)\r
-        {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "swipe_ new fail");\r
-            return;\r
-        }\r
-        swipe_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
-        // 创建 draglistener 实例并设置为拖动监听器\r
-        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingCardPresenter::GetInstance());\r
-        if (draglistener == nullptr)\r
-        {\r
-            return;\r
-        }\r
-        swipe_->SetOnDragListener(draglistener);\r
-        swipe_->SetTouchable(true);\r
-        swipe_->SetDraggable(true);\r
-        swipe_->SetStyle(STYLE_BACKGROUND_COLOR, BACK_GROUND_COLOR);\r
-        swipe_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);\r
-        // swipe_->EnableScreenCap(true);\r
-        PreLoad();\r
-        SetContainerView(swipe_);\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "swipe_ new ok");\r
-    }\r
-    /*设置弹窗状态*/\r
-    void TraingCardView::SetPopupViewStatus(PopupType type, bool status)\r
-    {\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetPopupViewStatus %d", type);\r
-        UIView *popupView = nullptr;\r
-        if (type == EndPopup)\r
-        {\r
-            popupView = endView;\r
-        }\r
-        else if (type == GetTagPopup)\r
-        {\r
-            popupView = getView;\r
-        }\r
-        else if (type == HeartPopup)\r
-        {\r
-            popupView = heartView;\r
-        }\r
-\r
-        if (popupView == nullptr)\r
-        {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PopupView is NULL");\r
-            return;\r
-        }\r
-\r
-        UIView *cardview = TraingCardView::GetInstance()->GetTraingCrad();\r
-        if (cardview != nullptr)\r
-        {\r
-            cardview->SetVisible(!status);\r
-        }\r
-\r
-        popupView->SetVisible(status);\r
-    }\r
-    /*结束弹窗界面*/\r
-    void TraingCardView::ShowEndView()\r
-    {\r
-        // momentumFlag = false; // 标志位还原\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowEndView");\r
-        endView = new UIScrollView();\r
-        if (endView == nullptr)\r
-        {\r
-            return;\r
-        }\r
-        endView->SetPosition(0, 0);\r
-        endView->Resize(VERTICAL_RESOLUTION, HORIZONTAL_RESOLUTION);\r
-        endView->SetScrollBlankSize(20);\r
-        endView->SetReboundSize(50);\r
-        endView->SetDirection(1);\r
-\r
-        InitRollLabel(endtitle, 83, 50, 300, 35, "label1", STR_LOOK_OUT, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
-        InitRollLabel(notelabel, 56, 167, 360, 80, "label2", STR_INSUFFICIENT_EXERCISE_AMOUNT, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
-        /*隐藏是否结束运动title*/\r
-        InitRollLabel(endnote, 56, 207, 360, 80, "label3", STR_END_THIS_MOVEMENT, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
-        endnote->SetVisible(false);\r
-\r
-        endView->Add(endnote);\r
-        endView->Add(endtitle);\r
-        endView->Add(notelabel);\r
-\r
-        InitButton(exit, 111, 299, 100, 100, BUTTONBACK);\r
-        exit->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingCardPresenter::GetInstance()));\r
-        exit->SetImageSrc(NO_IMAGE, NO_IMAGE);\r
-        InitButton(back, 256, 299, 100, 100, BUTTONEXIT);\r
-        back->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingCardPresenter::GetInstance()));\r
-        back->SetImageSrc(YES_IMAGE, YES_IMAGE);\r
-        endView->Add(exit);\r
-        endView->Add(back);\r
-        RootView::GetInstance()->Add(endView);\r
-        endView->SetDraggable(false);\r
-        endView->SetTouchable(true);\r
-        endView->SetVisible(false); // 界面隐藏\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowEndView end");\r
-    }\r
-    /*目标达成界面*/\r
-    void TraingCardView::ShowGetTagView()\r
-    {\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowGetTagView");\r
-        getView = new UIScrollView();\r
-        if (getView == nullptr)\r
-        {\r
-            return;\r
-        }\r
-        getView->SetPosition(0, 0);\r
-        getView->Resize(VERTICAL_RESOLUTION, HORIZONTAL_RESOLUTION);\r
-        getView->SetScrollBlankSize(20);\r
-        getView->SetReboundSize(50);\r
-        getView->SetDirection(1);\r
-\r
-        // 初始化Lable\r
-        InitRollLabel(labeltitle, 83, 50, 300, 35, "label1", STR_GOAL_ACHIEVED, DEFAULT_VECTOR_FONT_FILENAME, 35);\r
-        getView->Add(labeltitle);\r
-        InitRollLabel(labelgettag, 103, 307, 200, 35, "label3", STR_ACCOMPLISH_GOAL, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
-        getView->Add(labelgettag);\r
-        InitLabel(labelpre, 233, 307, 160, 35, "label3", "100%", DEFAULT_VECTOR_FONT_FILENAME, 30);\r
-        getView->Add(labelpre);\r
-\r
-        // 初始化按键\r
-        InitButtonExt(buttonok_, 0, 366, 466, 100, BUTTONWINOK, STR_OK, 30);\r
-        buttonok_->SetImageSrc(BUTTONOK_IMAGE, BUTTONOK_IMAGE);\r
-        buttonok_->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingCardPresenter::GetInstance()));\r
-        getView->Add(buttonok_);\r
-\r
-        InitImageAnimator();\r
-        RootView::GetInstance()->Add(getView);\r
-        getView->SetDraggable(false);\r
-        getView->SetTouchable(true);\r
-        getView->SetVisible(false); // 界面隐藏\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowGetTagView end");\r
-    }\r
-    /*最高心率提醒弹窗*/\r
-    void TraingCardView::ShowHeartView()\r
-    {\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowHeartView");\r
-        heartView = new UIScrollView();\r
-        if (heartView == nullptr)\r
-        {\r
-            return;\r
-        }\r
-        heartView->SetPosition(0, 0);\r
-        heartView->Resize(VERTICAL_RESOLUTION, HORIZONTAL_RESOLUTION);\r
-        heartView->SetScrollBlankSize(20);\r
-        heartView->SetReboundSize(50);\r
-        heartView->SetDirection(1);\r
-\r
-        // 初始化Lable\r
-        InitRollLabel(hearttitle, 83, 50, 300, 35, "label1", STR_HEARTTITLE, DEFAULT_VECTOR_FONT_FILENAME, 35);\r
-        heartView->Add(hearttitle);\r
-\r
-        int maxheart = ConfigModel::GetInstance()->get_configData_int(ConfigModel::CONFIGMODEL_ITEM_TRAINING_HEART_MAX);\r
-        std::string heartStr = "当前心率高于" + std::to_string(maxheart) + "次/分钟";\r
-        InitLabel(labelnote, 53, 269, 360, 35, "label3", heartStr.c_str(), DEFAULT_VECTOR_FONT_FILENAME, 30);\r
-        heartView->Add(labelnote);\r
-\r
-        InitImageView(heartiamge, 193, 149, 80, 80, "note", WARNING_IMAGE);\r
-        heartView->Add(heartiamge);\r
-\r
-        // 初始化按键\r
-        InitButtonExt(buttonnote_, 0, 366, 466, 100, BUTTONNOTE, STR_OK, 30);\r
-        buttonnote_->SetImageSrc(BUTTONOK_IMAGE, BUTTONOK_IMAGE);\r
-        buttonnote_->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingCardPresenter::GetInstance()));\r
-        heartView->Add(buttonnote_);\r
-\r
-        RootView::GetInstance()->Add(heartView);\r
-        heartView->SetDraggable(false);\r
-        heartView->SetTouchable(true);\r
-        heartView->SetVisible(false); // 界面隐藏\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowHeartView end");\r
-    }\r
-    /*获取运动量结束弹窗界面刷新*/\r
-    bool TraingCardView::RefreshEndView()\r
-    {\r
-        // 获取训练卡路里判断运动量\r
-        momentumFlag = TraingModel::GetInstance()->GetMomentum();\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "momentumFlag %d", momentumFlag);\r
-\r
-        if (momentumFlag)\r
-        {\r
-            // 正常结束\r
-            endnote->SetVisible(false);\r
-            endtitle->SetTextId(STR_END_MOVEMENT);\r
-            notelabel->SetTextId(STR_END_THIS_MOVEMENT);\r
-        }\r
-        else\r
-        {\r
-            endtitle->SetTextId(STR_LOOK_OUT);\r
-            notelabel->SetTextId(STR_INSUFFICIENT_EXERCISE_AMOUNT);\r
-            endnote->SetVisible(true);\r
-        }\r
-        return momentumFlag;\r
-    }\r
-    /*初始化动画以及Taglabel*/\r
-    void TraingCardView::InitImageAnimator()\r
-    {\r
-        int tag = TraingModel::GetInstance()->GetSportTag();\r
-        ExerciseTag tagType = TraingModel::GetInstance()->GetSportTagtype();\r
-        std::string tagString = std::to_string(tag);\r
-        switch (tagType)\r
-        {\r
-        case ExerciseTag::Duration:\r
-        {\r
-            int hours = tag / 60;\r
-            int minutes = tag % 60;\r
-            int seconds = 0;\r
-            // 将小时、分钟、秒转换为字符串,并在小于10时补零\r
-            std::string hoursStr = (hours < 10) ? "0" + std::to_string(hours) : std::to_string(hours);\r
-            std::string minutesStr = (minutes < 10) ? "0" + std::to_string(minutes) : std::to_string(minutes);\r
-            std::string secondsStr = (seconds < 10) ? "0" + std::to_string(seconds) : std::to_string(seconds);\r
-            tagString = hoursStr + ":" + minutesStr + ":" + secondsStr;\r
-            break;\r
-        }\r
-        case ExerciseTag::Calories:\r
-        {\r
-            tagString = tagString + "kcal";\r
-            break;\r
-        }\r
-        case ExerciseTag::Distance:\r
-        {\r
-            tagString = tagString + "km";\r
-            break;\r
-        }\r
-        case ExerciseTag::Steps:\r
-            break;\r
-        default:\r
-            break;\r
-        }\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "tag[%d]-tagType[%d]-tagString[%s]\r\n", tag, tagType, tagString.c_str());\r
-        InitLabel(labeltag, 70, 215, 326, 97, "label2", tagString.c_str(), DEFAULT_VECTOR_FONT_FILENAME, 80);\r
-        labeltag->SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff));\r
-        getView->Add(labeltag);\r
-\r
-        // 初始化图片数组以及动画\r
-        winimageInfos = CreateImageInfoArray(winbasePath.c_str(), 94);\r
-        InitImageAnimatorSource(imageAnimator, winimageAnimatorInfo, winimageInfos, 94, 173, 100, 120, 120, "imageAnimator1", 10);\r
-        getView->Add(imageAnimator);\r
-    }\r
-\r
-    /*获取卡片View单例*/\r
-    UICrossView *TraingCardView::GetTraingCrad()\r
-    {\r
-        return swipe_;\r
-    }\r
-    void TraingCardView::OnSetUpView()\r
-    {\r
-        View<TraingCardPresenter>::OnSetUpView();\r
-        Draw();\r
-    }\r
-\r
-    void TraingCardView::OnTearDownView()\r
-    {\r
-        View<TraingCardPresenter>::OnTearDownView();\r
-        return;\r
-    }\r
-\r
-    void TraingCardView::OnStop()\r
-    {\r
-        View<TraingCardPresenter>::OnStop();\r
-        RootView::GetInstance()->RemoveAll();\r
-        return;\r
-    }\r
-\r
-    int TraingCardView::GetCurrentPage()\r
-    {\r
-        return swipe_->GetCurrentPageId(0); // 获取水平页面\r
-    }\r
-    UIImageAnimatorView *TraingCardView::GetAnimator()\r
-    {\r
-        return imageAnimator;\r
-    }\r
+static const uint16_t LABEL_FONT_SIZE = 200;\r
+static const uint32_t BACK_GROUND_COLOR = 0xfff6f6f6;\r
+static const uint32_t CARD_PAGE_COLOR = 0xffd0d0d0;\r
+\r
+static TraingCardView *g_pTraingCardView{nullptr};\r
+\r
+TraingCardView::TraingCardView() {\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingCardView::TraingCardView");\r
+  InitTimer(); // 开启计时器\r
+  TraingModel::GetInstance()->SetSportState(\r
+      ExerciseState::Start); // 设置运动状态为开始\r
+  TraingModel::GetInstance()->SetTimestamp();\r
+  uapi_add_sport_vote(); // 保护进程\r
+  g_pTraingCardView = this;\r
+}\r
+\r
+TraingCardView::~TraingCardView() {\r
+  imageAnimator->Stop();\r
+  FreeImageInfoArray(winimageInfos, winbasePath.c_str(), 94);\r
+  ReleaseImageAnimatorSource(winimageAnimatorInfo, 94);\r
+  DeInit();\r
+\r
+  g_pTraingCardView = nullptr;\r
+  DisableTimer(); // 关闭计时器\r
+  TraingModel::GetInstance()->SetTimestamp();\r
+  uapi_remove_sport_vote(); // 移除\r
+}\r
+\r
+TraingCardView *TraingCardView::GetInstance() { return g_pTraingCardView; }\r
+\r
+/* InitView:初始化界面*/\r
+void TraingCardView ::InitView() {\r
+\r
+  if (swipe_ == nullptr) {\r
+    swipe_ = new UICrossView();\r
+    swipe_->SetPosition(0, 0, 466, 466);\r
+    swipe_->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
+  }\r
+\r
+  InitControlPage();\r
+  InitDataPage();\r
+  InitMusicPage();\r
+  InitDetailPage();\r
+\r
+  swipe_->HorAdd(controlview_);\r
+  swipe_->HorAdd(dataallview_);\r
+  swipe_->HorAdd(musicview_);\r
+\r
+  ShowEndView();\r
+  ShowGetTagView();\r
+  ShowHeartView();\r
+\r
+  //  swipe_->HorAdd(DetailView);\r
+  swipe_->VerAdd(DetailView, UICrossView::VPage::DOWN_PAGE);\r
+\r
+  swipe_->SetHorCurrentPage(Control_Card::DATA); // 设置进入索引 [数据]\r
+\r
+  UISwipeView::OnSwipeListener *onSwipeListener =\r
+      static_cast<UISwipeView::OnSwipeListener *>(\r
+          OHOS::TraingCardPresenter::GetInstance());\r
+  if (onSwipeListener == nullptr) {\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "onSwipeListener is null");\r
+    return;\r
+  }\r
+  swipe_->SetOnSwipeListener(onSwipeListener);\r
+\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingCardView::InitPage over");\r
+}\r
+\r
+/* DeInit:删除组件 */\r
+void TraingCardView::DeInit() {\r
+  swipe_->RemoveAll();\r
+\r
+  /*界面*/\r
+  controlview_->RemoveAll();\r
+  dataallview_->RemoveAll();\r
+  // DetailView->RemoveAll();\r
+  musicview_->RemoveAll();\r
+  endView->RemoveAll();\r
+  getView->RemoveAll();\r
+  heartView->RemoveAll();\r
+\r
+  /*标签*/\r
+  delete endtitle;\r
+  endtitle = nullptr;\r
+  delete notelabel;\r
+  notelabel = nullptr;\r
+  delete endnotelabel;\r
+  endnotelabel = nullptr;\r
+  delete endnote;\r
+  endnote = nullptr;\r
+  delete labeltitle;\r
+  labeltitle = nullptr;\r
+  delete labeltag;\r
+  labeltag = nullptr;\r
+  delete labelgettag;\r
+  labelgettag = nullptr;\r
+  delete labelpre;\r
+  labelpre = nullptr;\r
+  delete hearttitle;\r
+  hearttitle = nullptr;\r
+  delete labelnote;\r
+  labelnote = nullptr;\r
+  /*图片*/\r
+  delete heartiamge;\r
+  heartiamge = nullptr;\r
+\r
+  /*按键*/\r
+  delete exit;\r
+  exit = nullptr;\r
+  delete back;\r
+  back = nullptr;\r
+  delete buttonok_;\r
+  buttonok_ = nullptr;\r
+  delete buttonnote_;\r
+  buttonnote_ = nullptr;\r
+\r
+  /*动画*/\r
+  delete imageAnimator;\r
+  imageAnimator = nullptr;\r
+\r
+  /*卡片*/\r
+  delete controlview_;\r
+  controlview_ = nullptr;\r
+  delete dataallview_;\r
+  dataallview_ = nullptr;\r
+  // delete DetailView;\r
+  // DetailView = nullptr;\r
+  delete swipe_;\r
+  delete musicview_;\r
+  musicview_ = nullptr;\r
+  /*弹窗*/\r
+  delete endView;\r
+  endView = nullptr;\r
+  delete getView;\r
+  getView = nullptr;\r
+  delete heartView;\r
+  heartView = nullptr;\r
+\r
+  swipe_ = nullptr;\r
+}\r
+UICardPage *TraingCardView::InitControlPage(void) {\r
+  controlview_ = new TrainingControlView();\r
+  // controlview_->PreLoad();\r
+  if (controlview_ == nullptr) {\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "controlview_ new fail");\r
+    return nullptr;\r
+  }\r
+  return controlview_;\r
+}\r
+UICardPage *TraingCardView::InitDataPage(void) {\r
+  dataallview_ = new TraingDataAllView();\r
+  //   dataallview_->PreLoad();\r
+  if (dataallview_ == nullptr) {\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dataallview_ new fail");\r
+    return nullptr;\r
+  }\r
+  return dataallview_;\r
+}\r
+UICardPage *TraingCardView::InitMusicPage(void) {\r
+  musicview_ = new PlayersView();\r
+  // musicview_->PreLoad();\r
+  if (musicview_ == nullptr) {\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "musicview_ new fail");\r
+    return nullptr;\r
+  }\r
+  return musicview_;\r
+}\r
+UICardPage *TraingCardView::InitDetailPage() {\r
+  DetailView = new TrainingDetailView();\r
+  //   DetailView->PreLoad();\r
+  DetailView->SetPosition(0, 0, Screen::GetInstance().GetWidth(),\r
+                          Screen::GetInstance().GetHeight());\r
+  DetailView->SetStyle(STYLE_BORDER_RADIUS, 466); // 设置为圆形\r
+  if (DetailView == nullptr) {\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DetailView new fail");\r
+    return nullptr;\r
+  }\r
+  return DetailView;\r
+}\r
+void TraingCardView::PreLoad(void) {\r
+  if (!viewiInitStatus) {\r
+    InitView();\r
+    viewiInitStatus = true;\r
+  }\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingCardView  PreLoad");\r
+}\r
+void TraingCardView::OnStart() {\r
+  View<TraingCardPresenter>::OnStart();\r
+\r
+  swipe_ = new UICrossView();\r
+  if (swipe_ == nullptr) {\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "swipe_ new fail");\r
+    return;\r
+  }\r
+  UIView::OnDragListener *listener =\r
+      static_cast<UIView::OnDragListener *>(TraingCardPresenter::GetInstance());\r
+  if (listener == nullptr) {\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,\r
+                  "AlarmSetWeekView:: new alarmDragListener fail");\r
+    return;\r
+  }\r
+  swipe_->SetOnDragListener(listener);\r
+\r
+  PreLoad();\r
+  swipe_->SetPosition(0, 0, Screen::GetInstance().GetWidth(),\r
+                      Screen::GetInstance().GetHeight());\r
+  swipe_->SetTouchable(true);\r
+  swipe_->SetDraggable(true);\r
+  swipe_->SetStyle(STYLE_BACKGROUND_COLOR, BACK_GROUND_COLOR);\r
+  swipe_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);\r
+  swipe_->EnableScreenCap(true);\r
+  swipe_->SetAnimatorTime(50);\r
+\r
+  SetContainerView(swipe_);\r
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "swipe_ new ok");\r
+}\r
+/*设置弹窗状态*/\r
+void TraingCardView::SetPopupViewStatus(PopupType type, bool status) {\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetPopupViewStatus %d", type);\r
+  UIView *popupView = nullptr;\r
+  if (type == EndPopup) {\r
+    popupView = endView;\r
+  } else if (type == GetTagPopup) {\r
+    popupView = getView;\r
+  } else if (type == HeartPopup) {\r
+    popupView = heartView;\r
+  }\r
+\r
+  if (popupView == nullptr) {\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PopupView is NULL");\r
+    return;\r
+  }\r
+\r
+  UIView *cardview = TraingCardView::GetInstance()->GetTraingCrad();\r
+  if (cardview != nullptr) {\r
+    cardview->SetVisible(!status);\r
+  }\r
+\r
+  popupView->SetVisible(status);\r
+}\r
+/*结束弹窗界面*/\r
+void TraingCardView::ShowEndView() {\r
+  // momentumFlag = false; // 标志位还原\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowEndView");\r
+  endView = new UIScrollView();\r
+  if (endView == nullptr) {\r
+    return;\r
+  }\r
+  endView->SetPosition(0, 0);\r
+  endView->Resize(VERTICAL_RESOLUTION, HORIZONTAL_RESOLUTION);\r
+  endView->SetScrollBlankSize(20);\r
+  endView->SetReboundSize(50);\r
+  endView->SetDirection(1);\r
+\r
+  InitRollLabel(endtitle, 83, 50, 300, 35, "label1", STR_LOOK_OUT,\r
+                DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+  InitRollLabel(notelabel, 56, 167, 360, 80, "label2",\r
+                STR_INSUFFICIENT_EXERCISE_AMOUNT, DEFAULT_VECTOR_FONT_FILENAME,\r
+                30);\r
+  /*隐藏是否结束运动title*/\r
+  InitRollLabel(endnote, 56, 207, 360, 80, "label3", STR_END_THIS_MOVEMENT,\r
+                DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+  endnote->SetVisible(false);\r
+\r
+  endView->Add(endnote);\r
+  endView->Add(endtitle);\r
+  endView->Add(notelabel);\r
+\r
+  InitButton(exit, 111, 299, 100, 100, BUTTONBACK);\r
+  exit->SetOnClickListener(static_cast<UIView::OnClickListener *>(\r
+      TraingCardPresenter::GetInstance()));\r
+  exit->SetImageSrc(NO_IMAGE, NO_IMAGE);\r
+  InitButton(back, 256, 299, 100, 100, BUTTONEXIT);\r
+  back->SetOnClickListener(static_cast<UIView::OnClickListener *>(\r
+      TraingCardPresenter::GetInstance()));\r
+  back->SetImageSrc(YES_IMAGE, YES_IMAGE);\r
+  endView->Add(exit);\r
+  endView->Add(back);\r
+  RootView::GetInstance()->Add(endView);\r
+  endView->SetDraggable(false);\r
+  endView->SetTouchable(true);\r
+  endView->SetVisible(false); // 界面隐藏\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowEndView end");\r
+}\r
+/*目标达成界面*/\r
+void TraingCardView::ShowGetTagView() {\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowGetTagView");\r
+  getView = new UIScrollView();\r
+  if (getView == nullptr) {\r
+    return;\r
+  }\r
+  getView->SetPosition(0, 0);\r
+  getView->Resize(VERTICAL_RESOLUTION, HORIZONTAL_RESOLUTION);\r
+  getView->SetScrollBlankSize(20);\r
+  getView->SetReboundSize(50);\r
+  getView->SetDirection(1);\r
+\r
+  // 初始化Lable\r
+  InitRollLabel(labeltitle, 83, 50, 300, 35, "label1", STR_GOAL_ACHIEVED,\r
+                DEFAULT_VECTOR_FONT_FILENAME, 35);\r
+  getView->Add(labeltitle);\r
+  InitRollLabel(labelgettag, 103, 307, 200, 35, "label3", STR_ACCOMPLISH_GOAL,\r
+                DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+  getView->Add(labelgettag);\r
+  InitLabel(labelpre, 233, 307, 160, 35, "label3", "100%",\r
+            DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+  getView->Add(labelpre);\r
+\r
+  // 初始化按键\r
+  InitButtonExt(buttonok_, 0, 366, 466, 100, BUTTONWINOK, STR_OK, 30);\r
+  buttonok_->SetImageSrc(BUTTONOK_IMAGE, BUTTONOK_IMAGE);\r
+  buttonok_->SetOnClickListener(static_cast<UIView::OnClickListener *>(\r
+      TraingCardPresenter::GetInstance()));\r
+  getView->Add(buttonok_);\r
+\r
+  InitImageAnimator();\r
+  RootView::GetInstance()->Add(getView);\r
+  getView->SetDraggable(false);\r
+  getView->SetTouchable(true);\r
+  getView->SetVisible(false); // 界面隐藏\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowGetTagView end");\r
+}\r
+/*最高心率提醒弹窗*/\r
+void TraingCardView::ShowHeartView() {\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowHeartView");\r
+  heartView = new UIScrollView();\r
+  if (heartView == nullptr) {\r
+    return;\r
+  }\r
+  heartView->SetPosition(0, 0);\r
+  heartView->Resize(VERTICAL_RESOLUTION, HORIZONTAL_RESOLUTION);\r
+  heartView->SetScrollBlankSize(20);\r
+  heartView->SetReboundSize(50);\r
+  heartView->SetDirection(1);\r
+\r
+  // 初始化Lable\r
+  InitRollLabel(hearttitle, 83, 50, 300, 35, "label1", STR_HEARTTITLE,\r
+                DEFAULT_VECTOR_FONT_FILENAME, 35);\r
+  heartView->Add(hearttitle);\r
+\r
+  int maxheart = ConfigModel::GetInstance()->get_configData_int(\r
+      ConfigModel::CONFIGMODEL_ITEM_TRAINING_HEART_MAX);\r
+  std::string heartStr = "当前心率高于" + std::to_string(maxheart) + "次/分钟";\r
+  InitLabel(labelnote, 53, 269, 360, 35, "label3", heartStr.c_str(),\r
+            DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+  heartView->Add(labelnote);\r
+\r
+  InitImageView(heartiamge, 193, 149, 80, 80, "note", WARNING_IMAGE);\r
+  heartView->Add(heartiamge);\r
+\r
+  // 初始化按键\r
+  InitButtonExt(buttonnote_, 0, 366, 466, 100, BUTTONNOTE, STR_OK, 30);\r
+  buttonnote_->SetImageSrc(BUTTONOK_IMAGE, BUTTONOK_IMAGE);\r
+  buttonnote_->SetOnClickListener(static_cast<UIView::OnClickListener *>(\r
+      TraingCardPresenter::GetInstance()));\r
+  heartView->Add(buttonnote_);\r
+\r
+  RootView::GetInstance()->Add(heartView);\r
+  heartView->SetDraggable(false);\r
+  heartView->SetTouchable(true);\r
+  heartView->SetVisible(false); // 界面隐藏\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowHeartView end");\r
+}\r
+/*获取运动量结束弹窗界面刷新*/\r
+bool TraingCardView::RefreshEndView() {\r
+  // 获取训练卡路里判断运动量\r
+  momentumFlag = TraingModel::GetInstance()->GetMomentum();\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "momentumFlag %d", momentumFlag);\r
+\r
+  if (momentumFlag) {\r
+    // 正常结束\r
+    endnote->SetVisible(false);\r
+    endtitle->SetTextId(STR_END_MOVEMENT);\r
+    notelabel->SetTextId(STR_END_THIS_MOVEMENT);\r
+  } else {\r
+    endtitle->SetTextId(STR_LOOK_OUT);\r
+    notelabel->SetTextId(STR_INSUFFICIENT_EXERCISE_AMOUNT);\r
+    endnote->SetVisible(true);\r
+  }\r
+  return momentumFlag;\r
+}\r
+/*初始化动画以及Taglabel*/\r
+void TraingCardView::InitImageAnimator() {\r
+  int tag = TraingModel::GetInstance()->GetSportTag();\r
+  ExerciseTag tagType = TraingModel::GetInstance()->GetSportTagtype();\r
+  std::string tagString = std::to_string(tag);\r
+  switch (tagType) {\r
+  case ExerciseTag::Duration: {\r
+    int hours = tag / 60;\r
+    int minutes = tag % 60;\r
+    int seconds = 0;\r
+    // 将小时、分钟、秒转换为字符串,并在小于10时补零\r
+    std::string hoursStr =\r
+        (hours < 10) ? "0" + std::to_string(hours) : std::to_string(hours);\r
+    std::string minutesStr = (minutes < 10) ? "0" + std::to_string(minutes)\r
+                                            : std::to_string(minutes);\r
+    std::string secondsStr = (seconds < 10) ? "0" + std::to_string(seconds)\r
+                                            : std::to_string(seconds);\r
+    tagString = hoursStr + ":" + minutesStr + ":" + secondsStr;\r
+    break;\r
+  }\r
+  case ExerciseTag::Calories: {\r
+    tagString = tagString + "kcal";\r
+    break;\r
+  }\r
+  case ExerciseTag::Distance: {\r
+    tagString = tagString + "km";\r
+    break;\r
+  }\r
+  case ExerciseTag::Steps:\r
+    break;\r
+  default:\r
+    break;\r
+  }\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,\r
+                "tag[%d]-tagType[%d]-tagString[%s]\r\n", tag, tagType,\r
+                tagString.c_str());\r
+  InitLabel(labeltag, 70, 215, 326, 97, "label2", tagString.c_str(),\r
+            DEFAULT_VECTOR_FONT_FILENAME, 80);\r
+  labeltag->SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff));\r
+  getView->Add(labeltag);\r
+\r
+  // 初始化图片数组以及动画\r
+  winimageInfos = CreateImageInfoArray(winbasePath.c_str(), 94);\r
+  InitImageAnimatorSource(imageAnimator, winimageAnimatorInfo, winimageInfos,\r
+                          94, 173, 100, 120, 120, "imageAnimator1", 10);\r
+  getView->Add(imageAnimator);\r
+}\r
+\r
+/*获取卡片View单例*/\r
+UICrossView *TraingCardView::GetTraingCrad() { return swipe_; }\r
+void TraingCardView::OnSetUpView() {\r
+  View<TraingCardPresenter>::OnSetUpView();\r
+  Draw();\r
+}\r
+\r
+void TraingCardView::OnTearDownView() {\r
+  View<TraingCardPresenter>::OnTearDownView();\r
+  return;\r
+}\r
+\r
+void TraingCardView::OnStop() {\r
+  View<TraingCardPresenter>::OnStop();\r
+  RootView::GetInstance()->RemoveAll();\r
+  return;\r
+}\r
+\r
+int TraingCardView::GetCurrentPage() {\r
+  return swipe_->GetCurrentPageId(0); // 获取水平页面\r
 }\r
+UIImageAnimatorView *TraingCardView::GetAnimator() { return imageAnimator; }\r
+} // namespace OHOS\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingDataAllView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingDataAllView.cpp
new file mode 100644 (file)
index 0000000..1579cf2
--- /dev/null
@@ -0,0 +1,169 @@
+#include "traing/include/TraingModel.h"
+#include "traing/training_card/include/TrainingControlView.h"
+#include "traing/training_card/include/TrainingDataView.h"
+#include "traing/training_card/include/TrainingDetailView.h"
+#include "wearable_log.h"
+
+namespace OHOS {
+
+static TraingDataAllView *g_pTraingDataAllView{nullptr};
+
+TraingDataAllView::TraingDataAllView() {
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,
+                "TraingDataAllView::TraingDataAllView");
+  SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
+  g_pTraingDataAllView = this;
+}
+
+TraingDataAllView::~TraingDataAllView() {
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,
+                "TraingDataAllView::~TraingDataAllView");
+  ClearAll();
+  g_pTraingDataAllView = nullptr;
+}
+
+TraingDataAllView *TraingDataAllView::GetInstance(void) {
+  return g_pTraingDataAllView;
+}
+
+void TraingDataAllView::ClearAll(void) {
+  for (int32_t i = 0; i < maxPage; i++) {
+    recordCard[i] = nullptr;
+  }
+
+  if (TraingDataAllSwipeViewList) {
+    TraingDataAllSwipeViewList->RemoveAll();
+    delete TraingDataAllSwipeViewList;
+    TraingDataAllSwipeViewList = nullptr;
+  }
+
+  delete trainingDataView;
+  trainingDataView = nullptr;
+
+  delete trainingDetailView;
+  trainingDetailView = nullptr;
+}
+
+UISwipeView *TraingDataAllView::TraingDataAllViewInit(void) {
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                "TraingDataAllView::TraingDataAllViewInit");
+
+  TraingDataAllSwipeViewList = new UISwipeView(UISwipeView::VERTICAL);
+  if (!TraingDataAllSwipeViewList) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                  "Failed to create TraingDataAllSwipeViewList");
+    return nullptr;
+  }
+
+  TraingDataAllSwipeViewList->SetStyle(STYLE_BACKGROUND_COLOR,
+                                       Color::Black().full);
+  TraingDataAllSwipeViewList->SetPosition(0, 0, HORIZONTAL_RESOLUTION,
+                                          VERTICAL_RESOLUTION);
+  TraingDataAllSwipeViewList->SetDraggable(true);
+  TraingDataAllSwipeViewList->SetTouchable(true);
+
+  for (uint16_t i = 0; i < maxPage; i++) {
+    recordCard[i] = CreatePage(i);
+    if (!recordCard[i]) {
+      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "recordCard[%d] is nullptr", i);
+      return nullptr;
+    }
+    recordCard[i]->InitView(this);
+    TraingDataAllSwipeViewList->Add(recordCard[i]);
+  }
+
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingDataAllView InitPage complete");
+  return TraingDataAllSwipeViewList;
+}
+
+UISwipeView *TraingDataAllView::GetTraingDataAllPageView() {
+  return TraingDataAllViewInit();
+}
+
+TrainingDataView *TraingDataAllView::GetTrainingDataView(void) {
+  return trainingDataView;
+}
+
+TrainingDetailView *TraingDataAllView::GetTrainingDetailView(void) {
+  return trainingDetailView;
+}
+
+AppGroupView *TraingDataAllView::TraingDataPageInit(void) {
+  trainingDataView = new TrainingDataView();
+  if (!trainingDataView) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create TrainingDataView");
+    return nullptr;
+  }
+  return trainingDataView;
+}
+
+AppGroupView *TraingDataAllView::TraingDetailPageInit(void) {
+  trainingDetailView = new TrainingDetailView();
+  if (!trainingDetailView) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                  "Failed to create TrainingDetailView");
+    return nullptr;
+  }
+  return trainingDetailView;
+}
+
+struct TraingDataAllViewMapper {
+  const int16_t viewId;
+  AppGroupView *(TraingDataAllView::*func)(void);
+};
+
+static const TraingDataAllViewMapper g_pageMapper[] = {
+    {TRAING_DATA_ALL_MAIN_VIEW, &TraingDataAllView::TraingDataPageInit},
+    {TRAING_DATA_ALL_DETAIL_VIEW, &TraingDataAllView::TraingDetailPageInit},
+};
+
+AppGroupView *TraingDataAllView::CreatePage(uint8_t TraingDataAllPageId) {
+  for (const auto &mapper : g_pageMapper) {
+    if (mapper.viewId == TraingDataAllPageId) {
+      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                    "Creating page for TraingDataAllPageId: %d",
+                    TraingDataAllPageId);
+      return (this->*(mapper.func))();
+    }
+  }
+  return nullptr;
+}
+
+bool TraingDataAllView::InitView(void) {
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Initializing TraingDataAllView");
+
+  if (!trainingDataAllView) {
+    trainingDataAllView = new TraingDataAllView();
+    if (!trainingDataAllView) {
+      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                    "Failed to create TraingDataAllView");
+      return false;
+    }
+  }
+
+  traingDataAllPageView = dynamic_cast<UISwipeView *>(
+      trainingDataAllView->GetTraingDataAllPageView());
+  if (!traingDataAllPageView) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                  "GetTraingDataAllPageView returned nullptr");
+    return false;
+  }
+  traingDataAllPageView->SetDraggable(true);
+  traingDataAllPageView->SetTouchable(true);
+  Add(traingDataAllPageView);
+
+  return true;
+}
+
+void TraingDataAllView::PreLoad(void) {
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Preloading TraingDataAllView");
+  if (!viewiInitStatus && InitView()) {
+    viewiInitStatus = true;
+  }
+}
+
+void TraingDataAllView::UnLoad(void) {
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Unloading TraingDataAllView");
+}
+
+} // namespace OHOS
\ No newline at end of file
index f8a9194..d91ce22 100644 (file)
@@ -2,95 +2,98 @@
  * @Date: 2024-04-15 10:55:58
  * @LastEditors: Caisking 3449750381@qq.com
  * @LastEditTime: 2024-08-02 09:35:58
- * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TrainingDataView.cpp
+ * @FilePath:
+ * /FD230/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TrainingDataView.cpp
  */
 
 #include "traing/training_card/include/TrainingDataView.h"
 #include "traing/training_card/include/TraingCardView.h"
 
-#include "common/image_cache_manager.h"
-#include "components/ui_label_ext.h"
-#include "ui_resource_string.h"
 #include "UiConfig.h"
-#include "ui_resource_image.h"
-#include <ui_scroll_view.h>
+#include "common/image_cache_manager.h"
 #include "components/ui_button.h"
+#include "components/ui_label_ext.h"
+#include "traing/Training_UiConfig.h"
 #include "traing/include/TraingModel.h"
+#include "ui_resource_image.h"
+#include "ui_resource_string.h"
 #include "uicomponents/UIComponents.h"
-#include "traing/Training_UiConfig.h"
+#include <ui_scroll_view.h>
+
+namespace OHOS {
 
-namespace OHOS
-{
-
-    static TrainingDataView *g_pTrainingDataView{nullptr};
-
-    TrainingDataView::TrainingDataView()
-    {
-        SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
-        g_pTrainingDataView = this;
-    }
-
-    TrainingDataView::~TrainingDataView()
-    {
-        RemoveAll();
-        DeInit();
-        g_pTrainingDataView = nullptr;
-    }
-
-    TrainingDataView *TrainingDataView::GetInstance()
-    {
-        return g_pTrainingDataView;
-    }
-
-    /* InitView:初始化界面*/
-    void TrainingDataView ::InitView()
-    {
-        // 初始化Image
-        InitImageView(image_progress, 13, 13, 440, 386, "image1", PROGRESS_IMAGE);
-        InitImageView(image_heart, 88, 295, 50, 50, "image2", SPORT_HEARTRATE_IMAGE);
-        InitImageView(image_iconup, 225, 396, 16, 10, "image4", INCO_UP_IMAGE);
-        InitImageView(image_iconpoint, 193, 421, 80, 20, "image5", DATA_POINT_IMAGE);
-        Add(image_progress);
-        Add(image_heart);
-        Add(image_iconup);
-        Add(image_iconpoint);
-
-        // 初始化进度条
-        circleProgress = new UICircleProgress();
-        circleProgress->SetPosition(0, 0);
-        circleProgress->Resize(466, 466);
-        circleProgress->SetViewId("circleProgress");
-        circleProgress->SetStyle(STYLE_BACKGROUND_OPA, 0x00);
-        circleProgress->SetBackgroundStyle(STYLE_BACKGROUND_COLOR, 0xff000000);
-        circleProgress->SetBackgroundStyle(STYLE_LINE_WIDTH, 12);
-        circleProgress->SetForegroundStyle(STYLE_BACKGROUND_COLOR, 0xff2195F6);
-        circleProgress->SetForegroundStyle(STYLE_BORDER_COLOR, 0xff000000);
-        circleProgress->SetForegroundStyle(STYLE_LINE_COLOR, 0xff4fC34C);
-        circleProgress->SetForegroundStyle(STYLE_LINE_WIDTH, 10);
-        circleProgress->SetCenterPosition(235, 235);
-        circleProgress->SetRadius(215);
-        circleProgress->SetStartAngle(215);
-        circleProgress->SetEndAngle(505);
-        circleProgress->SetCapType(CAP_ROUND);
-        circleProgress->SetValue(0);
-        Add(circleProgress);
-
-        // 初始化Lable
-        UIResourceTextId sport_id = TraingModel::GetInstance()->GetSportEvent();
-        InitLabelExt(sportlabel, 83, 120, 300, 35, "label2", sport_id, DEFAULT_VECTOR_FONT_FILENAME, 30);
-        sportlabel->SetTextColor(Color::Gray());
-
-        InitLabel(curtimelabel, 155, 60, 150, 50, "label1", "23:54", DEFAULT_VECTOR_FONT_FILENAME, 40);
-
-        InitLabel(timerlabel, 0, 163, 466, 150, "label3", "00:00:00", DEFAULT_VECTOR_FONT_FILENAME, 80);
-        InitLabel(heartlabel, 85, 284, 230, 80, "label4", "--", DEFAULT_VECTOR_FONT_FILENAME, 60);
-        InitLabel(ubpmlabel, 218, 284, 230, 80, "label5", "bpm", DEFAULT_VECTOR_FONT_FILENAME, 60);
-        ubpmlabel->SetTextColor(Color::Gray());
-        Add(curtimelabel);
-        Add(sportlabel);
-        Add(timerlabel);
-        Add(heartlabel);
-        Add(ubpmlabel);
+static TrainingDataView *g_pTrainingDataView{nullptr};
+
+TrainingDataView::TrainingDataView() {
+  SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
+  g_pTrainingDataView = this;
+}
+
+TrainingDataView::~TrainingDataView() {
+  RemoveAll();
+  DeInit();
+  g_pTrainingDataView = nullptr;
+}
+
+TrainingDataView *TrainingDataView::GetInstance() {
+  return g_pTrainingDataView;
+}
+
+/* InitView:初始化界面*/
+bool TrainingDataView ::InitPage() {
+  // 初始化Image
+  InitImageView(image_progress, 13, 13, 440, 386, "image1", PROGRESS_IMAGE);
+  InitImageView(image_heart, 88, 295, 50, 50, "image2", SPORT_HEARTRATE_IMAGE);
+  InitImageView(image_iconup, 225, 396, 16, 10, "image4", INCO_UP_IMAGE);
+  InitImageView(image_iconpoint, 193, 421, 80, 20, "image5", DATA_POINT_IMAGE);
+  Add(image_progress);
+  Add(image_heart);
+  Add(image_iconup);
+  Add(image_iconpoint);
+
+  // 初始化进度条
+  circleProgress = new UICircleProgress();
+  circleProgress->SetPosition(0, 0);
+  circleProgress->Resize(466, 466);
+  circleProgress->SetViewId("circleProgress");
+  circleProgress->SetStyle(STYLE_BACKGROUND_OPA, 0x00);
+  circleProgress->SetBackgroundStyle(STYLE_BACKGROUND_COLOR, 0xff000000);
+  circleProgress->SetBackgroundStyle(STYLE_LINE_WIDTH, 12);
+  circleProgress->SetForegroundStyle(STYLE_BACKGROUND_COLOR, 0xff2195F6);
+  circleProgress->SetForegroundStyle(STYLE_BORDER_COLOR, 0xff000000);
+  circleProgress->SetForegroundStyle(STYLE_LINE_COLOR, 0xff4fC34C);
+  circleProgress->SetForegroundStyle(STYLE_LINE_WIDTH, 10);
+  circleProgress->SetCenterPosition(235, 235);
+  circleProgress->SetRadius(215);
+  circleProgress->SetStartAngle(215);
+  circleProgress->SetEndAngle(505);
+  circleProgress->SetCapType(CAP_ROUND);
+  circleProgress->SetValue(0);
+  Add(circleProgress);
+
+  // 初始化Lable
+  UIResourceTextId sport_id = TraingModel::GetInstance()->GetSportEvent();
+  InitLabelExt(sportlabel, 83, 120, 300, 35, "label2", sport_id,
+               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  sportlabel->SetTextColor(Color::Gray());
+
+  InitLabel(curtimelabel, 155, 60, 150, 50, "label1", "23:54",
+            DEFAULT_VECTOR_FONT_FILENAME, 40);
+
+  InitLabel(timerlabel, 0, 163, 466, 150, "label3", "00:00:00",
+            DEFAULT_VECTOR_FONT_FILENAME, 80);
+  InitLabel(heartlabel, 85, 284, 230, 80, "label4", "--",
+            DEFAULT_VECTOR_FONT_FILENAME, 60);
+  InitLabel(ubpmlabel, 218, 284, 230, 80, "label5", "bpm",
+            DEFAULT_VECTOR_FONT_FILENAME, 60);
+  ubpmlabel->SetTextColor(Color::Gray());
+  Add(curtimelabel);
+  Add(sportlabel);
+  Add(timerlabel);
+  Add(heartlabel);
+  Add(ubpmlabel);
+
+  return true;
 
 #if 0
         //  初始化Button
@@ -100,108 +103,91 @@ namespace OHOS
         buttonNote->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingCardPresenter::GetInstance()));
         Add(buttonNote);
 #endif
-        // 增加上拉卡片
-        SetCoverable(true);
-    }
-
-    /* DeInit:删除组件 */
-    void TrainingDataView::DeInit()
-    {
-        RemoveAll();
-        if (curtimelabel != nullptr)
-        {
-            curtimelabel = nullptr;
-        }
-        if (sportlabel != nullptr)
-        {
-            delete sportlabel;
-            sportlabel = nullptr;
-        }
-        if (timerlabel != nullptr)
-        {
-            delete timerlabel;
-            timerlabel = nullptr;
-        }
-        if (heartlabel != nullptr)
-        {
-            delete heartlabel;
-            heartlabel = nullptr;
-        }
-        if (ubpmlabel != nullptr)
-        {
-            delete ubpmlabel;
-            ubpmlabel = nullptr;
-        }
-        // 删除button
-        if (buttonNote != nullptr)
-        {
-            delete buttonNote;
-            buttonNote = nullptr;
-        }
-
-        // 删除Image
-        if (image_lowIntensity != nullptr)
-        {
-            delete image_lowIntensity;
-            image_lowIntensity = nullptr;
-        }
-        if (image_iconup != nullptr)
-        {
-            delete image_iconup;
-            image_iconup = nullptr;
-        }
-        if (image_iconpoint != nullptr)
-        {
-            delete image_iconpoint;
-            image_iconpoint = nullptr;
-        }
-        if (circleProgress != nullptr)
-        {
-            delete circleProgress;
-            circleProgress = nullptr;
-        }
-    }
-
-    void TrainingDataView::PreLoad(void)
-    {
-        if (!viewiInitStatus)
-        {
-            InitView();
-            viewiInitStatus = true;
-        }
-    }
-
-    void TrainingDataView::UnLoad(void) {}
-    UILabelExt *TrainingDataView::GetTimeLabel()
-    {
-        return timerlabel;
-    }
-    UILabelExt *TrainingDataView::GetHeartLabel()
-    {
-        return heartlabel;
-    }
-    UICircleProgress *TrainingDataView::GetProgress()
-    {
-        return circleProgress;
-    }
-    /*更新当前时间*/
-    void TrainingDataView::UpdataTime()
-    {
-        if (curtimelabel == nullptr) // 防止刷新空组件
-            return;
-
-        // 获取当前时间
-        struct tm pTM;
-        time_t seconds;
-        time(&seconds);
-        localtime_r(&seconds, &pTM);
-
-        // 解析时间
-        int hour = pTM.tm_hour;
-        int minute = pTM.tm_min;
-
-        // 将时间和日期转换为字符串
-        std::string stringtime = (hour < 10 ? "0" : "") + std::to_string(hour) + ":" + (minute < 10 ? "0" : "") + std::to_string(minute);
-        curtimelabel->SetText(stringtime.c_str());
-    }
+  // 增加上拉卡片
+  // SetCoverable(true);
+}
+
+/* DeInit:删除组件 */
+void TrainingDataView::DeInit() {
+  RemoveAll();
+  if (curtimelabel != nullptr) {
+    curtimelabel = nullptr;
+  }
+  if (sportlabel != nullptr) {
+    delete sportlabel;
+    sportlabel = nullptr;
+  }
+  if (timerlabel != nullptr) {
+    delete timerlabel;
+    timerlabel = nullptr;
+  }
+  if (heartlabel != nullptr) {
+    delete heartlabel;
+    heartlabel = nullptr;
+  }
+  if (ubpmlabel != nullptr) {
+    delete ubpmlabel;
+    ubpmlabel = nullptr;
+  }
+  // 删除button
+  if (buttonNote != nullptr) {
+    delete buttonNote;
+    buttonNote = nullptr;
+  }
+
+  // 删除Image
+  if (image_lowIntensity != nullptr) {
+    delete image_lowIntensity;
+    image_lowIntensity = nullptr;
+  }
+  if (image_iconup != nullptr) {
+    delete image_iconup;
+    image_iconup = nullptr;
+  }
+  if (image_iconpoint != nullptr) {
+    delete image_iconpoint;
+    image_iconpoint = nullptr;
+  }
+  if (circleProgress != nullptr) {
+    delete circleProgress;
+    circleProgress = nullptr;
+  }
+}
+
+UILabelExt *TrainingDataView::GetTimeLabel() { return timerlabel; }
+UILabelExt *TrainingDataView::GetHeartLabel() { return heartlabel; }
+UICircleProgress *TrainingDataView::GetProgress() { return circleProgress; }
+/*更新当前时间*/
+void TrainingDataView::UpdataTime() {
+  if (curtimelabel == nullptr) // 防止刷新空组件
+    return;
+
+  // 获取当前时间
+  struct tm pTM;
+  time_t seconds;
+  time(&seconds);
+  localtime_r(&seconds, &pTM);
+
+  // 解析时间
+  int hour = pTM.tm_hour;
+  int minute = pTM.tm_min;
+
+  // 将时间和日期转换为字符串
+  std::string stringtime = (hour < 10 ? "0" : "") + std::to_string(hour) + ":" +
+                           (minute < 10 ? "0" : "") + std::to_string(minute);
+  curtimelabel->SetText(stringtime.c_str());
+}
+
+bool TrainingDataView::InitView(void *caller) {
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TrainingDataView InitView %p",
+                caller);
+  if (InitPage() == false) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TrainingDataView::InitPage fail");
+    return false;
+  }
+  SetDraggable(true);
+  SetTouchable(true);
+  //   SleepDataRefresh();
+  return true;
 }
+} // namespace OHOS
index a4518a6..cc77a90 100644 (file)
 #include "traing/training_card/include/TrainingDetailView.h"
 #include "traing/training_card/include/TraingCardView.h"
 
-#include "common/image_cache_manager.h"
-#include "components/ui_label_ext.h"
-#include "ui_resource_string.h"
 #include "UiConfig.h"
-#include "ui_resource_image.h"
-#include <ui_scroll_view.h>
+#include "common/image_cache_manager.h"
 #include "components/ui_button.h"
+#include "components/ui_label_ext.h"
+#include "traing/Training_UiConfig.h"
 #include "traing/include/TraingModel.h"
+#include "ui_resource_image.h"
+#include "ui_resource_string.h"
 #include "uicomponents/UIComponents.h"
-#include "traing/Training_UiConfig.h"
-
-namespace OHOS
-{
-
-    static TrainingDetailView *g_pTrainingDetailView{nullptr};
-
-    TrainingDetailView::TrainingDetailView()
-    {
-        SetPosition(0, 0, 466, 466);
-        // SetStyle(STYLE_BACKGROUND_OPA, 0);
-        // SetStyle(STYLE_BORDER_RADIUS, 466);
-        g_pTrainingDetailView = this;
-    }
-    TrainingDetailView::~TrainingDetailView()
-    {
-        RemoveAll();
-        DeInit();
-        g_pTrainingDetailView = nullptr;
-    }
-
-    TrainingDetailView *TrainingDetailView::GetInstance()
-    {
-        return g_pTrainingDetailView;
-    }
-
-    /* InitView:初始化界面*/
-    void TrainingDetailView ::InitView()
-    {
-        // 初始化Image
-
-        InitImageView(progress_image, 0, 0, 100, 100, "image5", COLOR_PROGRESS_IMAGE);
-        // InitImageView(lineimage2_, 225, 190, 0, 0, "image", LINE_2_IMAGE);
-        if (lineimage2_ == nullptr)
-        {
-            lineimage2_ = new UIImageView();
-        }
-        lineimage2_->SetPosition(232, 191);
-        lineimage2_->Resize(2, 82);
-        lineimage2_->SetViewId("image2");
-        lineimage2_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff333333);
-        lineimage2_->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
-        lineimage2_->SetVisible(true);
-
-        Add(progress_image);
-        Add(lineimage2_);
-
-        // 初始化Lable
-        InitLabelExt(u_milelabel, 16, 234, 220, 35, "label2", STR_RANGE_SETTING, DEFAULT_VECTOR_FONT_FILENAME, 30);
-        InitLabelExt(u_stepslabel, 73, 362, 320, 35, "label3", STR_STEP_NUMBER, DEFAULT_VECTOR_FONT_FILENAME, 30);
-        InitLabelExt(u_calorielabel, 225, 235, 230, 35, "label4", STR_CALORIE_SETTING, DEFAULT_VECTOR_FONT_FILENAME, 30);
-        u_milelabel->SetTextColor(Color::Gray());
-        u_stepslabel->SetTextColor(Color::Gray());
-        u_calorielabel->SetTextColor(Color::Gray());
-
-        InitLabel(milelabel, 17, 160, 200, 80, "label6", "13.21", DEFAULT_VECTOR_FONT_FILENAME, 65);
-        InitLabel(calorielabel, 230, 160, 200, 80, "label7", "28312", DEFAULT_VECTOR_FONT_FILENAME, 65);
-        InitLabel(steplabel, 133, 285, 200, 80, "label8", "210.03", DEFAULT_VECTOR_FONT_FILENAME, 65);
-        Add(u_milelabel);
-        Add(u_stepslabel);
-        Add(u_calorielabel);
-        Add(milelabel);
-        Add(steplabel);
-        Add(calorielabel);
+#include <ui_scroll_view.h>
 
-        InitButtonExt(intensity_button, 103, 70, 260, 80, "button", STR_LOWER_STRENGTH, 30);
-        Add(intensity_button);
+namespace OHOS {
 
-        SetTouchable(true);
-        // SetIntercept(true);
-    }
-    /* DeInit:删除组件 */
-    void TrainingDetailView::DeInit()
-    {
-        RemoveAll();
-        if (u_milelabel != nullptr)
-        {
-            delete u_milelabel;
-            u_milelabel = nullptr;
-        }
-        if (u_stepslabel != nullptr)
-        {
-            delete u_stepslabel;
-            u_stepslabel = nullptr;
-        }
-        if (u_calorielabel != nullptr)
-        {
-            delete u_calorielabel;
-            u_calorielabel = nullptr;
-        }
-        if (milelabel != nullptr)
-        {
-            delete milelabel;
-            milelabel = nullptr;
-        }
-        if (steplabel != nullptr)
-        {
-            delete steplabel;
-            steplabel = nullptr;
-        }
-        if (calorielabel != nullptr)
-        {
-            delete calorielabel;
-            calorielabel = nullptr;
-        }
+static TrainingDetailView *g_pTrainingDetailView{nullptr};
 
-        if (progress_image != nullptr)
-        {
-            delete progress_image;
-            progress_image = nullptr;
-        }
-        if (lineimage2_ != nullptr)
-        {
-            delete lineimage2_;
-            lineimage2_ = nullptr;
-        }
-        if (intensity_button != nullptr)
-        {
-            delete intensity_button;
-            intensity_button = nullptr;
-        }
-    }
+TrainingDetailView::TrainingDetailView() {
+  SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
+  // SetStyle(STYLE_BACKGROUND_OPA, 0);
+  // SetStyle(STYLE_BORDER_RADIUS, 466);
+  g_pTrainingDetailView = this;
+}
+TrainingDetailView::~TrainingDetailView() {
+  RemoveAll();
+  DeInit();
+  g_pTrainingDetailView = nullptr;
+}
 
-    void TrainingDetailView::PreLoad(void)
-    {
-        if (!viewiInitStatus)
-        {
-            InitView();
-            viewiInitStatus = true;
-        }
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TrainingDetailView");
-    }
+TrainingDetailView *TrainingDetailView::GetInstance() {
+  return g_pTrainingDetailView;
+}
 
-    void TrainingDetailView::UnLoad(void) {}
+/* InitView:初始化界面*/
+bool TrainingDetailView ::InitPage() {
+  // 初始化Image
+  InitImageView(progress_image, 0, 0, 100, 100, "image5", COLOR_PROGRESS_IMAGE);
+  // InitImageView(lineimage2_, 225, 190, 0, 0, "image", LINE_2_IMAGE);
+  if (lineimage2_ == nullptr) {
+    lineimage2_ = new UIImageView();
+  }
+  lineimage2_->SetPosition(232, 191);
+  lineimage2_->Resize(2, 82);
+  lineimage2_->SetViewId("image2");
+  lineimage2_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff333333);
+  lineimage2_->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+  lineimage2_->SetVisible(true);
+
+  Add(progress_image);
+  Add(lineimage2_);
+
+  // 初始化Lable
+  InitLabelExt(u_milelabel, 16, 234, 220, 35, "label2", STR_RANGE_SETTING,
+               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  InitLabelExt(u_stepslabel, 73, 362, 320, 35, "label3", STR_STEP_NUMBER,
+               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  InitLabelExt(u_calorielabel, 225, 235, 230, 35, "label4", STR_CALORIE_SETTING,
+               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  u_milelabel->SetTextColor(Color::Gray());
+  u_stepslabel->SetTextColor(Color::Gray());
+  u_calorielabel->SetTextColor(Color::Gray());
+
+  InitLabel(milelabel, 17, 160, 200, 80, "label6", "13.21",
+            DEFAULT_VECTOR_FONT_FILENAME, 65);
+  InitLabel(calorielabel, 230, 160, 200, 80, "label7", "28312",
+            DEFAULT_VECTOR_FONT_FILENAME, 65);
+  InitLabel(steplabel, 133, 285, 200, 80, "label8", "210.03",
+            DEFAULT_VECTOR_FONT_FILENAME, 65);
+  Add(u_milelabel);
+  Add(u_stepslabel);
+  Add(u_calorielabel);
+  Add(milelabel);
+  Add(steplabel);
+  Add(calorielabel);
+
+  InitButtonExt(intensity_button, 103, 70, 260, 80, "button",
+                STR_LOWER_STRENGTH, 30);
+  Add(intensity_button);
+
+  SetTouchable(true);
+
+  return true;
+}
+/* DeInit:删除组件 */
+void TrainingDetailView::DeInit() {
+  RemoveAll();
+  if (u_milelabel != nullptr) {
+    delete u_milelabel;
+    u_milelabel = nullptr;
+  }
+  if (u_stepslabel != nullptr) {
+    delete u_stepslabel;
+    u_stepslabel = nullptr;
+  }
+  if (u_calorielabel != nullptr) {
+    delete u_calorielabel;
+    u_calorielabel = nullptr;
+  }
+  if (milelabel != nullptr) {
+    delete milelabel;
+    milelabel = nullptr;
+  }
+  if (steplabel != nullptr) {
+    delete steplabel;
+    steplabel = nullptr;
+  }
+  if (calorielabel != nullptr) {
+    delete calorielabel;
+    calorielabel = nullptr;
+  }
+
+  if (progress_image != nullptr) {
+    delete progress_image;
+    progress_image = nullptr;
+  }
+  if (lineimage2_ != nullptr) {
+    delete lineimage2_;
+    lineimage2_ = nullptr;
+  }
+  if (intensity_button != nullptr) {
+    delete intensity_button;
+    intensity_button = nullptr;
+  }
+}
 
-    UILabelExt *TrainingDetailView::GetMileLabel()
-    {
-        return milelabel;
-    }
-    UILabelExt *TrainingDetailView::GetStepLabel()
-    {
-        return steplabel;
-    }
-    UILabelExt *TrainingDetailView::GetCalorieLabel()
-    {
-        return calorielabel;
-    }
-    UILabelButtonExt *TrainingDetailView::Get_Intensity_Button()
-    {
-        return intensity_button;
-    }
+bool TrainingDetailView::InitView(void *caller) {
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TrainingDetailView InitView %p",
+                caller);
+  if (InitPage() == false) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TrainingDetailView::InitPage fail");
+    return false;
+  }
+  SetDraggable(true);
+  SetTouchable(true);
+  //   SleepDataRefresh();
+  return true;
+}
+UILabelExt *TrainingDetailView::GetMileLabel() { return milelabel; }
+UILabelExt *TrainingDetailView::GetStepLabel() { return steplabel; }
+UILabelExt *TrainingDetailView::GetCalorieLabel() { return calorielabel; }
+UILabelButtonExt *TrainingDetailView::Get_Intensity_Button() {
+  return intensity_button;
 }
+} // namespace OHOS