${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_list_dance/src/TraingDanceItemView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_list_dance/src/TraingDanceModel.cpp
+ #休闲训练
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_list_rest/src/TraingRestView.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_list_rest/src/TraingRestPresenter.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_list_rest/src/TraingRestAdapter.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_list_rest/src/TraingRestItemView.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_list_rest/src/TraingRestModel.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_list_more/src/TraingMoreView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_list_more/src/TraingMorePresenter.cpp
VIEW_TRAININGICE, // 冰上运动列表
VIEW_TRAININGFITNESS, // 健身运动列表
VIEW_TRAININGDANCE, // 舞蹈运动列表
+ VIEW_TRAININGREST, // 休闲运动列表
/* ---------------------------------- GPS训练 --------------------------------- */
VIEW_TRAININGGPS, // GPS训练
VIEW_TRAININGGPSSET, // GPS训练目标(时长,距离,卡路里,步数)
void InitTraingIceSlice(void); // 冰上训练
void InitTraingFitnessSlice(void); // 健身训练
void InitTraingDanceSlice(void); // 舞蹈训练
+ void InitTraingRestSlice(void); // 休闲训练
void InitTraingRecordSlice(void); // 训练记录
#include "traing/training_list_fitness/include/TraingFitnessView.h"
#include "traing/training_list_dance/include/TraingDancePresenter.h"
#include "traing/training_list_dance/include/TraingDanceView.h"
+#include "traing/training_list_rest/include/TraingRestPresenter.h"
+#include "traing/training_list_rest/include/TraingRestView.h"
/* ---------------------------------- 主界面卡片 --------------------------------- */
#include "traing/training_card/include/TraingCardPresenter.h"
#include "traing/training_card/include/TraingCardView.h"
{VIEW_FAST_TRAINING_ATTENTION, &NativeLauncher::InitFastTrainingAttentionSlice},
{VIEW_RECORD, &NativeLauncher::InitRecordingSlice}, // 录音实例化地址
- {VIEW_FIND_PHONE,&NativeLauncher::InitFindPhoneSlice},
+ {VIEW_FIND_PHONE, &NativeLauncher::InitFindPhoneSlice},
{VIEW_MESSAGE, &NativeLauncher::InitMessageSlice},
{VIEW_ROTATE, &NativeLauncher::InitRotateSlice},
{VIEW_DIALUPDATE, &NativeLauncher::InitDialUpdateSlice},
{VIEW_TRAININGICE, &NativeLauncher::InitTraingIceSlice}, // 冰上训练
{VIEW_TRAININGFITNESS, &NativeLauncher::InitTraingFitnessSlice}, // 健身训练
{VIEW_TRAININGDANCE, &NativeLauncher::InitTraingDanceSlice}, // 舞蹈训练
-
+ {VIEW_TRAININGREST, &NativeLauncher::InitTraingRestSlice}, // 舞蹈训练
/* -------------------------------------------------------------------------- */
#ifdef SUPPORT_ALIPAY_SEC
SliceProxy *TraingDanceview = new AbilitySliceProxy<TraingDanceView, TraingDancePresenter>;
NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGDANCE, TraingDanceview);
}
+ void NativeLauncher::InitTraingRestSlice(void)
+ {
+ SliceProxy *TraingRestview = new AbilitySliceProxy<TraingRestView, TraingRestPresenter>;
+ NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGREST, TraingRestview);
+ }
/* -------------------------------------------------------------------------- */
// 省电模式
NativeAbility::GetInstance().AddSliceProxy(VIEW_SAVEBAT, savebatview);
}
- //查找手机
+ // 查找手机
void NativeLauncher::InitFindPhoneSlice(void)
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitFindPhoneSlice");
* @Author: Caisking 3449750381@qq.com
* @Date: 2024-03-26 17:05:18
* @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-03-29 14:30:24
+ * @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-19 17:37:18
* @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-03-26 20:02:43
+ * @LastEditTime: 2024-03-29 15:20:50
* @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/training_list_limit/include/TraingLimitPresenter.h
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
* @Author: Caisking 3449750381@qq.com
* @Date: 2024-03-19 17:37:18
* @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-03-27 11:15:59
+ * @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
*/
+/***
+ * @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
}\r
if (strcmp(view.GetViewId(), BUTTON_REST) == 0)\r
{\r
- NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGLIMIT);\r
+ NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGREST);\r
}\r
if (strcmp(view.GetViewId(), BUTTON_SWIMMING) == 0)\r
{\r
--- /dev/null
+/***
+ * @Author: Caisking 3449750381@qq.com
+ * @Date: 2024-03-26 17:04:41
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-03-29 11:16:42
+ * @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/training_list_Rest/include/TraingRestAdapter.h
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+#ifndef TraingRest_ADAPTER_H
+#define TraingRest_ADAPTER_H
+#include <list>
+#include <string>
+#include "components/ui_list.h"
+#include "components/abstract_adapter.h"
+#include "components/ui_label.h"
+#include "components/ui_label_ext.h"
+#include "language/font/ui_resource_string.h"
+#include "components/ui_checkbox.h"
+#include "AppViewIDs.h"
+#include "components/ui_label_ext.h"
+
+
+// 列表的适配器
+namespace OHOS
+{
+
+ typedef struct
+ {
+ AppViewId id;
+ UIResourceTextId labelid; // 标签
+ } TraingRestItem;
+
+ class TraingRestAdapter : public AbstractAdapter
+ {
+ public:
+ explicit TraingRestAdapter();
+ virtual ~TraingRestAdapter();
+
+ void SetData(std::list<TraingRestItem> &data);
+
+ virtual uint16_t GetCount(void) override;
+
+ virtual UIView *GetView(UIView *inView, int16_t index) override;
+
+ virtual void AddItem(const TraingRestItem &item);
+
+ void SetItemClickListener(UIView::OnClickListener *itemclicklistener)
+ {
+ itemClickListener = itemclicklistener;
+ }
+
+ private:
+ std::list<TraingRestItem> listData;
+ UIView::OnClickListener *itemClickListener{nullptr};
+ };
+}
+
+#endif
\ No newline at end of file
--- /dev/null
+/***
+ * @Author: Caisking 3449750381@qq.com
+ * @Date: 2024-03-26 17:05:18
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-03-29 14:30:24
+ * @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/training_list_Rest/include/TraingRestItemView.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_Rest/include/TraingRestItemView.h
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+#ifndef TraingRest_ITEM_VIEW_H
+#define TraingRest_ITEM_VIEW_H
+
+#include "components/ui_label.h"
+#include "components/ui_label_ext.h"
+#include "language/font/ui_resource_string.h"
+#include "components/ui_view_group.h"
+#include "components/ui_checkbox.h"
+#include "components/ui_image_view.h"
+#include "traing/training_list_rest/include/TraingRestAdapter.h"
+#include "components/ui_label_button.h"
+#include "AppViewIDs.h"
+#include "components/ui_label_ext.h"
+#include "language/font/ui_resource_string.h"
+#include "ohos_types.h"
+
+namespace OHOS
+{
+ class TraingRestItemView : public UIViewGroup
+ {
+ public:
+ explicit TraingRestItemView();
+ virtual ~TraingRestItemView();
+ virtual void SetItemInfo(const TraingRestItem itemInfo);
+ virtual void SetUpChild();
+ AppViewId GetTraingRestIndex();
+ UIResourceTextId GetTraingRestId();
+
+ private:
+ TraingRestItemView(const TraingRestItemView &);
+ UIImageView sbackground; // 背景
+ UIImageView sicon; // 箭头
+ UILabelExt sLabel; // 标签
+ TraingRestItem sItemInfo = {VIEW_INVALID, STR_EXERCISE_GENERAL};
+ };
+
+}
+#endif
\ No newline at end of file
--- /dev/null
+/***
+ * @Author: Caisking 3449750381@qq.com
+ * @Date: 2024-03-29 15:18:34
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-03-29 15:41:55
+ * @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/training_list_rest/include/TraingRestModel.h
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+#ifndef TraingRest_MODEL_H
+#define TraingRest_MODEL_H
+
+#include <cstdint>
+#include <map>
+#include "AppViewIDs.h"
+#include "components/ui_label_ext.h"
+#include"language/font/ui_resource_string.h"
+#include "components/ui_label_ext.h"
+#include"language/font/ui_resource_string.h"
+#include "UiConfig.h"
+#include "TraingRestPresenter.h"
+#include "traing/training_list_rest/include/TraingRestAdapter.h"
+
+namespace OHOS
+{
+ class TraingRestModel
+ {
+ public:
+ static TraingRestModel &GetInstance(void);
+ void InitTraingRestListItem();
+ const TraingRestItem *GetTraingRestlistItems() const;
+ uint8_t GetTraingRestListNum() const;
+ // const std::map<TraingRestIndex, AppViewId> &GetTraingRestIdToViewId() const;
+
+ private:
+ TraingRestModel();
+ TraingRestModel(const TraingRestModel &);
+ TraingRestModel &operator=(const TraingRestModel &);
+ virtual ~TraingRestModel();
+ static const uint16_t TraingRestListMaxNum = 23;
+ TraingRestItem TraingRests[TraingRestListMaxNum] = {VIEW_INVALID, STR_EXERCISE_GENERAL};
+ // std::map<int, AppViewId> TraingRestIdToViewId;
+ bool btConnectStatus{false};
+ };
+}
+
+#endif
--- /dev/null
+/***
+ * @Author: Caisking 3449750381@qq.com
+ * @Date: 2024-03-19 17:37:18
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-03-26 20:02:43
+ * @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/training_list_limit/include/TraingRestPresenter.h
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+#ifndef _TraingRest_PRESENTER_H
+#define _TraingRest_PRESENTER_H
+
+#include "Presenter.h"
+#include "TraingRestView.h"
+
+namespace OHOS
+{
+ class TraingRestView;
+ class TraingRestModel;
+ class TraingRestPresenter : public Presenter<TraingRestView>,
+ public UIView::OnClickListener,
+ public UIView::OnDragListener
+ {
+ public:
+ TraingRestPresenter();
+ virtual ~TraingRestPresenter();
+
+ void OnStart() override;
+ void OnPause() override;
+ void OnResume() override;
+ void OnStop() override;
+
+ static TraingRestPresenter *GetInstance();
+
+ private:
+ // 因为继承了OnClickener,所以有OnClick属性,至于参数,原函数也这样直接继承;
+ bool OnClick(UIView &view, const ClickEvent &event) override;
+ bool OnDrag(UIView &view, const DragEvent &event) override;
+ bool OnDragEnd(UIView &view, const DragEvent &event) override;
+
+ TraingRestModel *p_TraingRestModel{nullptr};
+ };
+} // namespace OHOS
+
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
--- /dev/null
+/***
+ * @Author: Caisking 3449750381@qq.com
+ * @Date: 2024-03-19 17:37:18
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-03-27 11:15:59
+ * @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/training_list_rest/include/TraingRestView.h
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+#ifndef TraingRest_VIEW_H
+#define TraingRest_VIEW_H
+
+#include "BaseView.h"
+#include "View.h"
+#include "components/ui_view_group.h"
+#include "components/ui_scroll_view.h"
+#include "components/ui_list.h"
+#include "traing/training_list_rest/include/TraingRestAdapter.h"
+#include "traing/training_list_rest/include/TraingRestModel.h"
+#include "components/ui_label_button_ext.h"
+#include "components/ui_label_ext.h"
+#include"language/font/ui_resource_string.h"
+
+namespace OHOS
+{
+ class TraingRestPresenter;
+ class TraingRestModel;
+ class TraingRestView : public View<TraingRestPresenter>, public UIViewGroup
+ {
+
+ public:
+ TraingRestView();
+ virtual ~TraingRestView();
+ static TraingRestView *GetInstance(void);
+
+ void OnStart() override;
+ void OnSetUpView() override;
+ void OnTearDownView() override;
+ void OnStop() override;
+
+ UIList *GetList();
+ void AddToTraingRestList(const TraingRestItem &item);
+
+ private:
+ void InitView(void);
+ void DeInitView(void);
+ void PreLoad(void);
+
+ private:
+ UIScrollView *scrollView = nullptr;
+ UILabelExt *title{nullptr};
+ TraingRestAdapter *p_TraingRestListAdapter{nullptr};
+ UIList *TraingRestList = nullptr;
+ UIView::OnDragListener *draglistener{nullptr};
+
+ TraingRestPresenter *g_TraingRestPresenter{nullptr};
+ TraingRestModel *g_TraingRestModel{nullptr};
+ bool viewInitStatus{false};
+ };
+} // namespace OHOS
+#endif
\ No newline at end of file
--- /dev/null
+#include "traing/training_list_rest/include/TraingRestAdapter.h"
+#include "traing/training_list_rest/include/TraingRestModel.h"
+#include "traing/training_list_rest/include/TraingRestItemView.h"
+
+#include "wearable_log.h"
+
+namespace OHOS
+{
+ TraingRestAdapter::TraingRestAdapter() {}
+
+ TraingRestAdapter::~TraingRestAdapter()
+ {
+ listData.clear();
+ }
+
+ uint16_t TraingRestAdapter::GetCount(void)
+ {
+ return listData.size();
+ }
+
+ void TraingRestAdapter::SetData(std::list<TraingRestItem> &data)
+ {
+ if (!listData.empty())
+ {
+ listData.clear();
+ }
+ std::list<TraingRestItem>::iterator it;
+ for (it = data.begin(); it != data.end(); it++)
+ {
+ listData.push_back(*it);
+ }
+ }
+
+ /// @brief 为列表的每一项创建一个视图
+ /// @param inView 一个指向已存在的视图对象的指
+ /// @param index 要创建的视图在列表中的索引l。
+ /// @return 返回该视图对象
+ UIView *TraingRestAdapter::GetView(UIView *inView, int16_t index)
+ {
+
+ // 1.先检查列表数据是否为空,若为空则返回空指针
+ if (listData.empty())
+ {
+ return nullptr;
+ }
+ // 2.接着检查索引是否小于0,若小于0则返回空指针
+ if (index < 0)
+ {
+ return nullptr;
+ }
+ // 3.检查是否超出列表数据大小,若超出则返回空指针
+ size_t uindex = index;
+ if (uindex >= listData.size())
+ {
+ return nullptr;
+ }
+ // 4.通过迭代器访问列表中指定索引位置的元素,将其赋值给itemData变量
+ std::list<TraingRestItem>::iterator it = listData.begin();
+ for (int i = 0; i < index; i++)
+ {
+ it++;
+ }
+ TraingRestItem itemData = *it;
+ TraingRestItemView *item = nullptr;
+ /*
+ 5.根据传入的inView参数是否已经存在一个视图对象,
+ 若为空则创建一个新的MessageItemView对象,
+ 否则将inView转换成MessageItemView类型的指针
+ */
+ if (inView == nullptr)
+ {
+ item = new TraingRestItemView();
+ }
+ else
+ {
+ item = static_cast<TraingRestItemView *>(inView);
+ }
+ item->SetItemInfo(itemData);
+ item->SetOnClickListener(itemClickListener);
+ return item;
+ }
+
+ void TraingRestAdapter::AddItem(const TraingRestItem &item)
+ {
+ listData.push_back(item);
+ }
+} // namespace OHOS
--- /dev/null
+/***
+ * @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_rest/src/TraingRestItemView.cpp
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%A
+ */
+
+#include "traing/training_list_rest/include/TraingRestItemView.h"
+#include "traing/include/TraingModel.h"
+#include "traing/Training_UiConfig.h"
+#include "components/ui_label_ext.h"
+#include "language/font/ui_resource_string.h"
+#include "UiConfig.h"
+namespace OHOS
+{
+
+ TraingRestItemView::TraingRestItemView()
+ {
+ 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);
+ }
+
+ TraingRestItemView::~TraingRestItemView()
+ {
+ Remove(&sbackground);
+ Remove(&sicon);
+ Remove(&sLabel);
+ }
+
+ /// @brief 设置item的信息
+ /// @param itemInfo
+ void TraingRestItemView::SetItemInfo(const TraingRestItem itemInfo)
+ {
+ sItemInfo = itemInfo;
+ sLabel.SetTextId(itemInfo.labelid);
+ }
+
+ /// @brief 设置每一个itemview上的组件
+ void TraingRestItemView::SetUpChild()
+ {
+ sbackground.SetSrc(PNG_SETTING_BACKGROUND_IMAGE);
+
+ sicon.SetPosition(330, 40);
+ sicon.SetSrc(ICON_IMAGE);
+ sicon.SetStyle(STYLE_IMAGE_OPA, OPA_OPAQUE);
+
+ sLabel.SetPosition(50, 10, 300, 80);
+ sLabel.SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS);
+ sLabel.SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ sLabel.SetRollSpeed(0);
+ sLabel.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+ }
+
+ /// @brief 获取list的中每个组件的在list的下标
+ /// @return 返回下标
+ AppViewId TraingRestItemView::GetTraingRestIndex()
+ {
+ return sItemInfo.id;
+ }
+ UIResourceTextId TraingRestItemView::GetTraingRestId()
+ {
+ return sItemInfo.labelid;
+ }
+}
\ No newline at end of file
--- /dev/null
+
+
+#include "traing/training_list_rest/include/TraingRestModel.h"
+#include "common/image_cache_manager.h"
+#include "components/ui_label_ext.h"
+#include "language/font/ui_resource_string.h"
+#include "UiConfig.h"
+#include "ui_resource_image.h"
+#include "AppViewIDs.h"
+#include "components/ui_label_ext.h"
+#include "language/font/ui_resource_string.h"
+namespace OHOS
+{
+
+ TraingRestModel::TraingRestModel() {}
+
+ TraingRestModel::~TraingRestModel() {}
+
+ TraingRestModel &TraingRestModel::GetInstance()
+ {
+ static TraingRestModel instance;
+ return instance;
+ }
+
+ void TraingRestModel::InitTraingRestListItem()
+ {
+ TraingRestItem defaultItems[] = {
+ {VIEW_TRAININGNOMAL, STR_RECREATIONAL_SPORTS},
+ {VIEW_TRAININGNOMAL, STR_RECREATIONAL_SKATING},
+ {VIEW_TRAININGNOMAL, STR_RECREATIONAL_MARTIALARTS},
+ {VIEW_TRAININGNOMAL, STR_RECREATIONAL_TAICHI},
+ {VIEW_TRAININGNOMAL, STR_RECREATIONAL_HULAHOOP},
+ {VIEW_TRAININGNOMAL, STR_RECREATIONAL_DISCSPORT},
+ {VIEW_TRAININGNOMAL, STR_RECREATIONAL_DARTS},
+ {VIEW_TRAININGNOMAL, STR_RECREATIONAL_ARCHERY},
+ {VIEW_TRAININGNOMAL, STR_RECREATIONAL_HORSERIDING},
+ {VIEW_TRAININGNOMAL, STR_RECREATIONAL_KITE},
+ {VIEW_TRAININGNOMAL, STR_RECREATIONAL_TUGOFWAR},
+ {VIEW_TRAININGNOMAL, STR_RECREATIONAL_SWING},
+ {VIEW_TRAININGNOMAL, STR_RECREATIONAL_STAIRCLIMBING},
+ {VIEW_TRAININGNOMAL, STR_RECREATIONAL_OBSTACLERACE},
+ {VIEW_TRAININGNOMAL, STR_RECREATIONAL_FISHING},
+ {VIEW_TRAININGNOMAL, STR_RECREATIONAL_HUNTING},
+ {VIEW_TRAININGNOMAL, STR_RECREATIONAL_SCOOTERRIDING},
+ {VIEW_TRAININGNOMAL, STR_RECREATIONAL_PARAGLIDING},
+ {VIEW_TRAININGNOMAL, STR_RECREATIONAL_TEAMSPORTS},
+ {VIEW_TRAININGNOMAL, STR_RECREATIONAL_FINESSGAMING},
+ {VIEW_TRAININGNOMAL, STR_RECREATIONAL_HIKING},
+ {VIEW_TRAININGNOMAL, STR_RECREATIONAL_EQUESTRIANSPORTS},
+ {VIEW_TRAININGNOMAL, STR_RECREATIONAL_PLAY}};
+
+ for (int i = 0; i < TraingRestListMaxNum; i++)
+ {
+ TraingRests[i] = defaultItems[i];
+ }
+ }
+
+ const TraingRestItem *TraingRestModel::GetTraingRestlistItems() const
+ {
+ return TraingRests;
+ }
+ uint8_t TraingRestModel::GetTraingRestListNum() const
+ {
+ return TraingRestListMaxNum;
+ }
+
+}
\ No newline at end of file
--- /dev/null
+/***
+ * @Author: Caisking 3449750381@qq.com
+ * @Date: 2024-03-19 17:37:19
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-03-26 19:51:06
+ * @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/training_list_rest/src/TraingRestPresenter.cpp
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+/***
+ * @Author: Caisking 3449750381@qq.com
+ * @Date: 2024-03-19 17:37:19
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-03-26 14:23:32
+ * @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/src/TraingRestPresenter.cpp
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+#include "AppViewIDs.h"
+#include "components/ui_label_ext.h"
+#include "language/font/ui_resource_string.h"
+#include "NativeAbility.h"
+
+#include <iostream>
+#include <chrono>
+#include <thread>
+#include "traing/training_list_rest/include/TraingRestItemView.h"
+#include "traing/training_list_rest/include/TraingRestPresenter.h"
+#include "traing/training_list_rest/include/TraingRestView.h"
+#include "traing/include/TraingModel.h"
+// #include "TraingRestView.h"
+
+namespace OHOS
+{
+ extern const char *Rest_buttons[];
+ extern char *Rest_text[];
+
+ // 当前Presenter属性实例化的内存指针
+ static TraingRestPresenter *g_pTraingRestPresenter = nullptr;
+
+ TraingRestPresenter::TraingRestPresenter()
+ {
+ p_TraingRestModel = &TraingRestModel::GetInstance();
+ g_pTraingRestPresenter = this;
+ }
+
+ TraingRestPresenter::~TraingRestPresenter()
+ {
+
+ g_pTraingRestPresenter = nullptr;
+ }
+
+ TraingRestPresenter *TraingRestPresenter::GetInstance()
+ {
+
+ return g_pTraingRestPresenter;
+ }
+
+ void TraingRestPresenter::OnStart()
+ {
+ p_TraingRestModel->InitTraingRestListItem();
+ Presenter<TraingRestView>::OnStart();
+ }
+
+ void TraingRestPresenter::OnPause(void)
+ {
+ Presenter<TraingRestView>::OnPause();
+ }
+
+ void TraingRestPresenter::OnResume(void)
+ {
+ if (view_ == nullptr)
+ {
+ return;
+ }
+ const TraingRestItem *itemInfo = p_TraingRestModel->GetTraingRestlistItems();
+ for (int i = 0; i < p_TraingRestModel->GetTraingRestListNum(); i++)
+ {
+ view_->AddToTraingRestList(itemInfo[i]);
+ }
+ Presenter<TraingRestView>::OnResume();
+ }
+
+ void TraingRestPresenter::OnStop(void)
+ {
+
+ Presenter<TraingRestView>::OnStop();
+ }
+ bool TraingRestPresenter::OnDrag(UIView &view, const DragEvent &event)
+ {
+ return true;
+ }
+ bool TraingRestPresenter::OnDragEnd(UIView &view, const DragEvent &event)
+ {
+ if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT)
+ {
+ NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGMORE);
+ }
+ UNUSED(view);
+ return true;
+ }
+
+ bool TraingRestPresenter::OnClick(UIView &view, const ClickEvent &event)
+ {
+ UNUSED(event);
+ TraingRestItemView *itemView = static_cast<TraingRestItemView *>(&view);
+ AppViewId viewId = itemView->GetTraingRestIndex();
+ UIResourceTextId sportid = itemView->GetTraingRestId();
+ TraingModel::GetInstance()->SetSportEvent(sportid);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistPresenter::OnClick viewid = %d\n", viewId);
+ if (viewId < VIEW_MAX_INTER_APP)
+ {
+ NativeAbility::GetInstance().ChangeSlice(viewId);
+ return true;
+ }
+ return false;
+ }
+
+}
--- /dev/null
+#include "traing/training_list_rest/include/TraingRestView.h"
+#include "traing/training_list_rest/include/TraingRestPresenter.h"
+#include "traing/include/TraingModel.h"
+#include "traing/Training_UiConfig.h"
+
+#include "components/ui_label_ext.h"
+#include"language/font/ui_resource_string.h"
+#include "UiConfig.h"
+#include "wearable_log.h"
+
+namespace OHOS
+{
+ static constexpr uint8_t NUM_2 = 2;
+ static TraingRestView *g_pTraingRestView{nullptr};
+ /* --------------------------------- List --------------------------------- */
+ static constexpr int16_t Rest_LIST_POSITION_X = 43;
+ static constexpr int16_t Rest_LIST_POSITION_Y = 120;
+ static constexpr int16_t Rest_SCROLLBLANKSIZE = 35; // 设置此滚动视图的空白大小。
+ static constexpr int16 MAX_SCR_DIS = 1000;
+ static constexpr int16 LIST_POS = 20;
+ static constexpr int16 SNUM_2 = 2;
+
+ TraingRestView::TraingRestView()
+ {
+ g_pTraingRestView = this;
+ }
+
+ TraingRestView::~TraingRestView()
+ {
+ if (viewInitStatus == true)
+ {
+ DeInitView();
+ }
+ g_pTraingRestView = nullptr;
+ }
+
+ TraingRestView *TraingRestView::GetInstance()
+ {
+ return g_pTraingRestView;
+ }
+ /// @param item
+ void TraingRestView::AddToTraingRestList(const TraingRestItem &item)
+ {
+ p_TraingRestListAdapter->AddItem(item);
+ }
+ void TraingRestView::InitView()
+ {
+ if (scrollView == nullptr)
+ {
+ scrollView = new UIScrollView();
+ }
+ scrollView->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
+ // scrollView->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+ scrollView->SetScrollBlankSize(52);
+ // scrollView->SetReboundSize(100);
+ scrollView->SetTouchable(true);
+ scrollView->SetDraggable(true);
+ scrollView->SetDirection(1);
+ draglistener = static_cast<UIView::OnDragListener *>(TraingRestPresenter::GetInstance());
+ scrollView->SetOnDragListener(draglistener);
+ scrollView->SetYScrollBarVisible(true); // 设置滑动滚动条
+ /* -------------------------------------------------------------------------- */
+ // 初始化Lable
+ TraingModel::GetInstance()->InitLabel(title, 173, 52, 200, 60, "label1", "极限运动", DEFAULT_VECTOR_FONT_FILENAME, 30);
+ scrollView->Add(title);
+ // UIList 的适配器
+ p_TraingRestListAdapter = new TraingRestAdapter();
+ p_TraingRestListAdapter->SetItemClickListener(presenter_);
+ if (TraingRestList == nullptr)
+ {
+ TraingRestList = new UIList();
+ }
+ TraingRestList->SetPosition(Rest_LIST_POSITION_X, Rest_LIST_POSITION_Y);
+ TraingRestList->Resize(HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
+ TraingRestList->SetScrollBlankSize(Rest_SCROLLBLANKSIZE);
+ TraingRestList->SetSelectPosition(HORIZONTAL_RESOLUTION / SNUM_2); // middle position
+ TraingRestList->SetDraggable(true);
+ TraingRestList->SetThrowDrag(false);
+ TraingRestList->EnableAutoAlign(true);
+ TraingRestList->SetElastic(true); // 设置回弹效果
+ TraingRestList->SetMaxScrollDistance(MAX_SCR_DIS);
+
+ // 增加表冠控制
+ TraingRestList->SetRotateFactor(2);
+ TraingRestList->RequestFocus();
+ }
+ UIList *TraingRestView::GetList()
+ {
+ return TraingRestList;
+ }
+ void TraingRestView::DeInitView()
+ {
+ // scrollView-> RemoveAll();
+ RemoveAll();
+ delete title;
+ title = nullptr;
+
+ delete TraingRestList;
+ TraingRestList = nullptr;
+
+ delete scrollView;
+ scrollView = nullptr;
+
+ delete draglistener;
+ draglistener = nullptr;
+ }
+
+ void TraingRestView::PreLoad(void)
+ {
+ if (!viewInitStatus)
+ {
+ InitView();
+ viewInitStatus = true;
+ }
+ }
+
+ /// @brief 页面启动时需要执行的代码逻辑
+ void TraingRestView::OnStart()
+ {
+ View<TraingRestPresenter>::OnStart();
+ BaseView::RootView(Color::Black().full);
+ PreLoad();
+ }
+
+ /// @brief 创建页面的视图。
+ void TraingRestView::OnSetUpView()
+ {
+ View<TraingRestPresenter>::OnSetUpView();
+ // scrollView->Add(title);
+ scrollView->Add(TraingRestList);
+ scrollView->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
+ RootView::GetInstance()->Add(scrollView);
+ TraingRestList->SetAdapter(p_TraingRestListAdapter);
+ // TraingRestList->RefreshList(); // 刷新列表
+ Draw();
+ }
+
+ /// @brief 销毁页面的视图。
+ void TraingRestView::OnTearDownView()
+ {
+ View<TraingRestPresenter>::OnTearDownView();
+ return;
+ }
+
+ /// @brief 页面结束时需要执行的销毁逻辑。
+ void TraingRestView::OnStop()
+ {
+ View<TraingRestPresenter>::OnStop();
+ RootView::GetInstance()->RemoveAll();
+ RootView::GetInstance()->ClearFocus();
+ return;
+ }
+}
\ No newline at end of file