训练:修改“极限运动”列表
authorCaisking <3449750381@qq.com>
Sat, 5 Oct 2024 05:14:32 +0000 (13:14 +0800)
committerCaisking <3449750381@qq.com>
Sat, 5 Oct 2024 05:14:32 +0000 (13:14 +0800)
code/sdk/application/wearable/fd230app/nativeui/traing/training_list_limit/include/TraingLimitItemView.h
code/sdk/application/wearable/fd230app/nativeui/traing/training_list_limit/include/TraingLimitModel.h
code/sdk/application/wearable/fd230app/nativeui/traing/training_list_limit/include/TraingLimitView.h
code/sdk/application/wearable/fd230app/nativeui/traing/training_list_limit/src/TraingLimitItemView.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/training_list_limit/src/TraingLimitModel.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/training_list_limit/src/TraingLimitView.cpp

index fa19f66..b77a884 100644 (file)
@@ -1,19 +1,4 @@
-/*** 
- * @Author: Caisking 3449750381@qq.com
- * @Date: 2024-03-26 17:05:18
- * @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-03-29 15:20:12
- * @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/training_list_limit/include/TraingLimitItemView.h
- * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
- */
-/***
- * @Author: Caisking 3449750381@qq.com
- * @Date: 2024-03-26 17:05:18
- * @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-03-26 18:24:58
- * @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/training_list_limit/include/TraingLimitItemView.h
- * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
- */
+
 
 #ifndef TraingLimit_ITEM_VIEW_H
 #define TraingLimit_ITEM_VIEW_H
index 6a7a554..317d9dd 100644 (file)
@@ -29,7 +29,7 @@ namespace OHOS
         TraingLimitModel(const TraingLimitModel &);
         TraingLimitModel &operator=(const TraingLimitModel &);
         virtual ~TraingLimitModel();
-        static const uint16_t TraingLimitListMaxNum = 10;
+        static const uint16_t TraingLimitListMaxNum = 12;
         TraingLimitItem TraingLimits[TraingLimitListMaxNum] = {VIEW_INVALID, STR_EXERCISE_GENERAL};
         // std::map<int, AppViewId> TraingLimitIdToViewId;
         bool btConnectStatus{false};
index 695b080..e53a4ab 100644 (file)
@@ -1,10 +1,12 @@
-/*** 
+/***
  * @Author: Caisking 3449750381@qq.com
  * @Date: 2024-03-19 17:37:18
  * @LastEditors: Caisking 3449750381@qq.com
  * @LastEditTime: 2024-03-29 15:21:13
- * @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/training_list_limit/include/TraingLimitView.h
- * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ * @FilePath:
+ * /sdk/application/wearable/fd230app/nativeui/traing/training_list_limit/include/TraingLimitView.h
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置
+ * 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
 
 #ifndef TraingLimit_VIEW_H
 
 #include "BaseView.h"
 #include "View.h"
-#include "components/ui_view_group.h"
-#include "components/ui_scroll_view.h"
+#include "components/ui_label_button_ext.h"
+#include "components/ui_label_ext.h"
 #include "components/ui_list.h"
+#include "components/ui_scroll_view.h"
+#include "components/ui_view_group.h"
 #include "traing/training_list_limit/include/TraingLimitAdapter.h"
 #include "traing/training_list_limit/include/TraingLimitModel.h"
-#include "components/ui_label_button_ext.h"
-#include "components/ui_label_ext.h"
-#include"ui_resource_string.h"
-
-namespace OHOS
-{
-    class TraingLimitPresenter;
-    class TraingLimitModel;
-    class TraingLimitView : public View<TraingLimitPresenter>, public UIViewGroup
-    {
-
-    public:
-        TraingLimitView();
-        virtual ~TraingLimitView();
-        static TraingLimitView *GetInstance(void);
-
-        void OnStart() override;
-        void OnSetUpView() override;
-        void OnTearDownView() override;
-        void OnStop() override;
-
-        UIList *GetList();
-        void AddToTraingLimitList(const TraingLimitItem &item);
-
-    private:
-        void InitView(void);
-        void DeInitView(void);
-        void PreLoad(void);
-
-    private:
-        UIScrollView *scrollView = nullptr;
-        UILabelExt *title{nullptr};
-        TraingLimitAdapter *p_TraingLimitListAdapter{nullptr};
-        UIList *TraingLimitList = nullptr;
-        UIView::OnDragListener *draglistener{nullptr};
-
-        TraingLimitPresenter *g_TraingLimitPresenter{nullptr};
-        TraingLimitModel *g_TraingLimitModel{nullptr};
-        bool viewInitStatus{false};
-    };
+#include "ui_resource_string.h"
+
+namespace OHOS {
+class TraingLimitPresenter;
+class TraingLimitModel;
+class TraingLimitView : public View<TraingLimitPresenter>, public UIViewGroup {
+
+public:
+  TraingLimitView();
+  virtual ~TraingLimitView();
+  static TraingLimitView *GetInstance(void);
+
+  void OnStart() override;
+  void OnSetUpView() override;
+  void OnTearDownView() override;
+  void OnStop() override;
+
+  UIList *GetList();
+  void AddToTraingLimitList(const TraingLimitItem &item);
+
+private:
+  void InitView(void);
+  void DeInitView(void);
+  void InitList();
+  void InitScrollView();
+  void SetKeyActListener(void);
+  void PreLoad(void);
+
+private:
+  UIScrollView *scrollView = nullptr;
+  TraingLimitAdapter *p_TraingLimitListAdapter{nullptr};
+  UIList *TraingLimitList = nullptr;
+  bool viewInitStatus{false};
+};
 } // namespace OHOS
 #endif
\ No newline at end of file
index 31c2567..2d349bb 100644 (file)
-/***
- * @Author: Caisking 3449750381@qq.com
- * @Date: 2024-03-26 17:05:30
- * @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-03-29 11:18:05
- * @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/training_list_limit/src/TraingLimitItemView.cpp
- * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%A
- */
-
 #include "traing/training_list_limit/include/TraingLimitItemView.h"
