${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_GPS/src/TraingGPSsetPresenter.cpp
#训练列表
+ #极限训练
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_list_limit/src/TraingLimitView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_list_limit/src/TraingLimitPresenter.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_list_limit/src/TraingLimitAdapter.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_list_limit/src/TraingLimitItemView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_list_limit/src/TraingLimitModel.cpp
+ #冰上运动
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_list_ice/src/TraingIceView.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_list_ice/src/TraingIcePresenter.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_list_ice/src/TraingIceAdapter.cpp
+ ${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_more/src/TraingMoreView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_list_more/src/TraingMorePresenter.cpp
/* ----------------------------------- 训练 ----------------------------------- */
VIEW_TRAINING, // 训练
VIEW_TRAININGMUSIC, // 训练音乐
- VIEW_TRAININGMORE, // 更多训练
- VIEW_RUNNING, // 跑步训练之列表
- VIEW_TRAININGLIMIT, // 极限运动子列表
VIEW_TRAININGNOMAL, // 正常训练开始界面(除骑行,健走,跑步外)
VIEW_TRAININGSET, // 训练目标(时长,卡路里)
VIEW_TRAININGSETTIME, // 设置训练时长
VIEW_TRAININGSTRONG, // 训练强度介绍
VIEW_TRAININGWIN, // 目标达成
VIEW_TRAINING_RECORD, // 训练记录
+ /* ---------------------------------- 训练列表 ---------------------------------- */
+ VIEW_TRAININGMORE, // 更多训练
+ VIEW_TRAININGLIMIT, // 极限运动列表
+ VIEW_TRAININGICE, // 冰上运动列表
/* ---------------------------------- GPS训练 --------------------------------- */
VIEW_TRAININGGPS, // GPS训练
VIEW_TRAININGGPSSET, // GPS训练目标(时长,距离,卡路里,步数)
/* ----------------------------------- 训练 ----------------------------------- */
void InitTraingSlice(void);
void InitTraingMusicSlice(void);
- void InitTraingMoreSlice(void);
- void InitTraingListLimitSlice(void);
void InitTraingNomalSlice(void);
void InitTraingSetSlice(void);
- void InitTraingGPSSetSlice(void);
void InitTraingStrongSlice(void);
void InitTraingSetTimeSlice(void);
void InitTraingSetCaluliSlice(void);
void InitTraingEndnoteSlice(void);
void InitTraingEndnote2Slice(void);
void InitTraingEnddataSlice(void);
+ void InitTraingWinSlice(void);
+
+ void InitTraingGPSSetSlice(void);
void InitTraingGPSSlice(void);
void InitTraingGPSlackSlice(void);
void InitTraingGPSnoteSlice(void);
void InitTraingGPSlostSlice(void);
void InitTraingGPSbackSlice(void);
- void InitTraingWinSlice(void);
- /* -------------------------------------------------------------------------- */
- void InitTraingRecordSlice(void);
- /* -------------------------------------------------------------------------- */
+
+ void InitTraingMoreSlice(void); // 更多训练
+ void InitTraingLimitSlice(void); // 极限训练
+ void InitTraingIceSlice(void); // 冰上训练
+
+ void InitTraingRecordSlice(void); // 训练记录
+ /* -------------------------------------------------------------------------- */
void InitSecondaryFunction(void);
void InitFastTrainingSlice(void);
void InitFastTrainingAttentionSlice(void);
#include "traing/training_list_more/include/TraingMoreView.h"
#include "traing/training_list_limit/include/TraingLimitPresenter.h"
#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_card/include/TraingCardPresenter.h"
#include "traing/training_card/include/TraingCardView.h"
/* ----------------------------------- 训练 ----------------------------------- */
{VIEW_TRAINING, &NativeLauncher::InitTraingSlice}, // 训练
{VIEW_TRAININGMUSIC, &NativeLauncher::InitTraingMusicSlice}, // 训练音乐卡片
- {VIEW_TRAININGMORE, &NativeLauncher::InitTraingMoreSlice}, // 更多训练
- {VIEW_TRAININGLIMIT, &NativeLauncher::InitTraingListLimitSlice}, // 极限训练
{VIEW_TRAININGNOMAL, &NativeLauncher::InitTraingNomalSlice}, // 正常训练初始界面
{VIEW_TRAININGSET, &NativeLauncher::InitTraingSetSlice}, // 训练目标设置界面
{VIEW_TRAININGGPSSET, &NativeLauncher::InitTraingGPSSetSlice}, // 训练GPS目标设置界面
{VIEW_TRAININGENDNOTE, &NativeLauncher::InitTraingEndnoteSlice}, // 训练结束提醒
{VIEW_TRAININGENDNOTE2, &NativeLauncher::InitTraingEndnote2Slice}, // 训练结束时间太短提醒
{VIEW_TRAININGENDDATA, &NativeLauncher::InitTraingEnddataSlice}, // 训练结束详细数据
- {VIEW_TRAININGGPS, &NativeLauncher::InitTraingGPSSlice}, // GPS训练
- {VIEW_TRAININGGPSLACK, &NativeLauncher::InitTraingGPSlackSlice}, // GPS缺少
- {VIEW_TRAININGGPSNOTE, &NativeLauncher::InitTraingGPSnoteSlice}, // 提醒连接GPS
- {VIEW_TRAININGSTRONG, &NativeLauncher::InitTraingStrongSlice}, // 训练强度介绍
- {VIEW_TRAININGGPSLOST, &NativeLauncher::InitTraingGPSlostSlice}, // GPS断联
- {VIEW_TRAININGGPSBACK, &NativeLauncher::InitTraingGPSbackSlice}, // GPS回连
{VIEW_TRAININGWIN, &NativeLauncher::InitTraingWinSlice}, // 训练目标达成
- {VIEW_TRAINING_RECORD, &NativeLauncher::InitTraingRecordSlice}, // 训练目标达成
+ {VIEW_TRAINING_RECORD, &NativeLauncher::InitTraingRecordSlice}, // 训练目标达成
+
+ {VIEW_TRAININGGPSSET, &NativeLauncher::InitTraingGPSSetSlice}, // 训练GPS目标设置界面
+ {VIEW_TRAININGGPS, &NativeLauncher::InitTraingGPSSlice}, // GPS训练
+ {VIEW_TRAININGGPSLACK, &NativeLauncher::InitTraingGPSlackSlice}, // GPS缺少
+ {VIEW_TRAININGGPSNOTE, &NativeLauncher::InitTraingGPSnoteSlice}, // 提醒连接GPS
+ {VIEW_TRAININGSTRONG, &NativeLauncher::InitTraingStrongSlice}, // 训练强度介绍
+ {VIEW_TRAININGGPSLOST, &NativeLauncher::InitTraingGPSlostSlice}, // GPS断联
+ {VIEW_TRAININGGPSBACK, &NativeLauncher::InitTraingGPSbackSlice}, // GPS回连
+
+ {VIEW_TRAININGMORE, &NativeLauncher::InitTraingMoreSlice}, // 更多训练
+ {VIEW_TRAININGLIMIT, &NativeLauncher::InitTraingLimitSlice}, // 极限训练
+ {VIEW_TRAININGICE, &NativeLauncher::InitTraingIceSlice}, // 冰上训练
+
/* -------------------------------------------------------------------------- */
#ifdef SUPPORT_ALIPAY_SEC
SliceProxy *traingview = new AbilitySliceProxy<TraingView, TraingPresenter>;
NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAINING, traingview);
}
- void NativeLauncher::InitTraingMoreSlice(void)
- {
- SliceProxy *traingmoreview = new AbilitySliceProxy<TraingMoreView, TraingMorePresenter>;
- NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGMORE, traingmoreview);
- }
- void NativeLauncher::InitTraingListLimitSlice(void)
- {
- SliceProxy *TraingListLimitview = new AbilitySliceProxy<TraingLimitView, TraingLimitPresenter>;
- NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGLIMIT, TraingListLimitview);
- }
void NativeLauncher::InitTraingNomalSlice(void)
{
SliceProxy *traingnomalview = new AbilitySliceProxy<TraingNomalView, TraingNomalPresenter>;
SliceProxy *traingenddataview = new AbilitySliceProxy<TraingEnddataView, TraingEnddataPresenter>;
NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGENDDATA, traingenddataview);
}
+ void NativeLauncher::InitTraingWinSlice(void)
+ {
+ SliceProxy *traingwinview = new AbilitySliceProxy<TraingWinView, TraingWinPresenter>;
+ NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGWIN, traingwinview);
+ }
+ void NativeLauncher::InitTraingRecordSlice(void)
+ {
+ SliceProxy *traingrecordview = new AbilitySliceProxy<TraingRecordView, TraingRecordPresenter>;
+ NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAINING_RECORD, traingrecordview);
+ }
+ void NativeLauncher::InitTraingMusicSlice(void)
+ {
+ SliceProxy *traingmusicview = new AbilitySliceProxy<TraingMusicView, TraingMusicPresenter>;
+ NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGMUSIC, traingmusicview);
+ }
+ /* -------------------------------------------------------------------------- */
void NativeLauncher::InitTraingGPSSlice(void)
{
SliceProxy *traingGPSview = new AbilitySliceProxy<TraingGPSView, TraingGPSPresenter>;
SliceProxy *traingGPSbackview = new AbilitySliceProxy<TraingGPSbackView, TraingGPSbackPresenter>;
NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGGPSBACK, traingGPSbackview);
}
- void NativeLauncher::InitTraingWinSlice(void)
+ /* ---------------------------------- 训练列表 ---------------------------------- */
+ void NativeLauncher::InitTraingMoreSlice(void)
{
- SliceProxy *traingwinview = new AbilitySliceProxy<TraingWinView, TraingWinPresenter>;
- NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGWIN, traingwinview);
+ SliceProxy *traingmoreview = new AbilitySliceProxy<TraingMoreView, TraingMorePresenter>;
+ NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGMORE, traingmoreview);
}
- void NativeLauncher::InitTraingRecordSlice(void)
+ void NativeLauncher::InitTraingLimitSlice(void)
{
- SliceProxy *traingrecordview = new AbilitySliceProxy<TraingRecordView, TraingRecordPresenter>;
- NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAINING_RECORD, traingrecordview);
+ SliceProxy *TraingLimitview = new AbilitySliceProxy<TraingLimitView, TraingLimitPresenter>;
+ NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGLIMIT, TraingLimitview);
}
- void NativeLauncher::InitTraingMusicSlice(void)
+ void NativeLauncher::InitTraingIceSlice(void)
{
- SliceProxy *traingmusicview = new AbilitySliceProxy<TraingMusicView, TraingMusicPresenter>;
- NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGMUSIC, traingmusicview);
+ SliceProxy *TraingIceview = new AbilitySliceProxy<TraingIceView, TraingIcePresenter>;
+ NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGICE, TraingIceview);
}
/* -------------------------------------------------------------------------- */
--- /dev/null
+/***
+ * @Author: Caisking 3449750381@qq.com
+ * @Date: 2024-03-27 11:09:52
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-03-27 11:14:03
+ * @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
+ */
+
+#ifndef TraingIce_ADAPTER_H
+#define TraingIce_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; // 标签
+ } TraingIceItem;
+
+ class TraingIceAdapter : public AbstractAdapter
+ {
+ public:
+ explicit TraingIceAdapter();
+ virtual ~TraingIceAdapter();
+
+ void SetData(std::list<TraingIceItem> &data);
+
+ virtual uint16_t GetCount(void) override;
+
+ virtual UIView *GetView(UIView *inView, int16_t index) override;
+
+ virtual void AddItem(const TraingIceItem &item);
+
+ void SetItemClickListener(UIView::OnClickListener *itemclicklistener)
+ {
+ itemClickListener = itemclicklistener;
+ }
+
+ private:
+ std::list<TraingIceItem> listData;
+ UIView::OnClickListener *itemClickListener{nullptr};
+ };
+}
+
+#endif
\ No newline at end of file
--- /dev/null
+/***
+ * @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
+
+#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_ice/include/TraingIceAdapter.h"
+#include "components/ui_label_button.h"
+#include "AppViewIDs.h"
+#include "ohos_types.h"
+
+namespace OHOS
+{
+ class TraingIceItemView : public UIViewGroup
+ {
+ public:
+ explicit TraingIceItemView();
+ virtual ~TraingIceItemView();
+ virtual void SetItemInfo(const TraingIceItem itemInfo);
+ virtual void SetUpChild();
+ AppViewId GetTraingIceIndex();
+
+ private:
+ TraingIceItemView(const TraingIceItemView &);
+ UIImageView sbackground; // 背景
+ UIImageView sicon; // 箭头
+ UILabel sLabel; // 标签
+ TraingIceItem sItemInfo = {VIEW_INVALID, nullptr};
+ };
+
+}
+#endif
\ No newline at end of file
--- /dev/null
+
+#ifndef TraingIce_MODEL_H
+#define TraingIce_MODEL_H
+
+#include <cstdint>
+#include <map>
+#include "AppViewIDs.h"
+#include "UiConfig.h"
+#include "TraingIcePresenter.h"
+#include "traing/training_list_ice/include/TraingIceAdapter.h"
+
+namespace OHOS
+{
+ class TraingIceModel
+ {
+ public:
+ static TraingIceModel &GetInstance(void);
+ void InitTraingIceListItem();
+ const TraingIceItem *GetTraingIcelistItems() const;
+ uint8_t GetTraingIceListNum() const;
+ // const std::map<TraingIceIndex, AppViewId> &GetTraingIceIdToViewId() const;
+
+ private:
+ TraingIceModel();
+ TraingIceModel(const TraingIceModel &);
+ TraingIceModel &operator=(const TraingIceModel &);
+ virtual ~TraingIceModel();
+ static const uint16_t TraingIceListMaxNum = 12;
+ TraingIceItem TraingIces[TraingIceListMaxNum] = {VIEW_INVALID, nullptr};
+ // std::map<int, AppViewId> TraingIceIdToViewId;
+ 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/TraingIcePresenter.h
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+
+#ifndef _TraingIce_PRESENTER_H
+#define _TraingIce_PRESENTER_H
+
+#include "Presenter.h"
+#include "TraingIceView.h"
+
+namespace OHOS
+{
+ class TraingIceView;
+ class TraingIceModel;
+ class TraingIcePresenter : public Presenter<TraingIceView>,
+ public UIView::OnClickListener,
+ public UIView::OnDragListener
+ {
+ public:
+ TraingIcePresenter();
+ virtual ~TraingIcePresenter();
+
+ void OnStart() override;
+ void OnPause() override;
+ void OnResume() override;
+ void OnStop() override;
+
+ static TraingIcePresenter *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;
+
+ TraingIceModel *p_TraingIceModel{nullptr};
+ };
+} // namespace OHOS
+
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
--- /dev/null
+
+#ifndef TraingIce_VIEW_H
+#define TraingIce_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_ice/include/TraingIceAdapter.h"
+#include "traing/training_list_ice/include/TraingIceModel.h"
+#include "components/ui_label_button_ext.h"
+#include "components/ui_label_ext.h"
+
+namespace OHOS
+{
+ class TraingIcePresenter;
+ class TraingIceModel;
+ class TraingIceView : public View<TraingIcePresenter>, public UIViewGroup
+ {
+
+ public:
+ TraingIceView();
+ virtual ~TraingIceView();
+ static TraingIceView *GetInstance(void);
+
+ void OnStart() override;
+ void OnSetUpView() override;
+ void OnTearDownView() override;
+ void OnStop() override;
+
+ UIList *GetList();
+ void AddToTraingIceList(const TraingIceItem &item);
+
+ private:
+ void InitView(void);
+ void DeInitView(void);
+ void PreLoad(void);
+
+ private:
+ UIScrollView *scrollView = nullptr;
+ UILabelExt *title{nullptr};
+ TraingIceAdapter *p_TraingIceListAdapter{nullptr};
+ UIList *TraingIceList = nullptr;
+ UIView::OnDragListener *draglistener{nullptr};
+
+ TraingIcePresenter *g_TraingIcePresenter{nullptr};
+ TraingIceModel *g_TraingIceModel{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_ice/src/TraingIceAdapter.cpp
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+#include "traing/training_list_ice/include/TraingIceAdapter.h"
+#include "traing/training_list_ice/include/TraingIceModel.h"
+#include "traing/training_list_ice/include/TraingIceItemView.h"
+
+#include "wearable_log.h"
+
+namespace OHOS
+{
+ TraingIceAdapter::TraingIceAdapter() {}
+
+ TraingIceAdapter::~TraingIceAdapter()
+ {
+ listData.clear();
+ }
+
+ uint16_t TraingIceAdapter::GetCount(void)
+ {
+ return listData.size();
+ }
+
+ void TraingIceAdapter::SetData(std::list<TraingIceItem> &data)
+ {
+ if (!listData.empty())
+ {
+ listData.clear();
+ }
+ std::list<TraingIceItem>::iterator it;
+ for (it = data.begin(); it != data.end(); it++)
+ {
+ listData.push_back(*it);
+ }
+ }
+
+ /// @brief 为列表的每一项创建一个视图
+ /// @param inView 一个指向已存在的视图对象的指
+ /// @param index 要创建的视图在列表中的索引l。
+ /// @return 返回该视图对象
+ UIView *TraingIceAdapter::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<TraingIceItem>::iterator it = listData.begin();
+ for (int i = 0; i < index; i++)
+ {
+ it++;
+ }
+ TraingIceItem itemData = *it;
+ TraingIceItemView *item = nullptr;
+ /*
+ 5.根据传入的inView参数是否已经存在一个视图对象,
+ 若为空则创建一个新的MessageItemView对象,
+ 否则将inView转换成MessageItemView类型的指针
+ */
+ if (inView == nullptr)
+ {
+ item = new TraingIceItemView();
+ }
+ else
+ {
+ item = static_cast<TraingIceItemView *>(inView);
+ }
+ item->SetItemInfo(itemData);
+ item->SetOnClickListener(itemClickListener);
+ return item;
+ }
+
+ void TraingIceAdapter::AddItem(const TraingIceItem &item)
+ {
+ listData.push_back(item);
+ }
+} // namespace OHOS
--- /dev/null
+
+#include "traing/training_list_ice/include/TraingIceItemView.h"
+#include "traing/include/TraingModel.h"
+#include "traing/Training_UiConfig.h"
+#include "UiConfig.h"
+namespace OHOS
+{
+
+ TraingIceItemView::TraingIceItemView()
+ {
+ 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);
+ }
+
+ TraingIceItemView::~TraingIceItemView()
+ {
+ Remove(&sbackground);
+ Remove(&sicon);
+ Remove(&sLabel);
+ }
+
+ /// @brief 设置item的信息
+ /// @param itemInfo
+ void TraingIceItemView::SetItemInfo(const TraingIceItem itemInfo)
+ {
+ sItemInfo = itemInfo;
+ sLabel.SetText(itemInfo.label);
+ }
+
+ /// @brief 设置每一个itemview上的组件
+ void TraingIceItemView::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 TraingIceItemView::GetTraingIceIndex()
+ {
+ 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_ice/src/TraingIceModel.cpp
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+#include "traing/training_list_ice/include/TraingIceModel.h"
+#include "common/image_cache_manager.h"
+#include "UiConfig.h"
+#include "ui_resource_image.h"
+#include "AppViewIDs.h"
+namespace OHOS
+{
+
+ TraingIceModel::TraingIceModel() {}
+
+ TraingIceModel::~TraingIceModel() {}
+
+ TraingIceModel &TraingIceModel::GetInstance()
+ {
+ static TraingIceModel instance;
+ return instance;
+ }
+
+ static char *text[] = {"一般冰上运动", "溜冰", "冰球", "冰石壶/冰壶", "雪上摩托车", "雪橇", "冬季两项", "越野滑雪", "滑雪", "单板滑雪/滑雪板", "雪鞋健行", "雪地运动"};
+
+ void TraingIceModel::InitTraingIceListItem()
+ {
+ TraingIces[0] = {VIEW_TRAININGNOMAL, "一般冰上运动"};
+ TraingIces[1] = {VIEW_TRAININGNOMAL, "溜冰"};
+ TraingIces[2] = {VIEW_TRAININGNOMAL, "冰球"};
+ TraingIces[3] = {VIEW_TRAININGNOMAL, "冰石壶/冰壶"};
+ TraingIces[4] = {VIEW_TRAININGNOMAL, "雪上摩托车"};
+ TraingIces[5] = {VIEW_TRAININGNOMAL, "雪橇"};
+ TraingIces[6] = {VIEW_TRAININGNOMAL, "冬季两项"};
+ TraingIces[7] = {VIEW_TRAININGNOMAL, "越野滑雪"};
+ TraingIces[8] = {VIEW_TRAININGNOMAL, "滑雪"};
+ TraingIces[9] = {VIEW_TRAININGNOMAL, "单板滑雪/滑雪板"};
+ TraingIces[10] = {VIEW_TRAININGNOMAL, "雪鞋健行"};
+ TraingIces[11] = {VIEW_TRAININGNOMAL, "雪地运动"};
+ }
+
+
+ const TraingIceItem *TraingIceModel::GetTraingIcelistItems() const
+ {
+ return TraingIces;
+ }
+ uint8_t TraingIceModel::GetTraingIceListNum() const
+ {
+ return TraingIceListMaxNum;
+ }
+
+}
\ 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_ice/src/TraingIcePresenter.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/TraingIcePresenter.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_ice/include/TraingIceItemView.h"
+#include "traing/training_list_ice/include/TraingIcePresenter.h"
+#include "traing/training_list_ice/include/TraingIceView.h"
+// #include "TraingIceView.h"
+
+namespace OHOS
+{
+ extern const char *Ice_buttons[];
+ extern char *Ice_text[];
+
+ // 当前Presenter属性实例化的内存指针
+ static TraingIcePresenter *g_pTraingIcePresenter = nullptr;
+
+ TraingIcePresenter::TraingIcePresenter()
+ {
+ p_TraingIceModel = &TraingIceModel::GetInstance();
+ g_pTraingIcePresenter = this;
+ }
+
+ TraingIcePresenter::~TraingIcePresenter()
+ {
+
+ g_pTraingIcePresenter = nullptr;
+ }
+
+ TraingIcePresenter *TraingIcePresenter::GetInstance()
+ {
+
+ return g_pTraingIcePresenter;
+ }
+
+ void TraingIcePresenter::OnStart()
+ {
+ p_TraingIceModel->InitTraingIceListItem();
+ Presenter<TraingIceView>::OnStart();
+ }
+
+ void TraingIcePresenter::OnPause(void)
+ {
+ Presenter<TraingIceView>::OnPause();
+ }
+
+ void TraingIcePresenter::OnResume(void)
+ {
+ if (view_ == nullptr)
+ {
+ return;
+ }
+ const TraingIceItem *itemInfo = p_TraingIceModel->GetTraingIcelistItems();
+ for (int i = 0; i < p_TraingIceModel->GetTraingIceListNum(); i++)
+ {
+ view_->AddToTraingIceList(itemInfo[i]);
+ }
+ Presenter<TraingIceView>::OnResume();
+ }
+
+ void TraingIcePresenter::OnStop(void)
+ {
+
+ Presenter<TraingIceView>::OnStop();
+ }
+ bool TraingIcePresenter::OnDrag(UIView &view, const DragEvent &event)
+ {
+ return true;
+ }
+ bool TraingIcePresenter::OnDragEnd(UIView &view, const DragEvent &event)
+ {
+ if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT)
+ {
+ NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGMORE);
+ }
+ UNUSED(view);
+ return true;
+ }
+
+ bool TraingIcePresenter::OnClick(UIView &view, const ClickEvent &event)
+ {
+ UNUSED(event);
+ TraingIceItemView *itemView = static_cast<TraingIceItemView *>(&view);
+ AppViewId viewId = itemView->GetTraingIceIndex();
+ 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_ice/include/TraingIceView.h"
+#include "traing/training_list_ice/include/TraingIcePresenter.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 TraingIceView *g_pTraingIceView{nullptr};
+ /* --------------------------------- List --------------------------------- */
+ static constexpr int16_t Ice_LIST_POSITION_X = 43;
+ static constexpr int16_t Ice_LIST_POSITION_Y = 120;
+ static constexpr int16_t Ice_SCROLLBLANKSIZE = 35; // 设置此滚动视图的空白大小。
+ static constexpr int16 MAX_SCR_DIS = 1000;
+ static constexpr int16 LIST_POS = 20;
+ static constexpr int16 SNUM_2 = 2;
+
+ TraingIceView::TraingIceView()
+ {
+ g_pTraingIceView = this;
+ }
+
+ TraingIceView::~TraingIceView()
+ {
+ if (viewInitStatus == true)
+ {
+ DeInitView();
+ }
+ g_pTraingIceView = nullptr;
+ }
+
+ TraingIceView *TraingIceView::GetInstance()
+ {
+ return g_pTraingIceView;
+ }
+ /// @param item
+ void TraingIceView::AddToTraingIceList(const TraingIceItem &item)
+ {
+ p_TraingIceListAdapter->AddItem(item);
+ }
+ void TraingIceView::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 *>(TraingIcePresenter::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_TraingIceListAdapter = new TraingIceAdapter();
+ p_TraingIceListAdapter->SetItemClickListener(presenter_);
+ if (TraingIceList == nullptr)
+ {
+ TraingIceList = new UIList();
+ }
+ TraingIceList->SetPosition(Ice_LIST_POSITION_X, Ice_LIST_POSITION_Y);
+ TraingIceList->Resize(HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
+ TraingIceList->SetScrollBlankSize(Ice_SCROLLBLANKSIZE);
+ TraingIceList->SetSelectPosition(HORIZONTAL_RESOLUTION / SNUM_2); // middle position
+ TraingIceList->SetDraggable(true);
+ TraingIceList->SetThrowDrag(false);
+ TraingIceList->EnableAutoAlign(true);
+ TraingIceList->SetElastic(true); // 设置回弹效果
+ TraingIceList->SetMaxScrollDistance(MAX_SCR_DIS);
+
+ // 增加表冠控制
+ TraingIceList->SetRotateFactor(2);
+ TraingIceList->RequestFocus();
+ }
+ UIList *TraingIceView::GetList()
+ {
+ return TraingIceList;
+ }
+ void TraingIceView::DeInitView()
+ {
+ // scrollView-> RemoveAll();
+ RemoveAll();
+ delete title;
+ title = nullptr;
+
+ delete TraingIceList;
+ TraingIceList = nullptr;
+
+ delete scrollView;
+ scrollView = nullptr;
+
+ delete draglistener;
+ draglistener = nullptr;
+ }
+
+ void TraingIceView::PreLoad(void)
+ {
+ if (!viewInitStatus)
+ {
+ InitView();
+ viewInitStatus = true;
+ }
+ }
+
+ /// @brief 页面启动时需要执行的代码逻辑
+ void TraingIceView::OnStart()
+ {
+ View<TraingIcePresenter>::OnStart();
+ BaseView::RootView(Color::Black().full);
+ PreLoad();
+ }
+
+ /// @brief 创建页面的视图。
+ void TraingIceView::OnSetUpView()
+ {
+ View<TraingIcePresenter>::OnSetUpView();
+ // scrollView->Add(title);
+ scrollView->Add(TraingIceList);
+ scrollView->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
+ RootView::GetInstance()->Add(scrollView);
+ TraingIceList->SetAdapter(p_TraingIceListAdapter);
+ // TraingIceList->RefreshList(); // 刷新列表
+ Draw();
+ }
+
+ /// @brief 销毁页面的视图。
+ void TraingIceView::OnTearDownView()
+ {
+ View<TraingIcePresenter>::OnTearDownView();
+ return;
+ }
+
+ /// @brief 页面结束时需要执行的销毁逻辑。
+ void TraingIceView::OnStop()
+ {
+ View<TraingIcePresenter>::OnStop();
+ RootView::GetInstance()->RemoveAll();
+ RootView::GetInstance()->ClearFocus();
+ return;
+ }
+}
\ No newline at end of file
#include "components/ui_checkbox.h"
#include "AppViewIDs.h"
-// 音乐列表的适配器
+// 列表的适配器
namespace OHOS
{
* @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-26 18:26:49
- * @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
- */
#ifndef _TraingLimit_PRESENTER_H
#define _TraingLimit_PRESENTER_H
+/***
+ * @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_limit/include/TraingLimitView.h
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
#ifndef TraingLimit_VIEW_H
#define TraingLimit_VIEW_H
scrollView->SetYScrollBarVisible(true); // 设置滑动滚动条\r
/* -------------------------------------------------------------------------- */\r
// 初始化Lable\r
- TraingModel::GetInstance()->InitLabelExt(title, 173, 52, 200, 60, "label1", "æ\9e\81é\99\90è®ç»\83", DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+ TraingModel::GetInstance()->InitLabelExt(title, 173, 52, 200, 60, "label1", "æ\9e\81é\99\90è¿\90å\8a¨", DEFAULT_VECTOR_FONT_FILENAME, 30);\r
scrollView->Add(title);\r
// UIList 的适配器\r
p_TraingLimitListAdapter = new TraingLimitAdapter();\r
}\r
if (strcmp(view.GetViewId(), BUTTON_ICE) == 0)\r
{\r
- NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGLIMIT);\r
+ NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGICE);\r
}\r
if (strcmp(view.GetViewId(), BUTTON_LIMIT) == 0)\r
{\r