${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_list_ice/src/TraingIceItemView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_list_ice/src/TraingIceModel.cpp
+ #健身运动
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_list_fitness/src/TraingFitnessView.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_list_fitness/src/TraingFitnessPresenter.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_list_fitness/src/TraingFitnessAdapter.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_list_fitness/src/TraingFitnessItemView.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_list_fitness/src/TraingFitnessModel.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_TRAININGWIN, // 目标达成
VIEW_TRAINING_RECORD, // 训练记录
/* ---------------------------------- 训练列表 ---------------------------------- */
- VIEW_TRAININGMORE, // 更多训练
- VIEW_TRAININGLIMIT, // 极限运动列表
- VIEW_TRAININGICE, // 冰上运动列表
+ VIEW_TRAININGMORE, // 更多训练
+ VIEW_TRAININGLIMIT, // 极限运动列表
+ VIEW_TRAININGICE, // 冰上运动列表
+ VIEW_TRAININGFITNESS, // 健身运动列表
/* ---------------------------------- GPS训练 --------------------------------- */
VIEW_TRAININGGPS, // GPS训练
VIEW_TRAININGGPSSET, // GPS训练目标(时长,距离,卡路里,步数)
void InitTraingGPSlostSlice(void);
void InitTraingGPSbackSlice(void);
- void InitTraingMoreSlice(void); // 更多训练
- void InitTraingLimitSlice(void); // 极限训练
- void InitTraingIceSlice(void); // 冰上训练
+ void InitTraingMoreSlice(void); // 更多训练
+ void InitTraingLimitSlice(void); // 极限训练
+ void InitTraingIceSlice(void); // 冰上训练
+ void InitTraingFitnessSlice(void); // 冰上训练
void InitTraingRecordSlice(void); // 训练记录
- /* -------------------------------------------------------------------------- */
+ /* -------------------------------------------------------------------------- */
void InitSecondaryFunction(void);
void InitFastTrainingSlice(void);
void InitFastTrainingAttentionSlice(void);
#include "traing/training_list_limit/include/TraingLimitView.h"
#include "traing/training_list_ice/include/TraingIcePresenter.h"
#include "traing/training_list_ice/include/TraingIceView.h"
+#include "traing/training_list_fitness/include/TraingFitnessPresenter.h"
+#include "traing/training_list_fitness/include/TraingFitnessView.h"
/* ---------------------------------- 主界面卡片 --------------------------------- */
#include "traing/training_card/include/TraingCardPresenter.h"
#include "traing/training_card/include/TraingCardView.h"
{VIEW_TRAININGGPSLOST, &NativeLauncher::InitTraingGPSlostSlice}, // GPS断联
{VIEW_TRAININGGPSBACK, &NativeLauncher::InitTraingGPSbackSlice}, // GPS回连
- {VIEW_TRAININGMORE, &NativeLauncher::InitTraingMoreSlice}, // 更多训练
- {VIEW_TRAININGLIMIT, &NativeLauncher::InitTraingLimitSlice}, // 极限训练
- {VIEW_TRAININGICE, &NativeLauncher::InitTraingIceSlice}, // 冰上训练
+ {VIEW_TRAININGMORE, &NativeLauncher::InitTraingMoreSlice}, // 更多训练
+ {VIEW_TRAININGLIMIT, &NativeLauncher::InitTraingLimitSlice}, // 极限训练
+ {VIEW_TRAININGICE, &NativeLauncher::InitTraingIceSlice}, // 冰上训练
+ {VIEW_TRAININGFITNESS, &NativeLauncher::InitTraingFitnessSlice}, // 健身训练
/* -------------------------------------------------------------------------- */
SliceProxy *TraingIceview = new AbilitySliceProxy<TraingIceView, TraingIcePresenter>;
NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGICE, TraingIceview);
}
+ void NativeLauncher::InitTraingFitnessSlice(void)
+ {
+ SliceProxy *TraingFitnessview = new AbilitySliceProxy<TraingFitnessView, TraingFitnessPresenter>;
+ NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGFITNESS, TraingFitnessview);
+ }
/* -------------------------------------------------------------------------- */
// 省电模式
--- /dev/null
+/***
+ * @Author: Caisking 3449750381@qq.com
+ * @Date: 2024-03-27 11:09:52
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-03-27 14:21:09
+ * @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/training_list_ice/include/TraingFitnessAdapter.h
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+#ifndef TraingFitness_ADAPTER_H
+#define TraingFitness_ADAPTER_H
+#include <list>
+#include <string>
+#include "components/ui_list.h"
+#include "components/abstract_adapter.h"
+#include "components/ui_label.h"
+#include "components/ui_checkbox.h"
+#include "AppViewIDs.h"
+
+// 列表的适配器
+namespace OHOS
+{
+
+ typedef struct
+ {
+ AppViewId id;
+ const char *label; // 标签
+ } TraingFitnessItem;
+
+ class TraingFitnessAdapter : public AbstractAdapter
+ {
+ public:
+ explicit TraingFitnessAdapter();
+ virtual ~TraingFitnessAdapter();
+
+ void SetData(std::list<TraingFitnessItem> &data);
+
+ virtual uint16_t GetCount(void) override;
+
+ virtual UIView *GetView(UIView *inView, int16_t index) override;
+
+ virtual void AddItem(const TraingFitnessItem &item);
+
+ void SetItemClickListener(UIView::OnClickListener *itemclicklistener)
+ {
+ itemClickListener = itemclicklistener;
+ }
+
+ private:
+ std::list<TraingFitnessItem> listData;
+ UIView::OnClickListener *itemClickListener{nullptr};
+ };
+}
+
+#endif
\ No newline at end of file
--- /dev/null
+
+
+#ifndef TraingFitness_ITEM_VIEW_H
+#define TraingFitness_ITEM_VIEW_H
+
+#include "components/ui_label.h"
+#include "components/ui_view_group.h"
+#include "components/ui_checkbox.h"
+#include "components/ui_image_view.h"
+#include "traing/training_list_fitness/include/TraingFitnessAdapter.h"
+#include "components/ui_label_button.h"
+#include "AppViewIDs.h"
+#include "ohos_types.h"
+
+namespace OHOS
+{
+ class TraingFitnessItemView : public UIViewGroup
+ {
+ public:
+ explicit TraingFitnessItemView();
+ virtual ~TraingFitnessItemView();
+ virtual void SetItemInfo(const TraingFitnessItem itemInfo);
+ virtual void SetUpChild();
+ AppViewId GetTraingFitnessIndex();
+
+ private:
+ TraingFitnessItemView(const TraingFitnessItemView &);
+ UIImageView sbackground; // 背景
+ UIImageView sicon; // 箭头
+ UILabel sLabel; // 标签
+ TraingFitnessItem sItemInfo = {VIEW_INVALID, nullptr};
+ };
+
+}
+#endif
\ No newline at end of file
--- /dev/null
+
+#ifndef TraingFitness_MODEL_H
+#define TraingFitness_MODEL_H
+
+#include <cstdint>
+#include <map>
+#include "AppViewIDs.h"
+#include "UiConfig.h"
+#include "TraingFitnessPresenter.h"
+#include "traing/training_list_fitness/include/TraingFitnessAdapter.h"
+
+namespace OHOS
+{
+ class TraingFitnessModel
+ {
+ public:
+ static TraingFitnessModel &GetInstance(void);
+ void InitTraingFitnessListItem();
+ const TraingFitnessItem *GetTraingFitnesslistItems() const;
+ uint8_t GetTraingFitnessListNum() const;
+ // const std::map<TraingFitnessIndex, AppViewId> &GetTraingFitnessIdToViewId() const;
+
+ private:
+ TraingFitnessModel();
+ TraingFitnessModel(const TraingFitnessModel &);
+ TraingFitnessModel &operator=(const TraingFitnessModel &);
+ virtual ~TraingFitnessModel();
+ static const uint16_t TraingFitnessListMaxNum = 65;
+ TraingFitnessItem TraingFitnesss[TraingFitnessListMaxNum] = {VIEW_INVALID, nullptr};
+ // std::map<int, AppViewId> TraingFitnessIdToViewId;
+ bool btConnectStatus{false};
+ };
+}
+
+#endif
\ No newline at end of file
--- /dev/null
+/***
+ * @Author: Caisking 3449750381@qq.com
+ * @Date: 2024-03-26 09:44:11
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-03-27 11:29:03
+ * @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/training_list_ice/include/TraingFitnessPresenter.h
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+
+#ifndef _TraingFitness_PRESENTER_H
+#define _TraingFitness_PRESENTER_H
+
+#include "Presenter.h"
+#include "TraingFitnessView.h"
+
+namespace OHOS
+{
+ class TraingFitnessView;
+ class TraingFitnessModel;
+ class TraingFitnessPresenter : public Presenter<TraingFitnessView>,
+ public UIView::OnClickListener,
+ public UIView::OnDragListener
+ {
+ public:
+ TraingFitnessPresenter();
+ virtual ~TraingFitnessPresenter();
+
+ void OnStart() override;
+ void OnPause() override;
+ void OnResume() override;
+ void OnStop() override;
+
+ static TraingFitnessPresenter *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;
+
+ TraingFitnessModel *p_TraingFitnessModel{nullptr};
+ };
+} // namespace OHOS
+
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
--- /dev/null
+
+#ifndef TraingFitness_VIEW_H
+#define TraingFitness_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_fitness/include/TraingFitnessAdapter.h"
+#include "traing/training_list_fitness/include/TraingFitnessModel.h"
+#include "components/ui_label_button_ext.h"
+#include "components/ui_label_ext.h"
+
+namespace OHOS
+{
+ class TraingFitnessPresenter;
+ class TraingFitnessModel;
+ class TraingFitnessView : public View<TraingFitnessPresenter>, public UIViewGroup
+ {
+
+ public:
+ TraingFitnessView();
+ virtual ~TraingFitnessView();
+ static TraingFitnessView *GetInstance(void);
+
+ void OnStart() override;
+ void OnSetUpView() override;
+ void OnTearDownView() override;
+ void OnStop() override;
+
+ UIList *GetList();
+ void AddToTraingFitnessList(const TraingFitnessItem &item);
+
+ private:
+ void InitView(void);
+ void DeInitView(void);
+ void PreLoad(void);
+
+ private:
+ UIScrollView *scrollView = nullptr;
+ UILabelExt *title{nullptr};
+ TraingFitnessAdapter *p_TraingFitnessListAdapter{nullptr};
+ UIList *TraingFitnessList = nullptr;
+ UIView::OnDragListener *draglistener{nullptr};
+
+ TraingFitnessPresenter *g_TraingFitnessPresenter{nullptr};
+ TraingFitnessModel *g_TraingFitnessModel{nullptr};
+ bool viewInitStatus{false};
+ };
+} // namespace OHOS
+#endif
\ No newline at end of file
--- /dev/null
+/***
+ * @Author: Caisking 3449750381@qq.com
+ * @Date: 2024-03-27 11:12:53
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-03-27 11:16:09
+ * @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/training_list_fitness/src/TraingFitnessAdapter.cpp
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+#include "traing/training_list_fitness/include/TraingFitnessAdapter.h"
+#include "traing/training_list_fitness/include/TraingFitnessModel.h"
+#include "traing/training_list_fitness/include/TraingFitnessItemView.h"
+
+#include "wearable_log.h"
+
+namespace OHOS
+{
+ TraingFitnessAdapter::TraingFitnessAdapter() {}
+
+ TraingFitnessAdapter::~TraingFitnessAdapter()
+ {
+ listData.clear();
+ }
+
+ uint16_t TraingFitnessAdapter::GetCount(void)
+ {
+ return listData.size();
+ }
+
+ void TraingFitnessAdapter::SetData(std::list<TraingFitnessItem> &data)
+ {
+ if (!listData.empty())
+ {
+ listData.clear();
+ }
+ std::list<TraingFitnessItem>::iterator it;
+ for (it = data.begin(); it != data.end(); it++)
+ {
+ listData.push_back(*it);
+ }
+ }
+
+ /// @brief 为列表的每一项创建一个视图
+ /// @param inView 一个指向已存在的视图对象的指
+ /// @param index 要创建的视图在列表中的索引l。
+ /// @return 返回该视图对象
+ UIView *TraingFitnessAdapter::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<TraingFitnessItem>::iterator it = listData.begin();
+ for (int i = 0; i < index; i++)
+ {
+ it++;
+ }
+ TraingFitnessItem itemData = *it;
+ TraingFitnessItemView *item = nullptr;
+ /*
+ 5.根据传入的inView参数是否已经存在一个视图对象,
+ 若为空则创建一个新的MessageItemView对象,
+ 否则将inView转换成MessageItemView类型的指针
+ */
+ if (inView == nullptr)
+ {
+ item = new TraingFitnessItemView();
+ }
+ else
+ {
+ item = static_cast<TraingFitnessItemView *>(inView);
+ }
+ item->SetItemInfo(itemData);
+ item->SetOnClickListener(itemClickListener);
+ return item;
+ }
+
+ void TraingFitnessAdapter::AddItem(const TraingFitnessItem &item)
+ {
+ listData.push_back(item);
+ }
+} // namespace OHOS
--- /dev/null
+
+
+/***
+ * @Author: Caisking 3449750381@qq.com
+ * @Date: 2024-03-27 14:18:24
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-03-27 14:22:59
+ * @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/training_list_fitness/src/TraingFitnessAdapter.cpp
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+#include "traing/training_list_fitness/include/TraingFitnessItemView.h"
+#include "traing/include/TraingModel.h"
+#include "traing/Training_UiConfig.h"
+#include "UiConfig.h"
+namespace OHOS
+{
+
+ TraingFitnessItemView::TraingFitnessItemView()
+ {
+ 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);
+ }
+
+ TraingFitnessItemView::~TraingFitnessItemView()
+ {
+ Remove(&sbackground);
+ Remove(&sicon);
+ Remove(&sLabel);
+ }
+
+ /// @brief 设置item的信息
+ /// @param itemInfo
+ void TraingFitnessItemView::SetItemInfo(const TraingFitnessItem itemInfo)
+ {
+ sItemInfo = itemInfo;
+ sLabel.SetText(itemInfo.label);
+ }
+
+ /// @brief 设置每一个itemview上的组件
+ void TraingFitnessItemView::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 TraingFitnessItemView::GetTraingFitnessIndex()
+ {
+ return sItemInfo.id;
+ }
+
+}
\ No newline at end of file
--- /dev/null
+/***
+ * @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_fitness/src/TraingFitnessModel.cpp
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+#include "traing/training_list_fitness/include/TraingFitnessModel.h"
+#include "common/image_cache_manager.h"
+#include "UiConfig.h"
+#include "ui_resource_image.h"
+#include "AppViewIDs.h"
+namespace OHOS
+{
+
+ TraingFitnessModel::TraingFitnessModel() {}
+
+ TraingFitnessModel::~TraingFitnessModel() {}
+
+ TraingFitnessModel &TraingFitnessModel::GetInstance()
+ {
+ static TraingFitnessModel instance;
+ return instance;
+ }
+ static char *text[] = {
+ "一般锻炼",
+ "自由训练",
+ "肌力训练",
+ "飞轮车/室内健身车",
+ "踏步机",
+ "漫步机",
+ "HIIT/高强度间歇训练",
+ "健身",
+ "团体操",
+ "瑜珈",
+ "瑜珈猫式",
+ "瑜珈牛式",
+ "瑜珈眼镜蛇式",
+ "瑜珈英雄式1",
+ "瑜珈英雄式2",
+ "瑜珈英雄式3",
+ "瑜珈滚轮",
+ "室外走路",
+ "室外跑步",
+ "室内走路",
+ "室内跑步",
+ "室外骑行",
+ "跳绳",
+ "皮拉提斯",
+ "混合健身",
+ "功能性训练",
+ "体能训练",
+ "跆拳道/踢拳",
+ "拳击",
+ "自由搏击",
+ "空手道",
+ "击剑",
+ "核心训练",
+ "拳击有氧",
+ "剑道",
+ "单杠",
+ "双杠",
+ "循环训练",
+ "有氧运动",
+ "健美操",
+ "P90X",
+ "壶铃训练",
+ "综合格斗",
+ "爬楼梯机",
+ "举重",
+ "Barre",
+ "手轮",
+ "田径",
+ "角力",
+ "身心运动",
+ "柔软操",
+ "混和有氧",
+ "传统肌力训练",
+ "交叉训练",
+ "体操",
+ "阶梯训练",
+ "椭圆机",
+ "划船机"};
+
+ void TraingFitnessModel::InitTraingFitnessListItem()
+ {
+ TraingFitnesss[0] = {VIEW_TRAININGNOMAL, text[0]};
+ TraingFitnesss[1] = {VIEW_TRAININGNOMAL, text[1]};
+ TraingFitnesss[2] = {VIEW_TRAININGNOMAL, text[2]};
+ TraingFitnesss[3] = {VIEW_TRAININGNOMAL, text[3]};
+ TraingFitnesss[4] = {VIEW_TRAININGNOMAL, text[4]};
+ TraingFitnesss[5] = {VIEW_TRAININGNOMAL, text[5]};
+ TraingFitnesss[6] = {VIEW_TRAININGNOMAL, text[6]};
+ TraingFitnesss[7] = {VIEW_TRAININGNOMAL, text[7]};
+ TraingFitnesss[8] = {VIEW_TRAININGNOMAL, text[8]};
+ TraingFitnesss[9] = {VIEW_TRAININGNOMAL, text[9]};
+ TraingFitnesss[10] = {VIEW_TRAININGNOMAL, text[10]};
+ TraingFitnesss[11] = {VIEW_TRAININGNOMAL, text[11]};
+ TraingFitnesss[12] = {VIEW_TRAININGNOMAL, text[12]};
+ TraingFitnesss[13] = {VIEW_TRAININGNOMAL, text[13]};
+ TraingFitnesss[14] = {VIEW_TRAININGNOMAL, text[14]};
+ TraingFitnesss[15] = {VIEW_TRAININGNOMAL, text[15]};
+ TraingFitnesss[16] = {VIEW_TRAININGNOMAL, text[16]};
+ TraingFitnesss[17] = {VIEW_TRAININGNOMAL, text[17]};
+ TraingFitnesss[18] = {VIEW_TRAININGNOMAL, text[18]};
+ TraingFitnesss[19] = {VIEW_TRAININGNOMAL, text[19]};
+ TraingFitnesss[20] = {VIEW_TRAININGNOMAL, text[20]};
+ TraingFitnesss[21] = {VIEW_TRAININGNOMAL, text[21]};
+ TraingFitnesss[22] = {VIEW_TRAININGNOMAL, text[22]};
+ TraingFitnesss[23] = {VIEW_TRAININGNOMAL, text[23]};
+ TraingFitnesss[24] = {VIEW_TRAININGNOMAL, text[24]};
+ TraingFitnesss[25] = {VIEW_TRAININGNOMAL, text[25]};
+ TraingFitnesss[26] = {VIEW_TRAININGNOMAL, text[26]};
+ TraingFitnesss[27] = {VIEW_TRAININGNOMAL, text[27]};
+ TraingFitnesss[28] = {VIEW_TRAININGNOMAL, text[28]};
+ TraingFitnesss[29] = {VIEW_TRAININGNOMAL, text[29]};
+ TraingFitnesss[30] = {VIEW_TRAININGNOMAL, text[30]};
+ TraingFitnesss[31] = {VIEW_TRAININGNOMAL, text[31]};
+ TraingFitnesss[32] = {VIEW_TRAININGNOMAL, text[32]};
+ TraingFitnesss[33] = {VIEW_TRAININGNOMAL, text[33]};
+ TraingFitnesss[34] = {VIEW_TRAININGNOMAL, text[34]};
+ TraingFitnesss[35] = {VIEW_TRAININGNOMAL, text[35]};
+ TraingFitnesss[36] = {VIEW_TRAININGNOMAL, text[36]};
+ TraingFitnesss[37] = {VIEW_TRAININGNOMAL, text[37]};
+ TraingFitnesss[38] = {VIEW_TRAININGNOMAL, text[38]};
+ TraingFitnesss[39] = {VIEW_TRAININGNOMAL, text[39]};
+ TraingFitnesss[40] = {VIEW_TRAININGNOMAL, text[40]};
+ TraingFitnesss[41] = {VIEW_TRAININGNOMAL, text[41]};
+ TraingFitnesss[42] = {VIEW_TRAININGNOMAL, text[42]};
+ TraingFitnesss[43] = {VIEW_TRAININGNOMAL, text[43]};
+ TraingFitnesss[44] = {VIEW_TRAININGNOMAL, text[44]};
+ TraingFitnesss[45] = {VIEW_TRAININGNOMAL, text[45]};
+ TraingFitnesss[46] = {VIEW_TRAININGNOMAL, text[46]};
+ TraingFitnesss[47] = {VIEW_TRAININGNOMAL, text[47]};
+ TraingFitnesss[48] = {VIEW_TRAININGNOMAL, text[48]};
+ TraingFitnesss[49] = {VIEW_TRAININGNOMAL, text[49]};
+ TraingFitnesss[50] = {VIEW_TRAININGNOMAL, text[50]};
+ TraingFitnesss[51] = {VIEW_TRAININGNOMAL, text[51]};
+ TraingFitnesss[52] = {VIEW_TRAININGNOMAL, text[52]};
+ TraingFitnesss[53] = {VIEW_TRAININGNOMAL, text[53]};
+ TraingFitnesss[54] = {VIEW_TRAININGNOMAL, text[54]};
+ TraingFitnesss[55] = {VIEW_TRAININGNOMAL, text[55]};
+ TraingFitnesss[56] = {VIEW_TRAININGNOMAL, text[56]};
+ TraingFitnesss[57] = {VIEW_TRAININGNOMAL, text[57]};
+ TraingFitnesss[58] = {VIEW_TRAININGNOMAL, text[58]};
+ TraingFitnesss[59] = {VIEW_TRAININGNOMAL, text[59]};
+ TraingFitnesss[60] = {VIEW_TRAININGNOMAL, text[60]};
+ TraingFitnesss[61] = {VIEW_TRAININGNOMAL, text[61]};
+ TraingFitnesss[62] = {VIEW_TRAININGNOMAL, text[62]};
+ TraingFitnesss[63] = {VIEW_TRAININGNOMAL, text[63]};
+ TraingFitnesss[64] = {VIEW_TRAININGNOMAL, text[64]};
+ }
+
+ const TraingFitnessItem *TraingFitnessModel::GetTraingFitnesslistItems() const
+ {
+ return TraingFitnesss;
+ }
+ uint8_t TraingFitnessModel::GetTraingFitnessListNum() const
+ {
+ return TraingFitnessListMaxNum;
+ }
+
+}
\ 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_fitness/src/TraingFitnessPresenter.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/TraingFitnessPresenter.cpp
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+
+#include <iostream>
+#include <chrono>
+#include <thread>
+#include "traing/training_list_fitness/include/TraingFitnessItemView.h"
+#include "traing/training_list_fitness/include/TraingFitnessPresenter.h"
+#include "traing/training_list_fitness/include/TraingFitnessView.h"
+// #include "TraingFitnessView.h"
+
+namespace OHOS
+{
+ extern const char *Fitness_buttons[];
+ extern char *Fitness_text[];
+
+ // 当前Presenter属性实例化的内存指针
+ static TraingFitnessPresenter *g_pTraingFitnessPresenter = nullptr;
+
+ TraingFitnessPresenter::TraingFitnessPresenter()
+ {
+ p_TraingFitnessModel = &TraingFitnessModel::GetInstance();
+ g_pTraingFitnessPresenter = this;
+ }
+
+ TraingFitnessPresenter::~TraingFitnessPresenter()
+ {
+
+ g_pTraingFitnessPresenter = nullptr;
+ }
+
+ TraingFitnessPresenter *TraingFitnessPresenter::GetInstance()
+ {
+
+ return g_pTraingFitnessPresenter;
+ }
+
+ void TraingFitnessPresenter::OnStart()
+ {
+ p_TraingFitnessModel->InitTraingFitnessListItem();
+ Presenter<TraingFitnessView>::OnStart();
+ }
+
+ void TraingFitnessPresenter::OnPause(void)
+ {
+ Presenter<TraingFitnessView>::OnPause();
+ }
+
+ void TraingFitnessPresenter::OnResume(void)
+ {
+ if (view_ == nullptr)
+ {
+ return;
+ }
+ const TraingFitnessItem *itemInfo = p_TraingFitnessModel->GetTraingFitnesslistItems();
+ for (int i = 0; i < p_TraingFitnessModel->GetTraingFitnessListNum(); i++)
+ {
+ view_->AddToTraingFitnessList(itemInfo[i]);
+ }
+ Presenter<TraingFitnessView>::OnResume();
+ }
+
+ void TraingFitnessPresenter::OnStop(void)
+ {
+
+ Presenter<TraingFitnessView>::OnStop();
+ }
+ bool TraingFitnessPresenter::OnDrag(UIView &view, const DragEvent &event)
+ {
+ return true;
+ }
+ bool TraingFitnessPresenter::OnDragEnd(UIView &view, const DragEvent &event)
+ {
+ if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT)
+ {
+ NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGMORE);
+ }
+ UNUSED(view);
+ return true;
+ }
+
+ bool TraingFitnessPresenter::OnClick(UIView &view, const ClickEvent &event)
+ {
+ UNUSED(event);
+ TraingFitnessItemView *itemView = static_cast<TraingFitnessItemView *>(&view);
+ AppViewId viewId = itemView->GetTraingFitnessIndex();
+ 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_fitness/include/TraingFitnessView.h"
+#include "traing/training_list_fitness/include/TraingFitnessPresenter.h"
+#include "traing/include/TraingModel.h"
+#include "traing/Training_UiConfig.h"
+
+#include "UiConfig.h"
+#include "wearable_log.h"
+
+namespace OHOS
+{
+ static constexpr uint8_t NUM_2 = 2;
+ static TraingFitnessView *g_pTraingFitnessView{nullptr};
+
+ static constexpr int16_t Fitness_LIST_POSITION_X = 43;
+ static constexpr int16_t Fitness_LIST_POSITION_Y = 120;
+ static constexpr int16_t Fitness_SCROLLBLANKSIZE = 35; // 设置此滚动视图的空白大小。
+ static constexpr int16 MAX_SCR_DIS = 1000;
+ static constexpr int16 LIST_POS = 20;
+ static constexpr int16 SNUM_2 = 2;
+
+ TraingFitnessView::TraingFitnessView()
+ {
+ g_pTraingFitnessView = this;
+ }
+
+ TraingFitnessView::~TraingFitnessView()
+ {
+ if (viewInitStatus == true)
+ {
+ DeInitView();
+ }
+ g_pTraingFitnessView = nullptr;
+ }
+
+ TraingFitnessView *TraingFitnessView::GetInstance()
+ {
+ return g_pTraingFitnessView;
+ }
+ /// @param item
+ void TraingFitnessView::AddToTraingFitnessList(const TraingFitnessItem &item)
+ {
+ p_TraingFitnessListAdapter->AddItem(item);
+ }
+ void TraingFitnessView::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 *>(TraingFitnessPresenter::GetInstance());
+ scrollView->SetOnDragListener(draglistener);
+ scrollView->SetYScrollBarVisible(true); // 设置滑动滚动条
+ /* -------------------------------------------------------------------------- */
+ // 初始化Lable
+ TraingModel::GetInstance()->InitLabelExt(title, 173, 52, 200, 60, "label1", "健身运动", DEFAULT_VECTOR_FONT_FILENAME, 30);
+ scrollView->Add(title);
+ // UIList 的适配器
+ p_TraingFitnessListAdapter = new TraingFitnessAdapter();
+ p_TraingFitnessListAdapter->SetItemClickListener(presenter_);
+ if (TraingFitnessList == nullptr)
+ {
+ TraingFitnessList = new UIList();
+ }
+ TraingFitnessList->SetPosition(Fitness_LIST_POSITION_X, Fitness_LIST_POSITION_Y);
+ TraingFitnessList->Resize(HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
+ TraingFitnessList->SetScrollBlankSize(Fitness_SCROLLBLANKSIZE);
+ TraingFitnessList->SetReboundSize(100);
+ TraingFitnessList->SetSelectPosition(HORIZONTAL_RESOLUTION / SNUM_2); // middle position
+ TraingFitnessList->SetDraggable(true);
+ TraingFitnessList->SetThrowDrag(false);
+ TraingFitnessList->EnableAutoAlign(true);
+ TraingFitnessList->SetElastic(true); // 设置回弹效果
+ TraingFitnessList->SetMaxScrollDistance(MAX_SCR_DIS);
+
+ // 增加表冠控制
+ TraingFitnessList->SetRotateFactor(2);
+ TraingFitnessList->RequestFocus();
+ }
+ UIList *TraingFitnessView::GetList()
+ {
+ return TraingFitnessList;
+ }
+ void TraingFitnessView::DeInitView()
+ {
+ // scrollView-> RemoveAll();
+ RemoveAll();
+ delete title;
+ title = nullptr;
+
+ delete TraingFitnessList;
+ TraingFitnessList = nullptr;
+
+ delete scrollView;
+ scrollView = nullptr;
+
+ delete draglistener;
+ draglistener = nullptr;
+ }
+
+ void TraingFitnessView::PreLoad(void)
+ {
+ if (!viewInitStatus)
+ {
+ InitView();
+ viewInitStatus = true;
+ }
+ }
+
+ /// @brief 页面启动时需要执行的代码逻辑
+ void TraingFitnessView::OnStart()
+ {
+ View<TraingFitnessPresenter>::OnStart();
+ BaseView::RootView(Color::Black().full);
+ PreLoad();
+ }
+
+ /// @brief 创建页面的视图。
+ void TraingFitnessView::OnSetUpView()
+ {
+ View<TraingFitnessPresenter>::OnSetUpView();
+ // scrollView->Add(title);
+ scrollView->Add(TraingFitnessList);
+ scrollView->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
+ RootView::GetInstance()->Add(scrollView);
+ TraingFitnessList->SetAdapter(p_TraingFitnessListAdapter);
+ // TraingFitnessList->RefreshList(); // 刷新列表
+ Draw();
+ }
+
+ /// @brief 销毁页面的视图。
+ void TraingFitnessView::OnTearDownView()
+ {
+ View<TraingFitnessPresenter>::OnTearDownView();
+ return;
+ }
+
+ /// @brief 页面结束时需要执行的销毁逻辑。
+ void TraingFitnessView::OnStop()
+ {
+ View<TraingFitnessPresenter>::OnStop();
+ RootView::GetInstance()->RemoveAll();
+ RootView::GetInstance()->ClearFocus();
+ return;
+ }
+}
\ No newline at end of file
* @Author: Caisking 3449750381@qq.com
* @Date: 2024-03-27 11:09:52
* @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-03-27 11:14:03
+ * @LastEditTime: 2024-03-27 14:20:36
* @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/training_list_ice/include/TraingIceAdapter.h
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
-/***
- * @Author: Caisking 3449750381@qq.com
- * @Date: 2024-03-27 11:12:32
- * @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-03-27 11:14:36
- * @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/training_list_ice/include/TraingIceItemView.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/TraingIceItemView.h
- * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
- */
+
#ifndef TraingIce_ITEM_VIEW_H
#define TraingIce_ITEM_VIEW_H
* @Author: Caisking 3449750381@qq.com
* @Date: 2024-03-26 09:44:11
* @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-03-27 11:29:03
+ * @LastEditTime: 2024-03-27 14:22:01
* @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/training_list_ice/include/TraingIcePresenter.h
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
* @Author: Caisking 3449750381@qq.com
* @Date: 2024-03-27 11:12:53
* @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-03-27 11:16:09
+ * @LastEditTime: 2024-03-27 14:22:47
* @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/training_list_ice/src/TraingIceAdapter.cpp
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
}\r
if (strcmp(view.GetViewId(), BUTTON_FITNESS) == 0)\r
{\r
- NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGLIMIT);\r
+ NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGFITNESS);\r
}\r
if (strcmp(view.GetViewId(), BUTTON_ICE) == 0)\r
{\r