+#include "UiConfig.h"
+#include "traing/Training_UiConfig.h"
 #include "traing/include/TraingModel.h"
 #include "uicomponents/UIComponents.h"
-#include "traing/Training_UiConfig.h"
-#include "components/ui_label_ext.h"
-#include "ui_resource_string.h"
-#include "UiConfig.h"
-namespace OHOS
-{
-
-    TraingLimitItemView::TraingLimitItemView()
-    {
-        SetPosition(0, 0, 380, 120); // 每一个itemview宽高要配置好,因为加到list都是以这个视图为基准
-        SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
-        SetStyle(STYLE_BACKGROUND_OPA, 255);
-        SetTouchable(true);
-        SetUpChild();
-        Add(&sbackground);
-        Add(&sicon);
-        Add(&sLabel);
-    }
-
-    TraingLimitItemView::~TraingLimitItemView()
-    {
-        Remove(&sbackground);
-        Remove(&sicon);
-        Remove(&sLabel);
-    }
-
-    /// @brief 设置item的信息
-    /// @param itemInfo
-    void TraingLimitItemView::SetItemInfo(const TraingLimitItem itemInfo)
-    {
-        sItemInfo = itemInfo;
-        sLabel.SetTextId(itemInfo.labelid);
-    }
-
-    /// @brief 设置每一个itemview上的组件
-    void TraingLimitItemView::SetUpChild()
-    {
-        sbackground.SetSrc(PNG_SETTING_BACKGROUND_IMAGE);
-
-        sicon.SetPosition(330, 40);
-        sicon.SetSrc(ICON_IMAGE);
-        sicon.SetStyle(STYLE_IMAGE_OPA, OPA_OPAQUE);
-
-           sLabel.SetPosition(40, 33, 240, 35);
-        sLabel.SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
-        sLabel.SetRollSpeed(70);
-//sLabel.SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
-
-        sLabel.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
-    }
-
-    /// @brief 获取list的中每个组件的在list的下标
-    /// @return 返回下标
-    AppViewId TraingLimitItemView::GetTraingLimitIndex()
-    {
-        return sItemInfo.id;
-    }
-    UIResourceTextId TraingLimitItemView::GetTraingLimitId()
-    {
-        return sItemInfo.labelid;
-    }
-}
\ No newline at end of file
+
+namespace OHOS {
+
+TraingLimitItemView::TraingLimitItemView() {
+  SetPosition(
+      0, 0, 380,
+      120); // 每一个itemview宽高要配置好,因为加到list都是以这个视图为基准
+  SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
+  SetStyle(STYLE_BACKGROUND_OPA, 255);
+  SetTouchable(true);
+  SetUpChild();
+  Add(&sbackground);
+  Add(&sicon);
+  Add(&sLabel);
+}
+
+TraingLimitItemView::~TraingLimitItemView() {
+  Remove(&sbackground);
+  Remove(&sicon);
+  Remove(&sLabel);
+}
+
+/// @brief 设置item的信息
+/// @param itemInfo
+void TraingLimitItemView::SetItemInfo(const TraingLimitItem itemInfo) {
+  sItemInfo = itemInfo;
+
+  // 先设置所有视图的可见性
+  bool isVisible = false;
+  bool label_isVisible = false;
+  uint32_t color = Color::White().full;
+  SetTouchable(false); // 默认不触摸
+
+  switch (itemInfo.labelid) {
+  case STR_EXTREME_LIST:
+    sLabel.SetTextId(itemInfo.labelid);
+    sLabel.SetPosition(90, 50, 200, 35);
+    isVisible = false;
+    label_isVisible = true;      // 只有label可见
+    color = Color::Green().full; // 设置label为绿色
+    SetHeight(120);
+    break;
+
+  case STR_MAX_ID:
+    isVisible = false; // 全部不可见
+    label_isVisible = false;
+    SetHeight(60);
+    break;
+
+  default:
+    sLabel.SetTextId(itemInfo.labelid);
+    sLabel.SetPosition(40, 33, 240, 35);
+    isVisible = true; // 所有元素可见
+    label_isVisible = true;
+    SetHeight(120);
+    SetTouchable(true);
+    break;
+  }
+
+  // 设置各个组件的可见性
+  sLabel.SetVisible(label_isVisible);
+  sicon.SetVisible(isVisible);
+  sbackground.SetVisible(isVisible);
+  sLabel.SetStyle(STYLE_TEXT_COLOR, color);
+
+  // 调整对齐方式
+  if (itemInfo.labelid == STR_EXTREME_LIST) {
+    sLabel.SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+  } else {
+    sLabel.SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER);
+  }
+}
+
+/// @brief 设置每一个itemview上的组件
+void TraingLimitItemView::SetUpChild() {
+  sbackground.SetSrc(PNG_SETTING_BACKGROUND_IMAGE);
+
+  sicon.SetPosition(330, 40);
+  sicon.SetSrc(ICON_IMAGE);
+  sicon.SetStyle(STYLE_IMAGE_OPA, OPA_OPAQUE);
+
+  sLabel.SetPosition(40, 33, 240, 35);
+  sLabel.SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
+  sLabel.SetRollSpeed(70);
+  sLabel.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+}
+
+/// @brief 获取list中每个组件的下标
+/// @return 返回下标
+AppViewId TraingLimitItemView::GetTraingLimitIndex() { return sItemInfo.id; }
+
+/// @brief 获取list中每个组件的运动Id
+/// @return 返回下标
+UIResourceTextId TraingLimitItemView::GetTraingLimitId() {
+  return sItemInfo.labelid;
+}
+
+} // namespace OHOS
\ No newline at end of file
index 78187f6..3486a59 100644 (file)
@@ -1,65 +1,44 @@
-/*** 
- * @Author: Caisking 3449750381@qq.com
- * @Date: 2024-03-26 18:34:15
- * @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-03-29 15:21:46
- * @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/training_list_limit/src/TraingLimitModel.cpp
- * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
- */
-/***
- * @Author: Caisking 3449750381@qq.com
- * @Date: 2024-03-26 18:34:15
- * @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-03-26 18:36:25
- * @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/training_list_limit/src/TraingLimitModel.cpp
- * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
- */
+
 
 #include "traing/training_list_limit/include/TraingLimitModel.h"
+#include "AppViewIDs.h"
+#include "UiConfig.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 "AppViewIDs.h"
-#include "components/ui_label_ext.h"
 #include "ui_resource_string.h"
-namespace OHOS
-{
-
-    TraingLimitModel::TraingLimitModel() {}
-
-    TraingLimitModel::~TraingLimitModel() {}
-
-    TraingLimitModel &TraingLimitModel::GetInstance()
-    {
-        static TraingLimitModel instance;
-        return instance;
-    }
-
-    static char *text[] = {"一般极限运动", "滑板", "攀岩", "高空弹跳/蹦极", "跑酷", "BMX", "定向越野", "跳伞", "赛车", "铁人三项运动"};
-
-    void TraingLimitModel::InitTraingLimitListItem()
-    {
-        TraingLimits[0] = {VIEW_TRAININGNOMAL, STR_EXTREME_SPORTS};
-        TraingLimits[1] = {VIEW_TRAININGNOMAL, STR_EXTREME_SKATEBOARDING};
-        TraingLimits[2] = {VIEW_TRAININGNOMAL, STR_EXTREME_ROCKCLIMBING};
-        TraingLimits[3] = {VIEW_TRAININGNOMAL, STR_EXTREME_BUNGEEJUMPING};
-        TraingLimits[4] = {VIEW_TRAININGNOMAL, STR_EXTREME_PARKOUR};
-        TraingLimits[5] = {VIEW_TRAININGNOMAL, STR_EXTREME_BMX};
-        TraingLimits[6] = {VIEW_TRAININGNOMAL, STR_EXTREME_ORIENTEERING};
-        TraingLimits[7] = {VIEW_TRAININGNOMAL, STR_EXTREME_PARACHUTE};
-        TraingLimits[8] = {VIEW_TRAININGNOMAL, STR_EXTREME_RACING};
-        TraingLimits[9] = {VIEW_TRAININGNOMAL, STR_EXTREME_TRIATHLONS};
-    }
-
-    const TraingLimitItem *TraingLimitModel::GetTraingLimitlistItems() const
-    {
-        return TraingLimits;
-    }
-    uint8_t TraingLimitModel::GetTraingLimitListNum() const
-    {
-        return TraingLimitListMaxNum;
-    }
-
-}
\ No newline at end of file
+namespace OHOS {
+
+TraingLimitModel::TraingLimitModel() {}
+
+TraingLimitModel::~TraingLimitModel() {}
+
+TraingLimitModel &TraingLimitModel::GetInstance() {
+  static TraingLimitModel instance;
+  return instance;
+}
+
+// static char *text[] = {"一般极限运动", "滑板", "攀岩", "高空弹跳/蹦极",
+// "跑酷", "BMX", "定向越野", "跳伞", "赛车", "铁人三项运动"};
+// 创建一个字符串数组,存储所有极限运动的 UI 资源标识符
+UIResourceTextId extremeSports[] = {
+    STR_EXTREME_LIST,          STR_EXTREME_SPORTS,
+    STR_EXTREME_SKATEBOARDING, STR_EXTREME_ROCKCLIMBING,
+    STR_EXTREME_BUNGEEJUMPING, STR_EXTREME_PARKOUR,
+    STR_EXTREME_BMX,           STR_EXTREME_ORIENTEERING,
+    STR_EXTREME_PARACHUTE,     STR_EXTREME_RACING,
+    STR_EXTREME_TRIATHLONS,    STR_MAX_ID};
+void TraingLimitModel::InitTraingLimitListItem() {
+  for (int index = 0; index < sizeof(extremeSports) / sizeof(extremeSports[0]);
+       ++index) {
+    TraingLimits[index] = {VIEW_TRAININGNOMAL, extremeSports[index]};
+  }
+}
+const TraingLimitItem *TraingLimitModel::GetTraingLimitlistItems() const {
+  return TraingLimits;
+}
+uint8_t TraingLimitModel::GetTraingLimitListNum() const {
+  return TraingLimitListMaxNum;
+}
+
+} // namespace OHOS
\ No newline at end of file
index 93855a8..536e9b9 100644 (file)
-#include "traing/training_list_limit/include/TraingLimitView.h"\r
-#include "traing/training_list_limit/include/TraingLimitPresenter.h"\r
-#include "traing/include/TraingModel.h"\r
-#include "uicomponents/UIComponents.h"\r
-#include "traing/Training_UiConfig.h"\r
-\r
+#include "UiConfig.h"\r
 #include "components/ui_label_ext.h"\r
+#include "traing/Training_UiConfig.h"\r
+#include "traing/include/TraingModel.h"\r
+#include "traing/training_list_limit/include/TraingLimitPresenter.h"\r
+#include "traing/training_list_limit/include/TraingLimitView.h"\r
 #include "ui_resource_string.h"\r
-#include "UiConfig.h"\r
+#include "uicomponents/UIComponents.h"\r
 #include "wearable_log.h"\r
+#include <memory>\r
 \r
-namespace OHOS\r
-{\r
-    static constexpr uint8_t NUM_2 = 2;\r
-    static TraingLimitView *g_pTraingLimitView{nullptr};\r
-    /* --------------------------------- List --------------------------------- */\r
-    static constexpr int16_t Limit_LIST_POSITION_X = 43;\r
-    static constexpr int16_t Limit_LIST_POSITION_Y = 120;\r
-    static constexpr int16_t Limit_SCROLLBLANKSIZE = 35; // 设置此滚动视图的空白大小。\r
-    static constexpr int16 MAX_SCR_DIS = 1000;\r
-    static constexpr int16 LIST_POS = 20;\r
-    static constexpr int16 SNUM_2 = 2;\r
-\r
-    TraingLimitView::TraingLimitView()\r
-    {\r
-        g_pTraingLimitView = this;\r
-    }\r
 \r
-    TraingLimitView::~TraingLimitView()\r
-    {\r
-        if (viewInitStatus == true)\r
-        {\r
-            DeInitView();\r
-        }\r
-        g_pTraingLimitView = nullptr;\r
-    }\r
+namespace OHOS {\r
+static TraingLimitView *g_pTraingLimitView{nullptr};\r
 \r
-    TraingLimitView *TraingLimitView::GetInstance()\r
-    {\r
-        return g_pTraingLimitView;\r
-    }\r
-    /// @param item\r
-    void TraingLimitView::AddToTraingLimitList(const TraingLimitItem &item)\r
-    {\r
-        p_TraingLimitListAdapter->AddItem(item);\r
-    }\r
+TraingLimitView::TraingLimitView() { g_pTraingLimitView = this; }\r
 \r
-    static void SetKeyActListener()\r
-    {\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetKeyActListener");\r
-        // 增加按键监听\r
-        RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::TraingLimitPresenter::GetInstance();\r
-        RootView::GetInstance()->SetOnKeyActListener(keyactListener);\r
-    }\r
-    void TraingLimitView::InitView()\r
-    {\r
-        if (scrollView == nullptr)\r
-        {\r
-                 scrollView = new UIScrollView();\r
-            if (scrollView == nullptr)\r
-            {\r
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "scrollView new fail!");\r
-                return;\r
-            }\r
-            scrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
-            scrollView->SetScrollBlankSize(50);\r
-            // scrollView->SetReboundSize(35);\r
-            scrollView->SetHorizontalScrollState(false);\r
-            scrollView->RequestFocus();\r
-            scrollView->SetRotateFactor(1.0);\r
-            scrollView->SetMaxScrollDistance(1000);\r
-            scrollView->SetDragACCLevel(5);\r
-            scrollView->SetSwipeACCLevel(800); /*设置手指抬起屏幕后的补偿距离。*/\r
-            scrollView->SetTouchable(true);\r
-            scrollView->SetDraggable(true);\r
-            container_->Add(scrollView);\r
-        }\r
-        /* -------------------------------------------------------------------------- */\r
-        // 初始化Lable 暂时不添加\r
-        if (title == nullptr)\r
-        {\r
-            InitLabelExt(title, 135, 52, 200, 60, "label1", STR_EXTREME_LIST, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
-            title->SetStyle(STYLE_TEXT_COLOR, Color::Green().full);\r
-            scrollView->Add(title);\r
-        }\r
-        // UIList 的适配器\r
-        if (p_TraingLimitListAdapter == nullptr)\r
-        {\r
-            p_TraingLimitListAdapter = new TraingLimitAdapter();\r
-            p_TraingLimitListAdapter->SetItemClickListener(presenter_);\r
-        }\r
-        // 初始化列表\r
-        if (TraingLimitList == nullptr)\r
-        {\r
-            TraingLimitList = new UIList();\r
-            TraingLimitList->SetPosition(43, 120, 466, 466);\r
-            TraingLimitList->SetThrowDrag(true);\r
-            TraingLimitList->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);\r
-            TraingLimitList->SetMaxScrollDistance(1000);\r
-            TraingLimitList->SetSwipeACCLevel(800);\r
-            TraingLimitList->SetDragACCLevel(5);\r
-            // 增加表冠控制\r
-            TraingLimitList->SetRotateFactor(2);\r
-            TraingLimitList->RequestFocus();\r
-        }\r
-    }\r
-    UIList *TraingLimitView::GetList()\r
-    {\r
-        return TraingLimitList;\r
-    }\r
-    void TraingLimitView::DeInitView()\r
-    {\r
-        scrollView->RemoveAll();\r
-        // RemoveAll();\r
-        delete title;\r
-        title = nullptr;\r
+TraingLimitView::~TraingLimitView() { g_pTraingLimitView = nullptr; }\r
 \r
-        delete TraingLimitList;\r
-        TraingLimitList = nullptr;\r
+TraingLimitView *TraingLimitView::GetInstance() {\r
+  return g_pTraingLimitView;\r
+}\r
 \r
-        delete scrollView;\r
-        scrollView = nullptr;\r
+void TraingLimitView::AddToTraingLimitList(const TraingLimitItem &item) {\r
+  if (p_TraingLimitListAdapter) {\r
+    p_TraingLimitListAdapter->AddItem(item);\r
+  }\r
+}\r
 \r
-        delete draglistener;\r
-        draglistener = nullptr;\r
-    }\r
+void TraingLimitView::SetKeyActListener() {\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetKeyActListener");\r
+  auto keyActListener = static_cast<RootView::OnKeyActListener *>(\r
+      TraingLimitPresenter::GetInstance());\r
+  RootView::GetInstance()->SetOnKeyActListener(keyActListener);\r
+}\r
 \r
-    void TraingLimitView::PreLoad(void)\r
-    {\r
-        if (!viewInitStatus)\r
-        {\r
-            InitView();\r
-            viewInitStatus = true;\r
-        }\r
-    }\r
+void TraingLimitView::InitScrollView() {\r
+  if (scrollView == nullptr) {\r
+    scrollView = new UIScrollView();\r
+  }\r
+  scrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(),\r
+                          Screen::GetInstance().GetHeight());\r
+  scrollView->SetTouchable(true);\r
+  scrollView->SetDraggable(true);\r
+  scrollView->SetDirection(1);\r
+  scrollView->SetHorizontalScrollState(false);\r
+  scrollView->SetOnDragListener(presenter_);\r
+  scrollView->SetYScrollBarVisible(true);\r
+}\r
 \r
-    /// @brief 页面启动时需要执行的代码逻辑\r
-    void TraingLimitView::OnStart()\r
-    {\r
-        View<TraingLimitPresenter>::OnStart();\r
-        BaseView::RootView(Color::Black().full);\r
-        SetContainerView(new UIViewGroup());\r
-        container_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
-        container_->SetOnDragListener(presenter_);\r
-        container_->SetTouchable(true);\r
-        container_->SetDraggable(true);\r
-        PreLoad();\r
-        RootView::GetInstance()->SetOnKeyActListener(presenter_);\r
-    }\r
+void TraingLimitView::InitList() {\r
+  if (p_TraingLimitListAdapter == nullptr) {\r
+    p_TraingLimitListAdapter = new TraingLimitAdapter();\r
+  }\r
+  p_TraingLimitListAdapter->SetItemClickListener(presenter_);\r
+\r
+  if (TraingLimitList == nullptr) {\r
+    TraingLimitList = new UIList();\r
+  }\r
+  TraingLimitList->SetPosition(43, 0, HORIZONTAL_RESOLUTION,\r
+                                 VERTICAL_RESOLUTION);\r
+  TraingLimitList->SetThrowDrag(true);\r
+  TraingLimitList->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);\r
+  TraingLimitList->SetMaxScrollDistance(1000);\r
+  TraingLimitList->SetSwipeACCLevel(800);\r
+  TraingLimitList->SetDragACCLevel(5);\r
+  TraingLimitList->SetRotateFactor(1);\r
+  TraingLimitList->RequestFocus();\r
+}\r
 \r
-    /// @brief 创建页面的视图。\r
-    void TraingLimitView::OnSetUpView()\r
-    {\r
-        View<TraingLimitPresenter>::OnSetUpView();\r
-        if (TraingLimitList != nullptr && p_TraingLimitListAdapter != nullptr)\r
-        {\r
-            scrollView->Add(TraingLimitList);\r
-            scrollView->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);\r
-            RootView::GetInstance()->Add(scrollView);\r
-            TraingLimitList->SetAdapter(p_TraingLimitListAdapter);\r
+void TraingLimitView::InitView() {\r
+  InitScrollView();\r
+  InitList();\r
+  SetKeyActListener();\r
+}\r
+\r
+void TraingLimitView::DeInitView() {\r
+  if (viewInitStatus) {\r
+    if (container_) {\r
+      container_->RemoveAll();\r
+      if (scrollView) {\r
+        scrollView->RemoveAll();\r
+        if (p_TraingLimitListAdapter) {\r
+          delete p_TraingLimitListAdapter;\r
+          p_TraingLimitListAdapter = nullptr;\r
+        }\r
+        if (TraingLimitList) {\r
+          delete TraingLimitList;\r
+          TraingLimitList = nullptr;\r
         }\r
-        Draw();\r
+        delete scrollView;\r
+        scrollView = nullptr;\r
+      }\r
     }\r
+    delete container_;\r
+    container_ = nullptr;\r
+  }\r
+}\r
 \r
-    /// @brief 销毁页面的视图。\r
-    void TraingLimitView::OnTearDownView()\r
-    {\r
-        View<TraingLimitPresenter>::OnTearDownView();\r
-        return;\r
-    }\r
+void TraingLimitView::PreLoad() {\r
+  if (!viewInitStatus) {\r
+    InitView();\r
+    viewInitStatus = true;\r
+  }\r
+}\r
 \r
-    /// @brief 页面结束时需要执行的销毁逻辑。\r
-    void TraingLimitView::OnStop()\r
-    {\r
-        View<TraingLimitPresenter>::OnStop();\r
-        if (container_ != nullptr)\r
-        {\r
-            container_->RemoveAll();\r
-            delete container_;\r
-            container_ = nullptr;\r
-        }\r
-        RootView::GetInstance()->ClearOnKeyActListener();\r
-        RootView::GetInstance()->RemoveAll();\r
-        return;\r
+void TraingLimitView::OnStart() {\r
+  View<TraingLimitPresenter>::OnStart();\r
+  SetContainerView(new UIViewGroup());\r
+  container_->SetPosition(0, 0, Screen::GetInstance().GetWidth(),\r
+                          Screen::GetInstance().GetHeight());\r
+  BaseView::RootView(Color::Black().full);\r
+  PreLoad();\r
+  SetContainerView(container_);\r
+}\r
+\r
+void TraingLimitView::OnSetUpView() {\r
+  View<TraingLimitPresenter>::OnSetUpView();\r
+  if (scrollView && TraingLimitList) {\r
+    scrollView->Add(TraingLimitList);\r
+    scrollView->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);\r
+    container_->Add(scrollView);\r
+    if (p_TraingLimitListAdapter) {\r
+      TraingLimitList->SetAdapter(p_TraingLimitListAdapter);\r
     }\r
-}
\ No newline at end of file
+    Draw();\r
+  }\r
+}\r
+\r
+void TraingLimitView::OnTearDownView() {\r
+  View<TraingLimitPresenter>::OnTearDownView();\r
+}\r
+\r
+void TraingLimitView::OnStop() {\r
+  View<TraingLimitPresenter>::OnStop();\r
+  RootView::GetInstance()->ClearOnKeyActListener();\r
+  DeInitView();\r
+  RootView::GetInstance()->RemoveAll();\r
+}\r
+} // namespace OHOS
\ No newline at end of file