合并训练功能UI
authorCaisking <3449750381@qq.com>
Tue, 19 Mar 2024 12:20:30 +0000 (20:20 +0800)
committerCaisking <3449750381@qq.com>
Tue, 19 Mar 2024 12:20:30 +0000 (20:20 +0800)
113 files changed:
code/sdk/application/wearable/fd230app/CMakeLists.txt
code/sdk/application/wearable/fd230app/nativelauncher/include/AppViewIDs.h
code/sdk/application/wearable/fd230app/nativelauncher/include/NativeLauncher.h
code/sdk/application/wearable/fd230app/nativelauncher/include/UiConfig.h
code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp
code/sdk/application/wearable/fd230app/nativeui/applist/src/ApplistModel.cpp
code/sdk/application/wearable/fd230app/nativeui/main/include/MainViewSample.h
code/sdk/application/wearable/fd230app/nativeui/main/src/MainViewSample.cpp
code/sdk/application/wearable/fd230app/nativeui/screensetting/include/ScreenModels.h
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingCardPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingCardView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingControlPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingControlView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingDataPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingDataView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingDetailPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingDetailView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEnddataPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEnddataView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEndnote2Presenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEndnote2View.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEndnotePresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEndnoteView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSbackPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSbackView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSlackPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSlackView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSlostPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSlostView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSnotePresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSnoteView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSsetPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSsetView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingLimitPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingLimitView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingMorePresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingMoreView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingNomalPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingNomalView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetCaluliPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetCaluliView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetDistPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetDistView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetSeptPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetSeptView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetTimePresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetTimeView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingStrongPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingStrongView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingView.h
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingWinPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingWinView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingCardPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingCardView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingControlPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingControlView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingDataPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingDataView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingDetailPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingDetailView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEndnote2Presenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEndnote2View.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEndnotePresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEndnoteView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSbackPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSbackView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSlackPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSlackView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSlostPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSlostView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSnotePresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSnoteView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSsetPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSsetView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingLimitPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingLimitView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingMorePresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingMoreView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingNomalPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingNomalView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetCaluliPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetCaluliView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetDistPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetDistView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetSeptPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetSeptView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetTimePresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetTimeView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingStrongPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingStrongView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingView.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingWinPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingWinView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/traing_card/Traing_CardView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/traing_card/Traing_CardView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traingrecord/include/TraingRecordPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traingrecord/include/TraingRecordView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traingrecord/src/TraingRecordPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traingrecord/src/TraingRecordView.cpp [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/APPLIST_TRAINING.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/APPLIST_TRAINING_RECORD.bin [new file with mode: 0644]

index 943d8b1..ee47e6b 100644 (file)
@@ -44,6 +44,7 @@ set(PRIVATE_HEADER
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/InitComponent/include
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/uisample/uitest/framework/include
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/heart_blood/health_service/
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/traing_card/
 
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/producttest/include
 
@@ -249,9 +250,8 @@ set(SOURCES
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/heart_blood/src/HeartCardView.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/heart_blood/health_service/health_service.cpp
 
-    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingView.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/language/LanguageInit.cpp
 
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/language/LanguageInit.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/config/src/ConfigModel.cpp
 
     #天气
@@ -388,6 +388,60 @@ set(SOURCES
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/main/src/dial/DialStaticImgView.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/main/src/dial/parser/DialBinParser.cpp
 
+    #Training
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingPresenter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingMoreView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingMorePresenter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingLimitView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingLimitPresenter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingNomalView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingNomalPresenter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingSetView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingSetPresenter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingGPSsetView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingGPSsetPresenter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingSetDistView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingSetDistPresenter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingSetSeptView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingSetSeptPresenter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingSetTimeView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingSetTimePresenter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingSetCaluliView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingSetCaluliPresenter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingControlView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingControlPresenter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingCardView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingCardPresenter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingDataView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingDataPresenter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingDetailView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingDetailPresenter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingEndnoteView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingEndnotePresenter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingEndnote2View.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingEndnote2Presenter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingEnddataView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingEnddataPresenter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingGPSView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingGPSPresenter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingGPSlackView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingGPSlackPresenter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingGPSnoteView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingGPSnotePresenter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingStrongView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingStrongPresenter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingGPSlostPresenter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingGPSlostView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingGPSbackPresenter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingGPSbackView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingWinView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingWinPresenter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/traing_card/Traing_CardView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traingrecord/src/TraingRecordView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traingrecord/src/TraingRecordPresenter.cpp
+
+
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/phone/src/PhoneView.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/phone/src/PhonePresenter.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/phone/src/PhoneCallView.cpp
index 0fbdd67..eb01650 100644 (file)
@@ -63,6 +63,32 @@ typedef enum : uint16_t
     VIEW_ROTATE,   // 模拟表冠
     VIEW_BLOODOXY, // 血氧饱和度界面
     VIEW_HEART,    // 心率监测
+    /* ----------------------------------- 训练 ----------------------------------- */
+    VIEW_TRAINING,          // 训练
+    VIEW_TRAININGMORE,      // 更多训练
+    VIEW_TRAININGLIMIT,     // 极限运动子列表
+    VIEW_TRAININGNOMAL,     // 正常训练开始界面(除骑行,健走,跑步外)
+    VIEW_TRAININGSET,       // 训练目标(时长,卡路里)
+    VIEW_TRAININGGPSSET,    // GPS训练目标(时长,距离,卡路里,步数)
+    VIEW_TRAININGSETTIME,   // 设置训练时长
+    VIEW_TRAININGSETCALULI, // 设置训练卡路里
+    VIEW_TRAININGSETDIST,   // 设置训练路程
+    VIEW_TRAININGSETSTEP,   // 设置训练步数
+    VIEW_TRAININGCRAD,      // 训练卡片
+    VIEW_TRAININGCONTROL,   // 训练控制(包括结束,暂停,继续训练)
+    VIEW_TRAININGDATA,      // 训练数据
+    VIEW_TRAININGDETAIL,    // 详细训练数据
+    VIEW_TRAININGENDNOTE,   // 结束训练提醒
+    VIEW_TRAININGENDNOTE2,  // 结束训练时间太短
+    VIEW_TRAININGENDDATA,   // 训练结束详细数据
+    VIEW_TRAININGGPS,       // GPS训练
+    VIEW_TRAININGGPSLACK,   // 缺少GPS
+    VIEW_TRAININGGPSNOTE,   // 连接GPS提醒
+    VIEW_TRAININGSTRONG,    // 训练强度介绍
+    VIEW_TRAININGGPSLOST,   // GPS断联
+    VIEW_TRAININGGPSBACK,   // GPS回连
+    VIEW_TRAININGWIN,       // 目标达成
+    VIEW_TRAINING_RECORD,   // 训练记录
     /* -------------------------------------------------------------------------- */
     VIEW_MAIN_TEMP,     // 体温界面(暂时不用)
     VIEW_OFFLINEVOICE,  // 语音助手界面(暂时不用)
@@ -76,7 +102,7 @@ typedef enum : uint16_t
     VIEW_PHONECALLUP,  // 通话界面
     VIEW_PHONEDIR,     // 电话簿
 
-    VIEW_TEST,  //测试
+    VIEW_TEST, // 测试
 /* -------------------------------------------------------------------------- */
 #ifdef SUPPORT_ALIPAY_SEC
     VIEW_MAIN_ALIPAY,
@@ -84,8 +110,7 @@ typedef enum : uint16_t
     VIEW_MAX_INTER_APP,       // 在此之前添加native应用ID.
     VIEW_EXTERN_APP = 0xFFFE, // 三方应用
     VIEW_INVALIDE_APP = 0xFFFF,
-}
-AppViewId;
+} AppViewId;
 
 /*
  * Slice页面优先级,越小优先级越高
index 5eb4ab5..8f3d529 100644 (file)
@@ -54,6 +54,33 @@ namespace OHOS
         void InitHeartSlice(void);
         void InitMainAlipaySlice(void);
         void InitDialUpdateSlice(void);
+        /* ----------------------------------- 训练 ----------------------------------- */
+        void InitTraingSlice(void);
+        void InitTraingMoreSlice(void);
+        void InitTraingLimitSlice(void);
+        void InitTraingNomalSlice(void);
+        void InitTraingSetSlice(void);
+        void InitTraingGPSSetSlice(void);
+        void InitTraingStrongSlice(void);
+        void InitTraingSetTimeSlice(void);
+        void InitTraingSetCaluliSlice(void);
+        void InitTraingSetDistSlice(void);
+        void InitTraingSetStepSlice(void);
+        void InitTraingControlSlice(void);
+        void InitTraingCardSlice(void);
+        void InitTraingDataSlice(void);
+        void InitTraingDetailSlice(void);
+        void InitTraingEndnoteSlice(void);
+        void InitTraingEndnote2Slice(void);
+        void InitTraingEnddataSlice(void);
+        void InitTraingGPSSlice(void);
+        void InitTraingGPSlackSlice(void);
+        void InitTraingGPSnoteSlice(void);
+        void InitTraingGPSlostSlice(void);
+        void InitTraingGPSbackSlice(void);
+        void InitTraingWinSlice(void);
+        /* -------------------------------------------------------------------------- */
+        void InitTraingRecordSlice(void);
         /* -------------------------------------------------------------------------- */
         void InitSecondaryFunction(void);
         void InitFastTrainingSlice(void);
@@ -66,8 +93,8 @@ namespace OHOS
         void InitPhoneCallupSlice(void);
         void InitPhoneRingSlice(void);
 
-        
         void InittestSlice(void);
+
     private:
         void InitAllNativeSlices(void);
 
index cbbeccd..85a4d8b 100644 (file)
@@ -146,76 +146,6 @@ namespace OHOS
     static constexpr const char *PNG_CHECK_TIME_IMAGE_19 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_20.bin";
     static constexpr const char *PNG_CHECK_TIME_IMAGE_20 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_21.bin";
     static constexpr const char *PNG_CHECK_TIME_IMAGE_21 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_22.bin";
-#if 0
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_22 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_23.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_23 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_24.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_24 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_25.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_25 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_26.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_26 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_27.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_27 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_28.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_28 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_29.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_29 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_30.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_30 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_31.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_31 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_32.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_32 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_33.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_33 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_34.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_34 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_35.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_35 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_36.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_36 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_37.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_37 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_38.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_38 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_39.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_39 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_40.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_40 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_41.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_41 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_42.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_42 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_43.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_43 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_44.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_44 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_45.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_45 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_46.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_46 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_47.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_47 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_48.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_48 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_49.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_49 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_50.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_50 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_51.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_51 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_52.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_52 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_53.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_53 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_54.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_54 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_55.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_55 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_56.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_56 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_57.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_57 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_58.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_58 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_59.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_59 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_60.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_60 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_61.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_61 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_62.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_62 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_63.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_63 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_64.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_64 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_65.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_65 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_66.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_66 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_67.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_67 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_68.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_68 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_69.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_69 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_70.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_70 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_71.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_71 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_72.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_72 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_73.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_73 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_74.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_74 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_75.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_75 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_76.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_76 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_77.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_77 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_78.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_78 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_79.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_79 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_80.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_80 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_81.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_81 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_82.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_82 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_83.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_83 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_84.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_84 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_85.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_85 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_86.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_86 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_87.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_87 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_88.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_88 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_89.bin";
-    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_89 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_90.bin";
-#endif
     /* -------------------------------------------------------------------------- */
     static constexpr const char *PNG_APPLIST_ALIPAY_IMAGE = APP_RES_PATH "/alipay/alipay_logo.bin"; // 支付宝
     static constexpr const char *PNG_ALIPAY_BIND_FAILURE = APP_RES_PATH "/alipay/ALIPAY_BIND_FAILURE.bin";
@@ -278,15 +208,17 @@ namespace OHOS
     static constexpr const char *PNG_A019_095_IMAGE_PATH = APP_RES_PATH "/BLUETOOTH_IMAGE_16.bin";
     static constexpr const char *PNG_BLUETOOTHEAR = APP_RES_PATH "/BLUETOOTHEAR.bin";
     /* --------------------------------- AppList -------------------------------- */
-    static constexpr const char *PNG_APPLIST_ALARM_IMAGE = APP_RES_PATH "/APPLIST_ALARM.bin";           // 闹钟
-    static constexpr const char *PNG_APPLIST_SPO2_IMAGE = APP_RES_PATH "/APPLIST_SPO2.bin";             // 血氧
-    static constexpr const char *PNG_APPLIST_HEART_IMAGE = APP_RES_PATH "/APPLIST_HEART.bin";           // 心率
-    static constexpr const char *PNG_APPLIST_SETTING_IMAGE = APP_RES_PATH "/APPLIST_SETTING.bin";       // 设置
-    static constexpr const char *PNG_APPLIST_CALLER_IMAGE = APP_RES_PATH "/APPLIST_CALLER_IMAGE.bin";   // 打电话
-    static constexpr const char *PNG_APPLIST_CALLLOG_IMAGE = APP_RES_PATH "/APPLIST_CALLLOG.bin";       // 通话记录
-    static constexpr const char *PNG_APPLIST_COMPASS_IMAGE = APP_RES_PATH "/APPLIST_COMPASS_IMAGE.bin"; // 指南针
-    static constexpr const char *PNG_APPLIST_WEATHER_IMAGE = APP_RES_PATH "/APPLIST_WEATHER_IMAGE.bin"; // 天气
-    static constexpr const char *PNG_APPLIST_RECORD_IMAGE = APP_RES_PATH "/APPLIST_RECORD_IMAGE.bin";   // 录音
+    static constexpr const char *PNG_APPLIST_ALARM_IMAGE = APP_RES_PATH "/APPLIST_ALARM.bin";                     // 闹钟
+    static constexpr const char *PNG_APPLIST_SPO2_IMAGE = APP_RES_PATH "/APPLIST_SPO2.bin";                       // 血氧
+    static constexpr const char *PNG_APPLIST_HEART_IMAGE = APP_RES_PATH "/APPLIST_HEART.bin";                     // 心率
+    static constexpr const char *PNG_APPLIST_SETTING_IMAGE = APP_RES_PATH "/APPLIST_SETTING.bin";                 // 设置
+    static constexpr const char *PNG_APPLIST_CALLER_IMAGE = APP_RES_PATH "/APPLIST_CALLER_IMAGE.bin";             // 打电话
+    static constexpr const char *PNG_APPLIST_CALLLOG_IMAGE = APP_RES_PATH "/APPLIST_CALLLOG.bin";                 // 通话记录
+    static constexpr const char *PNG_APPLIST_COMPASS_IMAGE = APP_RES_PATH "/APPLIST_COMPASS_IMAGE.bin";           // 指南针
+    static constexpr const char *PNG_APPLIST_WEATHER_IMAGE = APP_RES_PATH "/APPLIST_WEATHER_IMAGE.bin";           // 天气
+    static constexpr const char *PNG_APPLIST_RECORD_IMAGE = APP_RES_PATH "/APPLIST_RECORD_IMAGE.bin";             // 录音
+    static constexpr const char *PNG_APPLIST_TRAINING_IMAGE = APP_RES_PATH "/APPLIST_TRAINING.bin";               // 训练
+    static constexpr const char *PNG_APPLIST_TRAINING_RECORD_IMAGE = APP_RES_PATH "/APPLIST_TRAINING_RECORD.bin"; // 训练记录
     /* ---------------------------------- 快速训练 ---------------------------------- */
     static constexpr const char *PNG_TRAING_BOUTTONMORE_IMAGE = APP_RES_PATH "/Training/More.bin";
     static constexpr const char *PNG_TRAING_BUTTONGRONG_IMAGE = APP_RES_PATH "/Training/Bouttonground.bin";
index d85469b..e5d3dcc 100644 (file)
 #include "producttest/include/testPresenter.h"
 #include "producttest/include/testView.h"
 
+/* -------------------------------------------------------------------------- */
+#include "traing/include/TraingView.h"
+#include "traing/include/TraingPresenter.h"
+#include "traing/include/TraingMorePresenter.h"
+#include "traing/include/TraingMoreView.h"
+#include "traing/include/TraingLimitPresenter.h"
+#include "traing/include/TraingLimitView.h"
+#include "traing/include/TraingNomalPresenter.h"
+#include "traing/include/TraingNomalView.h"
+#include "traing/include/TraingSetPresenter.h"
+#include "traing/include/TraingSetView.h"
+#include "traing/include/TraingGPSsetPresenter.h"
+#include "traing/include/TraingGPSsetView.h"
+#include "traing/include/TraingSetTimePresenter.h"
+#include "traing/include/TraingSetTimeView.h"
+#include "traing/include/TraingSetCaluliPresenter.h"
+#include "traing/include/TraingSetCaluliView.h"
+#include "traing/include/TraingSetDistPresenter.h"
+#include "traing/include/TraingSetDistView.h"
+#include "traing/include/TraingSetSeptPresenter.h"
+#include "traing/include/TraingSetSeptView.h"
+#include "traing/include/TraingControlPresenter.h"
+#include "traing/include/TraingControlView.h"
+#include "traing/include/TraingCardPresenter.h"
+#include "traing/include/TraingCardView.h"
+#include "traing/include/TraingDataPresenter.h"
+#include "traing/include/TraingDataView.h"
+#include "traing/include/TraingDetailPresenter.h"
+#include "traing/include/TraingDetailView.h"
+#include "traing/include/TraingEndnotePresenter.h"
+#include "traing/include/TraingEndnoteView.h"
+#include "traing/include/TraingEndnote2Presenter.h"
+#include "traing/include/TraingEndnote2View.h"
+#include "traing/include/TraingEnddataPresenter.h"
+#include "traing/include/TraingEnddataView.h"
+#include "traing/include/TraingGPSPresenter.h"
+#include "traing/include/TraingGPSView.h"
+#include "traing/include/TraingGPSlackPresenter.h"
+#include "traing/include/TraingGPSlackView.h"
+#include "traing/include/TraingGPSnotePresenter.h"
+#include "traing/include/TraingGPSnoteView.h"
+#include "traing/include/TraingStrongPresenter.h"
+#include "traing/include/TraingStrongView.h"
+#include "traing/include/TraingGPSlostPresenter.h"
+#include "traing/include/TraingGPSlostView.h"
+#include "traing/include/TraingGPSbackPresenter.h"
+#include "traing/include/TraingGPSbackView.h"
+#include "traing/include/TraingWinPresenter.h"
+#include "traing/include/TraingWinView.h"
+
+#include "traingrecord/include/TraingRecordView.h"
+#include "traingrecord/include/TraingRecordPresenter.h"
+/* -------------------------------------------------------------------------- */
 
 #ifdef SUPPORT_ALIPAY_SEC
 #include "AlipayMainView.h"
@@ -175,14 +228,14 @@ namespace OHOS
         {VIEW_FAST_TRAINING_ATTENTION, &NativeLauncher::InitFastTrainingAttentionSlice},
 
         {VIEW_RECORD, &NativeLauncher::InitRecordingSlice}, // 录音实例化地址
-        
+
         {VIEW_MESSAGE, &NativeLauncher::InitMessageSlice},
         {VIEW_ROTATE, &NativeLauncher::InitRotateSlice},
         {VIEW_DIALUPDATE, &NativeLauncher::InitDialUpdateSlice},
         {VIEW_BLOODOXY, &NativeLauncher::InitMainBloodOxyView},
         {VIEW_HEART, &NativeLauncher::InitHeartSlice},
 
-        {VIEW_PHONE, &NativeLauncher::InitPhoneSlice},                                                         //电话
+        {VIEW_PHONE, &NativeLauncher::InitPhoneSlice}, // 电话
         {VIEW_PHONECALL, &NativeLauncher::InitPhoneCallSlice},
         {VIEW_PHONEDIR, &NativeLauncher::InitPhoneDirSlice},
         {VIEW_PHONECALLING, &NativeLauncher::InitPhoneCallingSlice},
@@ -190,7 +243,36 @@ namespace OHOS
         {VIEW_PHONERING, &NativeLauncher::InitPhoneRingSlice},
 
         {VIEW_TEST, &NativeLauncher::InittestSlice},
-        
+
+        /* ----------------------------------- 训练 ----------------------------------- */
+        {VIEW_TRAINING, &NativeLauncher::InitTraingSlice},                   // 训练
+        {VIEW_TRAININGMORE, &NativeLauncher::InitTraingMoreSlice},           // 更多训练
+        {VIEW_TRAININGLIMIT, &NativeLauncher::InitTraingLimitSlice},         // 极限训练
+        {VIEW_TRAININGNOMAL, &NativeLauncher::InitTraingNomalSlice},         // 正常训练初始界面
+        {VIEW_TRAININGSET, &NativeLauncher::InitTraingSetSlice},             // 训练目标设置界面
+        {VIEW_TRAININGGPSSET, &NativeLauncher::InitTraingGPSSetSlice},       // 训练GPS目标设置界面
+        {VIEW_TRAININGSETTIME, &NativeLauncher::InitTraingSetTimeSlice},     // 设置目标时长
+        {VIEW_TRAININGSETCALULI, &NativeLauncher::InitTraingSetCaluliSlice}, // 设置目标卡路里
+        {VIEW_TRAININGSETDIST, &NativeLauncher::InitTraingSetDistSlice},     // 设置目标距离
+        {VIEW_TRAININGSETSTEP, &NativeLauncher::InitTraingSetStepSlice},     // 设置目标步数
+        {VIEW_TRAININGCONTROL, &NativeLauncher::InitTraingControlSlice},     // 训练控制
+        {VIEW_TRAININGCRAD, &NativeLauncher::InitTraingCardSlice},           // 训练卡片
+        {VIEW_TRAININGDATA, &NativeLauncher::InitTraingDataSlice},           // 训练数据
+        {VIEW_TRAININGDETAIL, &NativeLauncher::InitTraingDetailSlice},       // 详细训练数据
+        {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}, // 训练目标达成
+    /* -------------------------------------------------------------------------- */
+
 #ifdef SUPPORT_ALIPAY_SEC
         {VIEW_MAIN_ALIPAY, &NativeLauncher::InitMainAlipaySlice},
 #endif
@@ -218,8 +300,7 @@ namespace OHOS
         {VIEW_PHONE, "phoneview"},
         {VIEW_INDOORWALK, "IndoorWalkView"},
         {VIEW_SHUTDOWN_OR_REBOOT, "RebootView"},
-        {VIEW_TEST, "testView"}
-        };
+        {VIEW_TEST, "testView"}};
 
     NativeLauncher::NativeLauncher() {}
     NativeLauncher::~NativeLauncher() {}
@@ -665,89 +746,215 @@ namespace OHOS
         NativeAbility::GetInstance().AddSliceProxy(VIEW_RECORD, record);
     }
 
-    
     void NativeLauncher::InitPhoneSlice(void)
-{
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitPhoneSlice");
-    SliceProxy *phoneview = new AbilitySliceProxy<PhoneView, PhonePresenter>;
-    if (phoneview == nullptr)
     {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneview");
-        return;
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitPhoneSlice");
+        SliceProxy *phoneview = new AbilitySliceProxy<PhoneView, PhonePresenter>;
+        if (phoneview == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneview");
+            return;
+        }
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_PHONE, phoneview);
     }
-    NativeAbility::GetInstance().AddSliceProxy(VIEW_PHONE, phoneview);
-}
 
-void NativeLauncher::InitPhoneCallSlice(void)
-{
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitPhoneCallSlice");
-    SliceProxy *phonecallview = new AbilitySliceProxy<PhoneCallView, PhoneCallPresenter>;
-    if (phonecallview == nullptr)
+    void NativeLauncher::InitPhoneCallSlice(void)
     {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phonecallview");
-        return;
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitPhoneCallSlice");
+        SliceProxy *phonecallview = new AbilitySliceProxy<PhoneCallView, PhoneCallPresenter>;
+        if (phonecallview == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phonecallview");
+            return;
+        }
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_PHONECALL, phonecallview);
     }
-    NativeAbility::GetInstance().AddSliceProxy(VIEW_PHONECALL, phonecallview);
-}
 
-void NativeLauncher::InitPhoneDirSlice(void)
-{
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitPhoneCallSlice");
-    SliceProxy *phonedirview = new AbilitySliceProxy<PhoneDirView, PhoneDirPresenter>;
-    if (phonedirview == nullptr)
+    void NativeLauncher::InitPhoneDirSlice(void)
     {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phonedirview");
-        return;
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitPhoneCallSlice");
+        SliceProxy *phonedirview = new AbilitySliceProxy<PhoneDirView, PhoneDirPresenter>;
+        if (phonedirview == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phonedirview");
+            return;
+        }
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_PHONEDIR, phonedirview);
     }
-    NativeAbility::GetInstance().AddSliceProxy(VIEW_PHONEDIR, phonedirview);
-}
 
-void NativeLauncher::InitPhoneCallingSlice(void)
-{
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitPhoneCallingSlice");
-    SliceProxy *phonecallingview = new AbilitySliceProxy<PhoneCallingView, PhoneCallingPresenter>;
-    if (phonecallingview == nullptr)
+    void NativeLauncher::InitPhoneCallingSlice(void)
     {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phonecallingview");
-        return;
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitPhoneCallingSlice");
+        SliceProxy *phonecallingview = new AbilitySliceProxy<PhoneCallingView, PhoneCallingPresenter>;
+        if (phonecallingview == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phonecallingview");
+            return;
+        }
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_PHONECALLING, phonecallingview);
     }
-    NativeAbility::GetInstance().AddSliceProxy(VIEW_PHONECALLING, phonecallingview);
-}
 
-void NativeLauncher::InitPhoneCallupSlice(void)
-{
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitPhoneCallupSlice");
-    SliceProxy *phonecallupview = new AbilitySliceProxy<PhoneCallupView, PhoneCallupPresenter>;
-    if (phonecallupview == nullptr)
+    void NativeLauncher::InitPhoneCallupSlice(void)
     {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phonecallview");
-        return;
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitPhoneCallupSlice");
+        SliceProxy *phonecallupview = new AbilitySliceProxy<PhoneCallupView, PhoneCallupPresenter>;
+        if (phonecallupview == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phonecallview");
+            return;
+        }
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_PHONECALLUP, phonecallupview);
     }
-    NativeAbility::GetInstance().AddSliceProxy(VIEW_PHONECALLUP, phonecallupview);
-}
 
-void NativeLauncher::InitPhoneRingSlice(void)
-{
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitPhoneRingSlice");
-    SliceProxy *phoneringview = new AbilitySliceProxy<PhoneRingView, PhoneRingPresenter>;
-    if (phoneringview == nullptr)
+    void NativeLauncher::InitPhoneRingSlice(void)
     {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneringview");
-        return;
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitPhoneRingSlice");
+        SliceProxy *phoneringview = new AbilitySliceProxy<PhoneRingView, PhoneRingPresenter>;
+        if (phoneringview == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneringview");
+            return;
+        }
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_PHONERING, phoneringview);
     }
-    NativeAbility::GetInstance().AddSliceProxy(VIEW_PHONERING, phoneringview);
-}
 
-void NativeLauncher::InittestSlice(void)
-{
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitestSlice");
-    SliceProxy *testview = new AbilitySliceProxy<testView,testPresenter>;
-    if (testview == nullptr)
+    void NativeLauncher::InittestSlice(void)
     {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneringview");
-        return;
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitestSlice");
+        SliceProxy *testview = new AbilitySliceProxy<testView, testPresenter>;
+        if (testview == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneringview");
+            return;
+        }
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_TEST, testview);
     }
-    NativeAbility::GetInstance().AddSliceProxy(VIEW_TEST, testview);
-}
-    
+    /* ---------------------------------- 训练UI ---------------------------------- */
+    // 体能训练
+    void NativeLauncher::InitTraingSlice(void)
+    {
+        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::InitTraingLimitSlice(void)
+    {
+        SliceProxy *trainglimitview = new AbilitySliceProxy<TraingLimitView, TraingLimitPresenter>;
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGLIMIT, trainglimitview);
+    }
+    void NativeLauncher::InitTraingNomalSlice(void)
+    {
+        SliceProxy *traingnomalview = new AbilitySliceProxy<TraingNomalView, TraingNomalPresenter>;
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGNOMAL, traingnomalview);
+    }
+    void NativeLauncher::InitTraingSetSlice(void)
+    {
+        SliceProxy *traingsetview = new AbilitySliceProxy<TraingSetView, TraingSetPresenter>;
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGSET, traingsetview);
+    }
+    void NativeLauncher::InitTraingGPSSetSlice(void)
+    {
+        SliceProxy *traingGPSsetview = new AbilitySliceProxy<TraingGPSsetView, TraingGPSsetPresenter>;
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGGPSSET, traingGPSsetview);
+    }
+    void NativeLauncher::InitTraingSetTimeSlice(void)
+    {
+        SliceProxy *traingsettimeview = new AbilitySliceProxy<TraingSetTimeView, TraingSetTimePresenter>;
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGSETTIME, traingsettimeview);
+    }
+    void NativeLauncher::InitTraingSetCaluliSlice(void)
+    {
+        SliceProxy *traingsetcaluliview = new AbilitySliceProxy<TraingSetCaluliView, TraingSetCaluliPresenter>;
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGSETCALULI, traingsetcaluliview);
+    }
+    void NativeLauncher::InitTraingSetDistSlice(void)
+    {
+        SliceProxy *traingsetdistview = new AbilitySliceProxy<TraingSetDistView, TraingSetDistPresenter>;
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGSETDIST, traingsetdistview);
+    }
+    void NativeLauncher::InitTraingSetStepSlice(void)
+    {
+        SliceProxy *traingsetstepview = new AbilitySliceProxy<TraingSetSeptView, TraingSetSeptPresenter>;
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGSETSTEP, traingsetstepview);
+    }
+    void NativeLauncher::InitTraingControlSlice(void)
+    {
+        SliceProxy *traingcontrolview = new AbilitySliceProxy<TraingControlView, TraingControlPresenter>;
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGCONTROL, traingcontrolview);
+    }
+    void NativeLauncher::InitTraingCardSlice(void)
+    {
+        SliceProxy *traingcardview = new AbilitySliceProxy<TraingCardView, TraingCardPresenter>;
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGCRAD, traingcardview);
+    }
+    void NativeLauncher::InitTraingDataSlice(void)
+    {
+        SliceProxy *traingdataview = new AbilitySliceProxy<TraingDataView, TraingDataPresenter>;
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGDATA, traingdataview);
+    }
+    void NativeLauncher::InitTraingDetailSlice(void)
+    {
+        SliceProxy *traingdetailview = new AbilitySliceProxy<TraingDetailView, TraingDetailPresenter>;
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGDETAIL, traingdetailview);
+    }
+    void NativeLauncher::InitTraingEndnoteSlice(void)
+    {
+        SliceProxy *traingendnoteview = new AbilitySliceProxy<TraingEndnoteView, TraingEndnotePresenter>;
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGENDNOTE, traingendnoteview);
+    }
+    void NativeLauncher::InitTraingEndnote2Slice(void)
+    {
+        SliceProxy *traingendnote2view = new AbilitySliceProxy<TraingEndnote2View, TraingEndnote2Presenter>;
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGENDNOTE2, traingendnote2view);
+    }
+    void NativeLauncher::InitTraingEnddataSlice(void)
+    {
+        SliceProxy *traingenddataview = new AbilitySliceProxy<TraingEnddataView, TraingEnddataPresenter>;
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGENDDATA, traingenddataview);
+    }
+    void NativeLauncher::InitTraingGPSSlice(void)
+    {
+        SliceProxy *traingGPSview = new AbilitySliceProxy<TraingGPSView, TraingGPSPresenter>;
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGGPS, traingGPSview);
+    }
+    void NativeLauncher::InitTraingGPSlackSlice(void)
+    {
+        SliceProxy *traingGPSlackview = new AbilitySliceProxy<TraingGPSlackView, TraingGPSlackPresenter>;
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGGPSLACK, traingGPSlackview);
+    }
+    void NativeLauncher::InitTraingGPSnoteSlice(void)
+    {
+        SliceProxy *traingGPSnoteview = new AbilitySliceProxy<TraingGPSnoteView, TraingGPSnotePresenter>;
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGGPSNOTE, traingGPSnoteview);
+    }
+    void NativeLauncher::InitTraingStrongSlice(void)
+    {
+        SliceProxy *traingStrongview = new AbilitySliceProxy<TraingStrongView, TraingStrongPresenter>;
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGSTRONG, traingStrongview);
+    }
+    void NativeLauncher::InitTraingGPSlostSlice(void)
+    {
+        SliceProxy *traingGPSlostview = new AbilitySliceProxy<TraingGPSlostView, TraingGPSlostPresenter>;
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGGPSLOST, traingGPSlostview);
+    }
+    void NativeLauncher::InitTraingGPSbackSlice(void)
+    {
+        SliceProxy *traingGPSbackview = new AbilitySliceProxy<TraingGPSbackView, TraingGPSbackPresenter>;
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_TRAININGGPSBACK, traingGPSbackview);
+    }
+    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);
+    }
+    /* -------------------------------------------------------------------------- */
 }
index 254aed5..149ca8f 100644 (file)
@@ -25,6 +25,8 @@ namespace OHOS
         {VIEW_COMPASS, PNG_APPLIST_COMPASS_IMAGE, PNG_APPLIST_COMPASS_IMAGE, "指南针", nullptr},
         {VIEW_INDOORWALK, PNG_APPLIST_WALK_IMAGE, PNG_APPLIST_WALK_IMAGE, "室内步行", nullptr},
         {VIEW_WEATHER, PNG_APPLIST_WEATHER_IMAGE, PNG_APPLIST_WEATHER_IMAGE, "天气", nullptr},
+        {VIEW_TRAINING, PNG_APPLIST_TRAINING_IMAGE, PNG_APPLIST_TRAINING_IMAGE, "体能训练", nullptr},
+        {VIEW_TRAINING_RECORD, PNG_APPLIST_TRAINING_RECORD_IMAGE, PNG_APPLIST_TRAINING_RECORD_IMAGE, "训练记录", nullptr},
         {VIEW_HEART, PNG_APPLIST_HEART_IMAGE, PNG_APPLIST_HEART_IMAGE, "心率检测", nullptr},
         {VIEW_RECORD, PNG_APPLIST_RECORD_IMAGE, PNG_APPLIST_RECORD_IMAGE, "录音", nullptr},
         {VIEW_SETTING, PNG_APPLIST_SETTING_IMAGE, PNG_APPLIST_SETTING_IMAGE, "设置", nullptr},
index c124cf0..7c16fdf 100644 (file)
@@ -34,7 +34,7 @@
 #include "components/ui_cross_view.h"
 
 #include "heart_blood/include/BloodCardView.h"
-#include "traing/include/TraingView.h"
+#include "traing/traing_card/Traing_CardView.h"
 #include "ApplistCardView.h"
 #include "weather/include/WeatherControlView.h"
 #include "message/include/MessageCardView.h"
@@ -113,7 +113,7 @@ namespace OHOS
         HeartRateView *heartRateView{nullptr};
         BloodCardView *bloodView{nullptr};
         WeatherControlView *weatherControlView{nullptr};
-        TraingView *traingView{nullptr};
+        Traing_CardView *traingView{nullptr};
         ApplistCardView *applistCardView{nullptr};
         UIButton *changebut{nullptr};
         /* -------------------------------------------------------------------------- */
index a7c4fcb..27540aa 100644 (file)
@@ -32,7 +32,7 @@ namespace OHOS
         {BloodOxygen, &MainViewSample::InitBloodOxygenPage},
         {TRAINING, &MainViewSample::InitTrainingPage},
         {COMPASS, &MainViewSample::InitCompassPage},
-        {WEATHER, &MainViewSample::InitWeatherPage},
+        //{WEATHER, &MainViewSample::InitWeatherPage},
         {MUSIC_PLAYER, &MainViewSample::InitMusicPlayerPage},
 #if 0
         {APPLIST,&MainViewSample::InitApplistPage}
@@ -417,7 +417,7 @@ namespace OHOS
     // 主界面训练卡片
     UICardPage *MainViewSample::InitTrainingPage(void)
     {
-        traingView = new TraingView();
+        traingView = new Traing_CardView();
         if (traingView == nullptr)
         {
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "traingView new fail");
index b91515d..ccb600a 100644 (file)
@@ -21,7 +21,7 @@ namespace OHOS
         TRAINING,
         BloodOxygen,
         COMPASS,
-        WEATHER,
+        // WEATHER,
         MUSIC_PLAYER,
         // APPLIST,
         MAX_CARD,
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingCardPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingCardPresenter.h
new file mode 100644 (file)
index 0000000..d011868
--- /dev/null
@@ -0,0 +1,32 @@
+#ifndef _TraingCard_PRESENTER_H\r
+#define _TraingCard_PRESENTER_H\r
+\r
+#include "Presenter.h"\r
+#include "TraingCardView.h"\r
+\r
+namespace OHOS\r
+{\r
+    class TraingCardView;\r
+\r
+    class TraingCardPresenter : public Presenter<TraingCardView>,\r
+                                 public UIView::OnClickListener,\r
+                                 public UIView::OnDragListener\r
+    {\r
+    public:\r
+        TraingCardPresenter();\r
+        virtual ~TraingCardPresenter();\r
+\r
+        void OnStart() override;\r
+        void OnPause() override;\r
+        void OnResume() override;\r
+        void OnStop() override;\r
+        static TraingCardPresenter *GetInstance();\r
+\r
+    private:\r
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;\r
+        bool OnClick(UIView &view, const ClickEvent &event) override;\r
+        bool OnDrag(UIView &view, const DragEvent &event) override;\r
+    };\r
+} // namespace OHOS\r
+\r
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingCardView.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingCardView.h
new file mode 100644 (file)
index 0000000..bdf142e
--- /dev/null
@@ -0,0 +1,63 @@
+#ifndef _TraingCard_VIEW_H\r
+#define _TraingCard_VIEW_H\r
+\r
+#include "BaseView.h"\r
+#include "View.h"\r
+#include <ui_scroll_view.h>\r
+#include "components/ui_view_group.h"\r
+#include "components/ui_label.h"\r
+#include "components/ui_image_view.h"\r
+#include "components/ui_button.h"\r
+#include "components/ui_image_animator.h"\r
+#include "components/ui_label_button_ext.h"\r
+#include "components/ui_chart.h"\r
+#include "components/ui_list.h"\r
+#include "components/icon_adapter.h"\r
+#include "wearable_log.h"\r
+#include "ohos_types.h"\r
+#include "components/ui_card_page.h"\r
+#include "components/ui_swipe_view.h"\r
+\r
+#include "TraingCardPresenter.h"\r
+namespace OHOS\r
+{\r
+    class TraingCardPresenter;\r
+    class TraingCardView : public View<TraingCardPresenter>\r
+    {\r
+\r
+    public:\r
+        TraingCardView();\r
+        virtual ~TraingCardView();\r
+        static TraingCardView *GetInstance(void);\r
+        \r
+        void OnStart() override;\r
+        void OnSetUpView() override;\r
+        void OnTearDownView() override;\r
+        void OnStop() override;\r
+        void InitView();\r
+        void DeInit();\r
+        void InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize);\r
+        void InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId);\r
+        void InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath);\r
+        void InitList();\r
+        void PreLoad(void);\r
+\r
+        // 通过函数改变\r
+        void SetLabel();\r
+        void SetButton();\r
+\r
+    private:\r
+        UIView::OnDragListener *draglistener{nullptr};\r
+        TraingCardView(TraingCardView &&) = delete;\r
+        TraingCardView &operator=(TraingCardView &&) = delete;\r
+\r
+        UISwipeView *swipe_ = nullptr;\r
+\r
+        UILabel *label1_ = nullptr;\r
+        UILabel *label2_ = nullptr;\r
+        UILabel *label3_ = nullptr;\r
+\r
+        bool viewiInitStatus{false};\r
+    };\r
+} // namespace OHOS\r
+#endif // TraingCard_PRESENTER_H\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingControlPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingControlPresenter.h
new file mode 100644 (file)
index 0000000..c1ebbfd
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef _TraingControl_PRESENTER_H\r
+#define _TraingControl_PRESENTER_H\r
+\r
+#include "Presenter.h"\r
+#include "TraingControlView.h"\r
+\r
+namespace OHOS\r
+{\r
+    class TraingControlView;\r
+\r
+    class TraingControlPresenter : public Presenter<TraingControlView>,\r
+                                 public UIView::OnClickListener,\r
+                                 public UIView::OnDragListener\r
+    {\r
+    public:\r
+        TraingControlPresenter();\r
+        virtual ~TraingControlPresenter();\r
+\r
+        void OnStart() override;\r
+        void OnPause() override;\r
+        void OnResume() override;\r
+        void OnStop() override;\r
+        std::string test = "暂停";\r
+        static TraingControlPresenter *GetInstance();\r
+\r
+    private:\r
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;\r
+        bool OnClick(UIView &view, const ClickEvent &event) override;\r
+        bool OnDrag(UIView &view, const DragEvent &event) override;\r
+    };\r
+} // namespace OHOS\r
+\r
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingControlView.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingControlView.h
new file mode 100644 (file)
index 0000000..e96e781
--- /dev/null
@@ -0,0 +1,76 @@
+#ifndef _TraingControl_VIEW_H\r
+#define _TraingControl_VIEW_H\r
+\r
+#include "BaseView.h"\r
+#include "View.h"\r
+#include <ui_scroll_view.h>\r
+#include "components/ui_view_group.h"\r
+#include "components/ui_label.h"\r
+#include "components/ui_image_view.h"\r
+#include "components/ui_button.h"\r
+#include "components/ui_image_animator.h"\r
+#include "components/ui_label_button_ext.h"\r
+#include "components/ui_chart.h"\r
+#include "components/ui_list.h"\r
+#include "components/icon_adapter.h"\r
+#include "wearable_log.h"\r
+#include "ohos_types.h"\r
+#include "components/ui_card_page.h"\r
+\r
+#include "TraingControlPresenter.h"\r
+namespace OHOS\r
+{\r
+#define BUTTONSTOP  "button1"\r
+#define BUTTONPAUSE "button2"\r
+#define BUTTONCONTINUE "button3"\r
+\r
+#define BUTTON_PAUSE_IMG_SRC "/user/res/Training/sport-pause.bin"\r
+#define BUTTON_STOP_IMG_SRC "/user/res/Training/sport-stop.bin"\r
+#define BUTTON_CONTINUE_IMG_SRC "/user/res/Training/sport-continue.bin"\r
+\r
+    class TraingControlPresenter;\r
+    class TraingControlView : public View<TraingControlPresenter>\r
+    {\r
+\r
+    public:\r
+        TraingControlView();\r
+        virtual ~TraingControlView();\r
+        static TraingControlView *GetInstance(void);\r
+\r
+        void OnStart() override;\r
+        void OnSetUpView() override;\r
+        void OnTearDownView() override;\r
+        void OnStop() override;\r
+        void InitView();\r
+        void DeInit();\r
+        void InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize);\r
+        void InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId);\r
+        void InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath);\r
+        void InitList();\r
+        void PreLoad(void);\r
+\r
+        //通过函数改变\r
+        void SetLabel();\r
+        void SetButton();\r
+\r
+    private:\r
+        UIView::OnDragListener *draglistener{nullptr};\r
+        TraingControlView(TraingControlView &&) = delete;\r
+        TraingControlView &operator=(TraingControlView &&) = delete;\r
+\r
+        UIViewGroup *container_ = nullptr;\r
+\r
+        UILabel *label1_ = nullptr;\r
+        UILabel *label2_ = nullptr;\r
+        UILabel *label3_ = nullptr;\r
+        UILabel *label4_ = nullptr;\r
+\r
+        UIImageView *image1_ = nullptr;\r
+\r
+        UIButton *button1_ = nullptr;\r
+        UIButton *button2_ = nullptr;\r
+\r
+        bool viewiInitStatus{false};\r
+    };\r
+} // namespace OHOS\r
+#endif // TraingControl_PRESENTER_H\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingDataPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingDataPresenter.h
new file mode 100644 (file)
index 0000000..256325e
--- /dev/null
@@ -0,0 +1,32 @@
+#ifndef _TraingData_PRESENTER_H\r
+#define _TraingData_PRESENTER_H\r
+\r
+#include "Presenter.h"\r
+#include "TraingDataView.h"\r
+\r
+namespace OHOS\r
+{\r
+    class TraingDataView;\r
+\r
+    class TraingDataPresenter : public Presenter<TraingDataView>,\r
+                                public UIView::OnClickListener,\r
+                                public UIView::OnDragListener\r
+    {\r
+    public:\r
+        TraingDataPresenter();\r
+        virtual ~TraingDataPresenter();\r
+\r
+        void OnStart() override;\r
+        void OnPause() override;\r
+        void OnResume() override;\r
+        void OnStop() override;\r
+        static TraingDataPresenter *GetInstance();\r
+\r
+    private:\r
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;\r
+        bool OnClick(UIView &view, const ClickEvent &event) override;\r
+        bool OnDrag(UIView &view, const DragEvent &event) override;\r
+    };\r
+} // namespace OHOS\r
+\r
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingDataView.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingDataView.h
new file mode 100644 (file)
index 0000000..c782f94
--- /dev/null
@@ -0,0 +1,75 @@
+#ifndef _TraingData_VIEW_H\r
+#define _TraingData_VIEW_H\r
+\r
+#include "BaseView.h"\r
+#include "View.h"\r
+#include <ui_scroll_view.h>\r
+#include "components/ui_view_group.h"\r
+#include "components/ui_label.h"\r
+#include "components/ui_image_view.h"\r
+#include "components/ui_button.h"\r
+#include "components/ui_image_animator.h"\r
+#include "components/ui_label_button_ext.h"\r
+#include "components/ui_chart.h"\r
+#include "components/ui_list.h"\r
+#include "components/icon_adapter.h"\r
+#include "wearable_log.h"\r
+#include "ohos_types.h"\r
+#include "components/ui_card_page.h"\r
+\r
+#include "TraingDataPresenter.h"\r
+namespace OHOS\r
+{\r
+#define BUTTONNOTE "button1"\r
+\r
+\r
+    class TraingDataPresenter;\r
+    class TraingDataView : public View<TraingDataPresenter>\r
+    {\r
+\r
+    public:\r
+        TraingDataView();\r
+        virtual ~TraingDataView();\r
+        static TraingDataView *GetInstance(void);\r
+\r
+        void OnStart() override;\r
+        void OnSetUpView() override;\r
+        void OnTearDownView() override;\r
+        void OnStop() override;\r
+        void InitView();\r
+        void DeInit();\r
+        void InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize);\r
+        void InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId);\r
+        void InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath);\r
+        void InitList();\r
+        void PreLoad(void);\r
+\r
+        // 通过函数改变\r
+        void SetLabel();\r
+        void SetButton();\r
+\r
+    private:\r
+        UIView::OnDragListener *draglistener{nullptr};\r
+        TraingDataView(TraingDataView &&) = delete;\r
+        TraingDataView &operator=(TraingDataView &&) = delete;\r
+\r
+        UIViewGroup *container_ = nullptr;\r
+\r
+        UILabel *label1_ = nullptr;\r
+        UILabel *label2_ = nullptr;\r
+        UILabel *label3_ = nullptr;\r
+        UILabel *label4_ = nullptr;\r
+        UILabel *label5_ = nullptr;\r
+\r
+        UIImageView *image1_ = nullptr;\r
+        UIImageView *image2_ = nullptr;\r
+        UIImageView *image3_ = nullptr;\r
+        UIImageView *image4_ = nullptr;\r
+        UIImageView *image5_ = nullptr;\r
+        UIImageView *image6_ = nullptr;\r
+\r
+        UIButton *button1_ = nullptr;\r
+        bool viewiInitStatus{false};\r
+    };\r
+} // namespace OHOS\r
+#endif // TraingData_PRESENTER_H\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingDetailPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingDetailPresenter.h
new file mode 100644 (file)
index 0000000..351c7e3
--- /dev/null
@@ -0,0 +1,32 @@
+#ifndef _TraingDetail_PRESENTER_H\r
+#define _TraingDetail_PRESENTER_H\r
+\r
+#include "Presenter.h"\r
+#include "TraingDetailView.h"\r
+\r
+namespace OHOS\r
+{\r
+    class TraingDetailView;\r
+\r
+    class TraingDetailPresenter : public Presenter<TraingDetailView>,\r
+                                public UIView::OnClickListener,\r
+                                public UIView::OnDragListener\r
+    {\r
+    public:\r
+        TraingDetailPresenter();\r
+        virtual ~TraingDetailPresenter();\r
+\r
+        void OnStart() override;\r
+        void OnPause() override;\r
+        void OnResume() override;\r
+        void OnStop() override;\r
+        static TraingDetailPresenter *GetInstance();\r
+\r
+    private:\r
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;\r
+        bool OnClick(UIView &view, const ClickEvent &event) override;\r
+        bool OnDrag(UIView &view, const DragEvent &event) override;\r
+    };\r
+} // namespace OHOS\r
+\r
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingDetailView.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingDetailView.h
new file mode 100644 (file)
index 0000000..735c997
--- /dev/null
@@ -0,0 +1,75 @@
+#ifndef _TraingDetail_VIEW_H\r
+#define _TraingDetail_VIEW_H\r
+\r
+#include "BaseView.h"\r
+#include "View.h"\r
+#include <ui_scroll_view.h>\r
+#include "components/ui_view_group.h"\r
+#include "components/ui_label.h"\r
+#include "components/ui_image_view.h"\r
+#include "components/ui_button.h"\r
+#include "components/ui_image_animator.h"\r
+#include "components/ui_label_button_ext.h"\r
+#include "components/ui_chart.h"\r
+#include "components/ui_list.h"\r
+#include "components/icon_adapter.h"\r
+#include "wearable_log.h"\r
+#include "ohos_types.h"\r
+#include "components/ui_card_page.h"\r
+\r
+#include "TraingDetailPresenter.h"\r
+namespace OHOS\r
+{\r
+    class TraingDetailPresenter;\r
+    class TraingDetailView : public View<TraingDetailPresenter>\r
+    {\r
+\r
+    public:\r
+        TraingDetailView();\r
+        virtual ~TraingDetailView();\r
+        static TraingDetailView *GetInstance(void);\r
+\r
+        void OnStart() override;\r
+        void OnSetUpView() override;\r
+        void OnTearDownView() override;\r
+        void OnStop() override;\r
+        void InitView();\r
+        void DeInit();\r
+        void InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize);\r
+        void InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId);\r
+        void InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath);\r
+        void InitList();\r
+        void PreLoad(void);\r
+\r
+        // 通过函数改变\r
+        void SetLabel();\r
+        void SetButton();\r
+\r
+    private:\r
+        UIView::OnDragListener *draglistener{nullptr};\r
+        TraingDetailView(TraingDetailView &&) = delete;\r
+        TraingDetailView &operator=(TraingDetailView &&) = delete;\r
+\r
+        UIViewGroup *container_ = nullptr;\r
+\r
+        UILabel *label1_ = nullptr;\r
+        UILabel *label2_ = nullptr;\r
+        UILabel *label3_ = nullptr;\r
+        UILabel *label4_ = nullptr;\r
+        UILabel *label5_ = nullptr;\r
+        UILabel *label6_ = nullptr;\r
+        UILabel *label7_ = nullptr;\r
+        UILabel *label8_ = nullptr;\r
+\r
+        UIImageView *image1_ = nullptr;\r
+        UIImageView *image2_ = nullptr;\r
+        UIImageView *image3_ = nullptr;\r
+        UIImageView *image4_ = nullptr;\r
+        UIImageView *image5_ = nullptr;\r
+        UIImageView *image6_ = nullptr;\r
+        UIImageView *image7_ = nullptr;\r
+\r
+        bool viewiInitStatus{false};\r
+    };\r
+} // namespace OHOS\r
+#endif // TraingDetail_PRESENTER_H\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEnddataPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEnddataPresenter.h
new file mode 100644 (file)
index 0000000..c7877fb
--- /dev/null
@@ -0,0 +1,32 @@
+#ifndef _TraingEnddata_PRESENTER_H
+#define _TraingEnddata_PRESENTER_H
+
+#include "Presenter.h"
+#include "TraingEnddataView.h"
+
+namespace OHOS
+{
+    class TraingEnddataView;
+
+    class TraingEnddataPresenter : public Presenter<TraingEnddataView>,
+                                public UIView::OnClickListener,
+                                public UIView::OnDragListener
+    {
+    public:
+        TraingEnddataPresenter();
+        virtual ~TraingEnddataPresenter();
+
+        void OnStart() override;
+        void OnPause() override;
+        void OnResume() override;
+        void OnStop() override;
+        static TraingEnddataPresenter *GetInstance();
+
+    private:
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;
+        bool OnClick(UIView &view, const ClickEvent &event) override;
+        bool OnDrag(UIView &view, const DragEvent &event) override;
+    };
+} // namespace OHOS
+
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEnddataView.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEnddataView.h
new file mode 100644 (file)
index 0000000..56c9294
--- /dev/null
@@ -0,0 +1,95 @@
+#ifndef _TraingEnddata_VIEW_H
+#define _TraingEnddata_VIEW_H
+
+#include "BaseView.h"
+#include "View.h"
+#include <ui_scroll_view.h>
+#include "components/ui_view_group.h"
+#include "components/ui_label.h"
+#include "components/ui_image_view.h"
+#include "components/ui_button.h"
+#include "components/ui_image_animator.h"
+#include "components/ui_label_button_ext.h"
+#include "components/ui_chart.h"
+#include "components/ui_list.h"
+#include "components/icon_adapter.h"
+#include "wearable_log.h"
+#include "ohos_types.h"
+#include "components/ui_card_page.h"
+
+#include "TraingEnddataPresenter.h"
+namespace OHOS
+{
+#define BUTTONBACK "button1"
+
+    class TraingEnddataPresenter;
+    class TraingEnddataView : public View<TraingEnddataPresenter>
+    {
+
+    public:
+        TraingEnddataView();
+        virtual ~TraingEnddataView();
+        static TraingEnddataView *GetInstance(void);
+
+        void OnStart() override;
+        void OnSetUpView() override;
+        void OnTearDownView() override;
+        void OnStop() override;
+        void InitView();
+        void DeInit();
+        void InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize);
+        void InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId);
+        void InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath);
+        void InitList();
+        void PreLoad(void);
+
+        // 通过函数改变
+        void SetLabel();
+        void SetButton();
+
+    private:
+        UIView::OnDragListener *draglistener{nullptr};
+        TraingEnddataView(TraingEnddataView &&) = delete;
+        TraingEnddataView &operator=(TraingEnddataView &&) = delete;
+
+        UIViewGroup *container_ = nullptr;
+        UIScrollView *scrollView1_ = nullptr;
+
+        UILabel *label1_ = nullptr;
+        UILabel *label2_ = nullptr;
+        UILabel *label3_ = nullptr;
+        UILabel *label4_ = nullptr;
+        UILabel *label5_ = nullptr;
+        UILabel *label6_ = nullptr;
+        UILabel *label7_ = nullptr;
+        UILabel *label8_ = nullptr;
+        UILabel *label9_ = nullptr;
+        UILabel *label10_ = nullptr;
+        UILabel *label11_ = nullptr;
+        UILabel *label12_ = nullptr;
+        UILabel *label13_ = nullptr;
+        UILabel *label14_ = nullptr;
+        UILabel *label15_ = nullptr;
+        UILabel *label16_ = nullptr;
+        UILabel *label17_ = nullptr;
+        UILabel *label18_ = nullptr;
+        UILabel *label19_ = nullptr;
+
+        UIButton *button1_ = nullptr;
+
+        UIImageView *image1_ = nullptr;
+        UIImageView *image2_ = nullptr;
+        UIImageView *image3_ = nullptr;
+        UIImageView *image4_ = nullptr;
+        UIImageView *image5_ = nullptr;
+        UIImageView *image6_ = nullptr;
+        UIImageView *image7_ = nullptr;
+        UIImageView *image8_ = nullptr;
+        UIImageView *image9_ = nullptr;
+        UIImageView *image10_ = nullptr;
+        UIImageView *image11_ = nullptr;
+
+        bool viewiInitStatus{false};
+    };
+} // namespace OHOS
+#endif // TraingEnddata_PRESENTER_H
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEndnote2Presenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEndnote2Presenter.h
new file mode 100644 (file)
index 0000000..4b4ef7b
--- /dev/null
@@ -0,0 +1,32 @@
+#ifndef _TraingEndnote2_PRESENTER_H
+#define _TraingEndnote2_PRESENTER_H
+
+#include "Presenter.h"
+#include "TraingEndnote2View.h"
+
+namespace OHOS
+{
+    class TraingEndnote2View;
+
+    class TraingEndnote2Presenter : public Presenter<TraingEndnote2View>,
+                                public UIView::OnClickListener,
+                                public UIView::OnDragListener
+    {
+    public:
+        TraingEndnote2Presenter();
+        virtual ~TraingEndnote2Presenter();
+
+        void OnStart() override;
+        void OnPause() override;
+        void OnResume() override;
+        void OnStop() override;
+        static TraingEndnote2Presenter *GetInstance();
+
+    private:
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;
+        bool OnClick(UIView &view, const ClickEvent &event) override;
+        bool OnDrag(UIView &view, const DragEvent &event) override;
+    };
+} // namespace OHOS
+
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEndnote2View.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEndnote2View.h
new file mode 100644 (file)
index 0000000..baee7a4
--- /dev/null
@@ -0,0 +1,66 @@
+#ifndef _TraingEndnote2_VIEW_H
+#define _TraingEndnote2_VIEW_H
+
+#include "BaseView.h"
+#include "View.h"
+#include <ui_scroll_view.h>
+#include "components/ui_view_group.h"
+#include "components/ui_label.h"
+#include "components/ui_image_view.h"
+#include "components/ui_button.h"
+#include "components/ui_image_animator.h"
+#include "components/ui_label_button_ext.h"
+#include "components/ui_chart.h"
+#include "components/ui_list.h"
+#include "components/icon_adapter.h"
+#include "wearable_log.h"
+#include "ohos_types.h"
+#include "components/ui_card_page.h"
+
+#include "TraingEndnote2Presenter.h"
+namespace OHOS
+{
+#define BUTTONNO "button1"
+#define BUTTONYES "button2"
+
+    class TraingEndnote2Presenter;
+    class TraingEndnote2View : public View<TraingEndnote2Presenter>
+    {
+
+    public:
+        TraingEndnote2View();
+        virtual ~TraingEndnote2View();
+        static TraingEndnote2View *GetInstance(void);
+
+        void OnStart() override;
+        void OnSetUpView() override;
+        void OnTearDownView() override;
+        void OnStop() override;
+        void InitView();
+        void DeInit();
+        void InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize);
+        void InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId);
+        void InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath);
+        void InitList();
+        void PreLoad(void);
+
+        // 通过函数改变
+        void SetLabel();
+        void SetButton();
+
+    private:
+        UIView::OnDragListener *draglistener{nullptr};
+        TraingEndnote2View(TraingEndnote2View &&) = delete;
+        TraingEndnote2View &operator=(TraingEndnote2View &&) = delete;
+
+        UIViewGroup *container_ = nullptr;
+
+        UILabel *label1_ = nullptr;
+        UILabel *label2_ = nullptr;
+
+        UIButton *button1_ = nullptr;
+        UIButton *button2_ = nullptr;
+        bool viewiInitStatus{false};
+    };
+} // namespace OHOS
+#endif // TraingEndnote2_PRESENTER_H
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEndnotePresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEndnotePresenter.h
new file mode 100644 (file)
index 0000000..428b3d0
--- /dev/null
@@ -0,0 +1,32 @@
+#ifndef _TraingEndnote_PRESENTER_H
+#define _TraingEndnote_PRESENTER_H
+
+#include "Presenter.h"
+#include "TraingEndnoteView.h"
+
+namespace OHOS
+{
+    class TraingEndnoteView;
+
+    class TraingEndnotePresenter : public Presenter<TraingEndnoteView>,
+                                public UIView::OnClickListener,
+                                public UIView::OnDragListener
+    {
+    public:
+        TraingEndnotePresenter();
+        virtual ~TraingEndnotePresenter();
+
+        void OnStart() override;
+        void OnPause() override;
+        void OnResume() override;
+        void OnStop() override;
+        static TraingEndnotePresenter *GetInstance();
+
+    private:
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;
+        bool OnClick(UIView &view, const ClickEvent &event) override;
+        bool OnDrag(UIView &view, const DragEvent &event) override;
+    };
+} // namespace OHOS
+
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEndnoteView.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEndnoteView.h
new file mode 100644 (file)
index 0000000..243b521
--- /dev/null
@@ -0,0 +1,66 @@
+#ifndef _TraingEndnote_VIEW_H
+#define _TraingEndnote_VIEW_H
+
+#include "BaseView.h"
+#include "View.h"
+#include <ui_scroll_view.h>
+#include "components/ui_view_group.h"
+#include "components/ui_label.h"
+#include "components/ui_image_view.h"
+#include "components/ui_button.h"
+#include "components/ui_image_animator.h"
+#include "components/ui_label_button_ext.h"
+#include "components/ui_chart.h"
+#include "components/ui_list.h"
+#include "components/icon_adapter.h"
+#include "wearable_log.h"
+#include "ohos_types.h"
+#include "components/ui_card_page.h"
+
+#include "TraingEndnotePresenter.h"
+namespace OHOS
+{
+#define BUTTONNO "button1"
+#define BUTTONYES "button2"
+
+    class TraingEndnotePresenter;
+    class TraingEndnoteView : public View<TraingEndnotePresenter>
+    {
+
+    public:
+        TraingEndnoteView();
+        virtual ~TraingEndnoteView();
+        static TraingEndnoteView *GetInstance(void);
+
+        void OnStart() override;
+        void OnSetUpView() override;
+        void OnTearDownView() override;
+        void OnStop() override;
+        void InitView();
+        void DeInit();
+        void InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize);
+        void InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId);
+        void InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath);
+        void InitList();
+        void PreLoad(void);
+
+        // 通过函数改变
+        void SetLabel();
+        void SetButton();
+
+    private:
+        UIView::OnDragListener *draglistener{nullptr};
+        TraingEndnoteView(TraingEndnoteView &&) = delete;
+        TraingEndnoteView &operator=(TraingEndnoteView &&) = delete;
+
+        UIViewGroup *container_ = nullptr;
+
+        UILabel *label1_ = nullptr;
+        UILabel *label2_ = nullptr;
+
+        UIButton *button1_ = nullptr;
+        UIButton *button2_ = nullptr;
+        bool viewiInitStatus{false};
+    };
+} // namespace OHOS
+#endif // TraingEndnote_PRESENTER_H
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSPresenter.h
new file mode 100644 (file)
index 0000000..aa6055e
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef _TraingGPS_PRESENTER_H
+#define _TraingGPS_PRESENTER_H
+
+#include "Presenter.h"
+#include "TraingGPSView.h"
+
+namespace OHOS
+{
+    class TraingGPSView;
+
+    class TraingGPSPresenter : public Presenter<TraingGPSView>,
+                                 public UIView::OnClickListener,
+                                 public UIView::OnDragListener
+    {
+    public:
+        TraingGPSPresenter();
+        virtual ~TraingGPSPresenter();
+
+        void OnStart() override;
+        void OnPause() override;
+        void OnResume() override;
+        void OnStop() override;
+
+        static TraingGPSPresenter *GetInstance();
+
+    private:
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;
+        bool OnClick(UIView &view, const ClickEvent &event) override;
+        bool OnDrag(UIView &view, const DragEvent &event) override;
+    };
+} // namespace OHOS
+
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSView.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSView.h
new file mode 100644 (file)
index 0000000..4fa4616
--- /dev/null
@@ -0,0 +1,64 @@
+#ifndef _TraingGPS_VIEW_H
+#define _TraingGPS_VIEW_H
+
+#include "BaseView.h"
+#include "View.h"
+#include <ui_scroll_view.h>
+#include "components/ui_view_group.h"
+#include "components/ui_label.h"
+#include "components/ui_image_view.h"
+#include "components/ui_button.h"
+#include "components/ui_image_animator.h"
+#include "components/ui_label_button_ext.h"
+#include "components/ui_chart.h"
+#include "components/ui_list.h"
+#include "components/icon_adapter.h"
+#include "wearable_log.h"
+#include "ohos_types.h"
+#include "components/ui_card_page.h"
+
+#include "TraingGPSPresenter.h"
+namespace OHOS
+{
+#define BUTTONGO "button1"
+#define BUTTONSET "button2"
+
+    class TraingGPSPresenter;
+    class TraingGPSView : public View<TraingGPSPresenter>
+    {
+
+    public:
+        TraingGPSView();
+        virtual ~TraingGPSView();
+        static TraingGPSView *GetInstance(void);
+
+        void OnStart() override;
+        void OnSetUpView() override;
+        void OnTearDownView() override;
+        void OnStop() override;
+        void InitView();
+        void DeInit();
+        void InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize);
+        void InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId);
+        void InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath);
+        void InitList();
+        void PreLoad(void);
+
+    private:
+        UIView::OnDragListener *draglistener{nullptr};
+        TraingGPSView(TraingGPSView &&) = delete;
+        TraingGPSView &operator=(TraingGPSView &&) = delete;
+
+        UIViewGroup *container_ = nullptr;
+        UILabel *label1_ = nullptr;
+        UILabel *label2_ = nullptr;
+        UILabel *label3_ = nullptr;
+        UILabel *label4_ = nullptr;
+        UIButton *button1_ = nullptr;
+        UIButton *button2_ = nullptr;
+        UIImageView *image1_ = nullptr;
+        UIImageView *image2_ = nullptr;
+        bool viewiInitStatus{false};
+    };
+} // namespace OHOS
+#endif // TraingGPS_PRESENTER_H
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSbackPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSbackPresenter.h
new file mode 100644 (file)
index 0000000..306df22
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef _TraingGPSback_PRESENTER_H
+#define _TraingGPSback_PRESENTER_H
+
+#include "Presenter.h"
+#include "TraingGPSbackView.h"
+
+namespace OHOS
+{
+    class TraingGPSbackView;
+
+    class TraingGPSbackPresenter : public Presenter<TraingGPSbackView>,
+                                 public UIView::OnClickListener,
+                                 public UIView::OnDragListener
+    {
+    public:
+        TraingGPSbackPresenter();
+        virtual ~TraingGPSbackPresenter();
+
+        void OnStart() override;
+        void OnPause() override;
+        void OnResume() override;
+        void OnStop() override;
+
+        static TraingGPSbackPresenter *GetInstance();
+
+    private:
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;
+        bool OnClick(UIView &view, const ClickEvent &event) override;
+        bool OnDrag(UIView &view, const DragEvent &event) override;
+    };
+} // namespace OHOS
+
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSbackView.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSbackView.h
new file mode 100644 (file)
index 0000000..cf28aa9
--- /dev/null
@@ -0,0 +1,59 @@
+#ifndef _TraingGPSback_VIEW_H
+#define _TraingGPSback_VIEW_H
+
+#include "BaseView.h"
+#include "View.h"
+#include <ui_scroll_view.h>
+#include "components/ui_view_group.h"
+#include "components/ui_label.h"
+#include "components/ui_image_view.h"
+#include "components/ui_button.h"
+#include "components/ui_image_animator.h"
+#include "components/ui_label_button_ext.h"
+#include "components/ui_chart.h"
+#include "components/ui_list.h"
+#include "components/icon_adapter.h"
+#include "wearable_log.h"
+#include "ohos_types.h"
+#include "components/ui_card_page.h"
+
+#include "TraingGPSbackPresenter.h"
+namespace OHOS
+{
+#define BUTTONOK "button1"
+
+
+    class TraingGPSbackPresenter;
+    class TraingGPSbackView : public View<TraingGPSbackPresenter>
+    {
+
+    public:
+        TraingGPSbackView();
+        virtual ~TraingGPSbackView();
+        static TraingGPSbackView *GetInstance(void);
+
+        void OnStart() override;
+        void OnSetUpView() override;
+        void OnTearDownView() override;
+        void OnStop() override;
+        void InitView();
+        void DeInit();
+        void InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize);
+        void InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId);
+        void InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath);
+        void InitList();
+        void PreLoad(void);
+
+    private:
+        UIView::OnDragListener *draglistener{nullptr};
+        TraingGPSbackView(TraingGPSbackView &&) = delete;
+        TraingGPSbackView &operator=(TraingGPSbackView &&) = delete;
+        UIViewGroup *container_ = nullptr;
+        UILabel *label1_ = nullptr;
+        UILabel *label2_ = nullptr;      
+        UIButton *button1_ = nullptr;   
+        UIImageView *image1_ = nullptr;
+        bool viewiInitStatus{false};
+    };
+} // namespace OHOS
+#endif // TraingGPSback_PRESENTER_H
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSlackPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSlackPresenter.h
new file mode 100644 (file)
index 0000000..21713d7
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef _TraingGPSlack_PRESENTER_H
+#define _TraingGPSlack_PRESENTER_H
+
+#include "Presenter.h"
+#include "TraingGPSlackView.h"
+
+namespace OHOS
+{
+    class TraingGPSlackView;
+
+    class TraingGPSlackPresenter : public Presenter<TraingGPSlackView>,
+                                 public UIView::OnClickListener,
+                                 public UIView::OnDragListener
+    {
+    public:
+        TraingGPSlackPresenter();
+        virtual ~TraingGPSlackPresenter();
+
+        void OnStart() override;
+        void OnPause() override;
+        void OnResume() override;
+        void OnStop() override;
+
+        static TraingGPSlackPresenter *GetInstance();
+
+    private:
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;
+        bool OnClick(UIView &view, const ClickEvent &event) override;
+        bool OnDrag(UIView &view, const DragEvent &event) override;
+    };
+} // namespace OHOS
+
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSlackView.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSlackView.h
new file mode 100644 (file)
index 0000000..c96f41e
--- /dev/null
@@ -0,0 +1,64 @@
+#ifndef _TraingGPSlack_VIEW_H
+#define _TraingGPSlack_VIEW_H
+
+#include "BaseView.h"
+#include "View.h"
+#include <ui_scroll_view.h>
+#include "components/ui_view_group.h"
+#include "components/ui_label.h"
+#include "components/ui_image_view.h"
+#include "components/ui_button.h"
+#include "components/ui_image_animator.h"
+#include "components/ui_label_button_ext.h"
+#include "components/ui_chart.h"
+#include "components/ui_list.h"
+#include "components/icon_adapter.h"
+#include "wearable_log.h"
+#include "ohos_types.h"
+#include "components/ui_card_page.h"
+
+#include "TraingGPSlackPresenter.h"
+namespace OHOS
+{
+#define BUTTONGO "button1"
+#define BUTTONSET "button2"
+
+    class TraingGPSlackPresenter;
+    class TraingGPSlackView : public View<TraingGPSlackPresenter>
+    {
+
+    public:
+        TraingGPSlackView();
+        virtual ~TraingGPSlackView();
+        static TraingGPSlackView *GetInstance(void);
+
+        void OnStart() override;
+        void OnSetUpView() override;
+        void OnTearDownView() override;
+        void OnStop() override;
+        void InitView();
+        void DeInit();
+        void InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize);
+        void InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId);
+        void InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath);
+        void InitList();
+        void PreLoad(void);
+
+    private:
+        UIView::OnDragListener *draglistener{nullptr};
+        TraingGPSlackView(TraingGPSlackView &&) = delete;
+        TraingGPSlackView &operator=(TraingGPSlackView &&) = delete;
+
+        UIViewGroup *container_ = nullptr;
+        UILabel *label1_ = nullptr;
+        UILabel *label2_ = nullptr;
+        UILabel *label3_ = nullptr;
+        UILabel *label4_ = nullptr;
+        UIButton *button1_ = nullptr;
+        UIButton *button2_ = nullptr;
+        UIImageView *image1_ = nullptr;
+        UIImageView *image2_ = nullptr;
+        bool viewiInitStatus{false};
+    };
+} // namespace OHOS
+#endif // TraingGPSlack_PRESENTER_H
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSlostPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSlostPresenter.h
new file mode 100644 (file)
index 0000000..c757e23
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef _TraingGPSlost_PRESENTER_H
+#define _TraingGPSlost_PRESENTER_H
+
+#include "Presenter.h"
+#include "TraingGPSlostView.h"
+
+namespace OHOS
+{
+    class TraingGPSlostView;
+
+    class TraingGPSlostPresenter : public Presenter<TraingGPSlostView>,
+                                 public UIView::OnClickListener,
+                                 public UIView::OnDragListener
+    {
+    public:
+        TraingGPSlostPresenter();
+        virtual ~TraingGPSlostPresenter();
+
+        void OnStart() override;
+        void OnPause() override;
+        void OnResume() override;
+        void OnStop() override;
+
+        static TraingGPSlostPresenter *GetInstance();
+
+    private:
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;
+        bool OnClick(UIView &view, const ClickEvent &event) override;
+        bool OnDrag(UIView &view, const DragEvent &event) override;
+    };
+} // namespace OHOS
+
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSlostView.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSlostView.h
new file mode 100644 (file)
index 0000000..d61e398
--- /dev/null
@@ -0,0 +1,59 @@
+#ifndef _TraingGPSlost_VIEW_H
+#define _TraingGPSlost_VIEW_H
+
+#include "BaseView.h"
+#include "View.h"
+#include <ui_scroll_view.h>
+#include "components/ui_view_group.h"
+#include "components/ui_label.h"
+#include "components/ui_image_view.h"
+#include "components/ui_button.h"
+#include "components/ui_image_animator.h"
+#include "components/ui_label_button_ext.h"
+#include "components/ui_chart.h"
+#include "components/ui_list.h"
+#include "components/icon_adapter.h"
+#include "wearable_log.h"
+#include "ohos_types.h"
+#include "components/ui_card_page.h"
+
+#include "TraingGPSlostPresenter.h"
+namespace OHOS
+{
+#define BUTTONOK "button1"
+
+
+    class TraingGPSlostPresenter;
+    class TraingGPSlostView : public View<TraingGPSlostPresenter>
+    {
+
+    public:
+        TraingGPSlostView();
+        virtual ~TraingGPSlostView();
+        static TraingGPSlostView *GetInstance(void);
+
+        void OnStart() override;
+        void OnSetUpView() override;
+        void OnTearDownView() override;
+        void OnStop() override;
+        void InitView();
+        void DeInit();
+        void InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize);
+        void InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId);
+        void InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath);
+        void InitList();
+        void PreLoad(void);
+
+    private:
+        UIView::OnDragListener *draglistener{nullptr};
+        TraingGPSlostView(TraingGPSlostView &&) = delete;
+        TraingGPSlostView &operator=(TraingGPSlostView &&) = delete;
+        UIViewGroup *container_ = nullptr;
+        UILabel *label1_ = nullptr;
+        UILabel *label2_ = nullptr;      
+        UIButton *button1_ = nullptr;   
+        UIImageView *image1_ = nullptr;
+        bool viewiInitStatus{false};
+    };
+} // namespace OHOS
+#endif // TraingGPSlost_PRESENTER_H
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSnotePresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSnotePresenter.h
new file mode 100644 (file)
index 0000000..cbaf8ea
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef _TraingGPSnote_PRESENTER_H
+#define _TraingGPSnote_PRESENTER_H
+
+#include "Presenter.h"
+#include "TraingGPSnoteView.h"
+
+namespace OHOS
+{
+    class TraingGPSnoteView;
+
+    class TraingGPSnotePresenter : public Presenter<TraingGPSnoteView>,
+                                 public UIView::OnClickListener,
+                                 public UIView::OnDragListener
+    {
+    public:
+        TraingGPSnotePresenter();
+        virtual ~TraingGPSnotePresenter();
+
+        void OnStart() override;
+        void OnPause() override;
+        void OnResume() override;
+        void OnStop() override;
+
+        static TraingGPSnotePresenter *GetInstance();
+
+    private:
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;
+        bool OnClick(UIView &view, const ClickEvent &event) override;
+        bool OnDrag(UIView &view, const DragEvent &event) override;
+    };
+} // namespace OHOS
+
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSnoteView.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSnoteView.h
new file mode 100644 (file)
index 0000000..555f4c4
--- /dev/null
@@ -0,0 +1,68 @@
+#ifndef _TraingGPSnote_VIEW_H
+#define _TraingGPSnote_VIEW_H
+
+#include "BaseView.h"
+#include "View.h"
+#include <ui_scroll_view.h>
+#include "components/ui_view_group.h"
+#include "components/ui_label.h"
+#include "components/ui_image_view.h"
+#include "components/ui_button.h"
+#include "components/ui_image_animator.h"
+#include "components/ui_label_button_ext.h"
+#include "components/ui_chart.h"
+#include "components/ui_list.h"
+#include "components/icon_adapter.h"
+#include "wearable_log.h"
+#include "ohos_types.h"
+#include "components/ui_card_page.h"
+
+#include "TraingGPSnotePresenter.h"
+namespace OHOS
+{
+#define BUTTONBACK "button1"
+#define BUTTONGO "button2"
+
+    class TraingGPSnotePresenter;
+    class TraingGPSnoteView : public View<TraingGPSnotePresenter>
+    {
+
+    public:
+        TraingGPSnoteView();
+        virtual ~TraingGPSnoteView();
+        static TraingGPSnoteView *GetInstance(void);
+
+        void OnStart() override;
+        void OnSetUpView() override;
+        void OnTearDownView() override;
+        void OnStop() override;
+        void InitView();
+        void DeInit();
+        void InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize);
+        void InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId);
+        void InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath);
+        void InitList();
+        void PreLoad(void);
+
+    private:
+        UIView::OnDragListener *draglistener{nullptr};
+        TraingGPSnoteView(TraingGPSnoteView &&) = delete;
+        TraingGPSnoteView &operator=(TraingGPSnoteView &&) = delete;
+
+        UIViewGroup *container_ = nullptr;
+        UIScrollView *scrollView1_ = nullptr;
+
+        UILabel *label1_ = nullptr;
+        UILabel *label2_ = nullptr;
+        UILabel *label3_ = nullptr;
+        UILabel *label4_ = nullptr;
+
+        UIButton *button1_ = nullptr;
+        UIButton *button2_ = nullptr;
+
+        UIImageView *image1_ = nullptr;
+        UIImageView *image2_ = nullptr;
+        bool viewiInitStatus{false};
+    };
+} // namespace OHOS
+#endif // TraingGPSnote_PRESENTER_H
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSsetPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSsetPresenter.h
new file mode 100644 (file)
index 0000000..99e9c48
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef _TraingGPSset_PRESENTER_H
+#define _TraingGPSset_PRESENTER_H
+
+#include "Presenter.h"
+#include "TraingGPSsetView.h"
+
+namespace OHOS
+{
+    class TraingGPSsetView;
+
+    class TraingGPSsetPresenter : public Presenter<TraingGPSsetView>,
+                                 public UIView::OnClickListener,
+                                 public UIView::OnDragListener
+    {
+    public:
+        TraingGPSsetPresenter();
+        virtual ~TraingGPSsetPresenter();
+
+        void OnStart() override;
+        void OnPause() override;
+        void OnResume() override;
+        void OnStop() override;
+
+        static TraingGPSsetPresenter *GetInstance();
+
+    private:
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;
+        bool OnClick(UIView &view, const ClickEvent &event) override;
+        bool OnDrag(UIView &view, const DragEvent &event) override;
+    };
+} // namespace OHOS
+
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSsetView.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingGPSsetView.h
new file mode 100644 (file)
index 0000000..5503398
--- /dev/null
@@ -0,0 +1,79 @@
+#ifndef _TraingGPSset_VIEW_H
+#define _TraingGPSset_VIEW_H
+
+#include "BaseView.h"
+#include "View.h"
+#include <ui_scroll_view.h>
+#include "components/ui_view_group.h"
+#include "components/ui_label.h"
+#include "components/ui_image_view.h"
+#include "components/ui_button.h"
+#include "components/ui_image_animator.h"
+#include "components/ui_label_button_ext.h"
+#include "components/ui_chart.h"
+#include "components/ui_list.h"
+#include "components/icon_adapter.h"
+#include "wearable_log.h"
+#include "ohos_types.h"
+#include "components/ui_card_page.h"
+
+#include "TraingGPSsetPresenter.h"
+namespace OHOS
+{
+#define BUTTONTIME "button1"
+#define BUTTONMIL "button2"
+#define BUTTONCALULI "button3"
+#define BUTTONWALK "button4"
+
+    class TraingGPSsetPresenter;
+    class TraingGPSsetView : public View<TraingGPSsetPresenter>
+    {
+
+    public:
+        TraingGPSsetView();
+        virtual ~TraingGPSsetView();
+        static TraingGPSsetView *GetInstance(void);
+
+        void OnStart() override;
+        void OnSetUpView() override;
+        void OnTearDownView() override;
+        void OnStop() override;
+        void InitView();
+        void DeInit();
+        void InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize);
+        void InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId);
+        void InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath);
+        void InitList();
+        void PreLoad(void);
+
+    private:
+        UIView::OnDragListener *draglistener{nullptr};
+        TraingGPSsetView(TraingGPSsetView &&) = delete;
+        TraingGPSsetView &operator=(TraingGPSsetView &&) = delete;
+
+        UIViewGroup *container_ = nullptr;
+        UIScrollView *scrollView1_ = nullptr;
+
+        UILabel *label1_ = nullptr;
+        UILabel *label2_ = nullptr;
+        UILabel *label3_ = nullptr;
+        UILabel *label4_ = nullptr;
+        UILabel *label5_ = nullptr;
+
+        UIButton *button1_ = nullptr;
+        UIButton *button2_ = nullptr;
+        UIButton *button3_ = nullptr;
+        UIButton *button4_ = nullptr;
+
+        UIImageView *image1_ = nullptr;
+        UIImageView *image2_ = nullptr;
+        UIImageView *image3_ = nullptr;
+        UIImageView *image4_ = nullptr;
+
+        UIList *list1_ = nullptr;
+        IconAdapter *list1adapter_ = nullptr;
+        List<IconItemNode *> *list1data_ = nullptr;
+        bool viewiInitStatus{false};
+    };
+} // namespace OHOS
+#endif // TraingGPSset_PRESENTER_H
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingLimitPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingLimitPresenter.h
new file mode 100644 (file)
index 0000000..6a20991
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef _TraingLimit_PRESENTER_H
+#define _TraingLimit_PRESENTER_H
+
+#include "Presenter.h"
+#include "TraingLimitView.h"
+
+namespace OHOS
+{
+    class TraingLimitView;
+
+    class TraingLimitPresenter : public Presenter<TraingLimitView>,
+                                 public UIView::OnClickListener,
+                                 public UIView::OnDragListener
+    {
+    public:
+        TraingLimitPresenter();
+        virtual ~TraingLimitPresenter();
+
+        void OnStart() override;
+        void OnPause() override;
+        void OnResume() override;
+        void OnStop() override;
+
+        static TraingLimitPresenter *GetInstance();
+
+    private:
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;
+        bool OnClick(UIView &view, const ClickEvent &event) override;
+        bool OnDrag(UIView &view, const DragEvent &event) override;
+    };
+} // namespace OHOS
+
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingLimitView.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingLimitView.h
new file mode 100644 (file)
index 0000000..604050d
--- /dev/null
@@ -0,0 +1,83 @@
+#ifndef _TraingLimit_VIEW_H
+#define _TraingLimit_VIEW_H
+
+#include "BaseView.h"
+#include "View.h"
+#include <ui_scroll_view.h>
+#include "components/ui_view_group.h"
+#include "components/ui_label.h"
+#include "components/ui_image_view.h"
+#include "components/ui_button.h"
+#include "components/ui_image_animator.h"
+#include "components/ui_label_button_ext.h"
+#include "components/ui_chart.h"
+#include "components/ui_list.h"
+#include "components/icon_adapter.h"
+#include "wearable_log.h"
+#include "ohos_types.h"
+#include "components/ui_card_page.h"
+
+#include "TraingLimitPresenter.h"
+namespace OHOS
+{
+#define BUTTON1 "button1"  
+#define BUTTON2 "button2"    
+#define BUTTON3 "button3"    
+#define BUTTON4 "button4"     
+#define BUTTON5 "button5" 
+#define BUTTON6 "button6"      
+#define BUTTON7 "button7"    
+#define BUTTON8 "button8"    
+
+    class TraingLimitPresenter;
+    class TraingLimitView : public View<TraingLimitPresenter>
+    {
+
+    public:
+        TraingLimitView();
+        virtual ~TraingLimitView();
+        static TraingLimitView *GetInstance(void);
+
+        void OnStart() override;
+        void OnSetUpView() override;
+        void OnTearDownView() override;
+        void OnStop() override;
+        void InitView();
+        void DeInit();
+        void InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize);
+        void InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId);
+        void InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath);
+        void InitList();
+        void PreLoad(void);
+
+    private:
+        UIView::OnDragListener *draglistener{nullptr};
+        TraingLimitView(TraingLimitView &&) = delete;
+        TraingLimitView &operator=(TraingLimitView &&) = delete;
+
+        UIViewGroup *container_ = nullptr;
+        UIScrollView *scrollView1_ = nullptr;
+        UILabel *label1_ = nullptr;
+        UIImageView *image1_ = nullptr;
+        UIImageView *image2_ = nullptr;
+        UIImageView *image3_ = nullptr;
+        UIImageView *image4_ = nullptr;
+        UIImageView *image5_ = nullptr;
+        UIImageView *image6_ = nullptr;
+        UIImageView *image7_ = nullptr;
+        UIImageView *image8_ = nullptr;
+        UIButton *button1_ = nullptr;
+        UIButton *button2_ = nullptr;
+        UIButton *button3_ = nullptr;
+        UIButton *button4_ = nullptr;
+        UIButton *button5_ = nullptr;
+        UIButton *button6_ = nullptr;
+        UIButton *button7_ = nullptr;
+        UIButton *button8_ = nullptr;
+        UIList *list1_ = nullptr;
+        IconAdapter *list1adapter_ = nullptr;
+        List<IconItemNode *> *list1data_ = nullptr;
+        bool viewiInitStatus{false};
+    };
+} // namespace OHOS
+#endif // TraingLimit_PRESENTER_H
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingMorePresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingMorePresenter.h
new file mode 100644 (file)
index 0000000..8685e83
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef _TraingMore_PRESENTER_H
+#define _TraingMore_PRESENTER_H
+
+#include "Presenter.h"
+#include "TraingMoreView.h"
+
+namespace OHOS
+{
+    class TraingMoreView;
+
+    class TraingMorePresenter : public Presenter<TraingMoreView>,
+                                 public UIView::OnClickListener,
+                                 public UIView::OnDragListener
+    {
+    public:
+        TraingMorePresenter();
+        virtual ~TraingMorePresenter();
+
+        void OnStart() override;
+        void OnPause() override;
+        void OnResume() override;
+        void OnStop() override;
+
+        static TraingMorePresenter *GetInstance();
+
+    private:
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;
+        bool OnClick(UIView &view, const ClickEvent &event) override;
+        bool OnDrag(UIView &view, const DragEvent &event) override;
+    };
+} // namespace OHOS
+
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingMoreView.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingMoreView.h
new file mode 100644 (file)
index 0000000..5e17f88
--- /dev/null
@@ -0,0 +1,83 @@
+#ifndef _TraingMore_VIEW_H
+#define _TraingMore_VIEW_H
+
+#include "BaseView.h"
+#include "View.h"
+#include <ui_scroll_view.h>
+#include "components/ui_view_group.h"
+#include "components/ui_label.h"
+#include "components/ui_image_view.h"
+#include "components/ui_button.h"
+#include "components/ui_image_animator.h"
+#include "components/ui_label_button_ext.h"
+#include "components/ui_chart.h"
+#include "components/ui_list.h"
+#include "components/icon_adapter.h"
+#include "wearable_log.h"
+#include "ohos_types.h"
+#include "components/ui_card_page.h"
+
+#include "TraingMorePresenter.h"
+namespace OHOS
+{
+#define BUTTON_FITNESS "button1"  // 健身
+#define BUTTON_DANCE "button2"    // 舞蹈
+#define BUTTON_REST "button3"     // 休闲运动
+#define BUTTON_BALL "button4"     // 球类
+#define BUTTON_SWIMMING "button5" // 水上运动
+#define BUTTON_ICE "button6"      // 冰上运动
+#define BUTTON_LIMIT "button7"    // 极限运动
+#define BUTTON_OTHER "button8"    // 其他
+
+    class TraingMorePresenter;
+    class TraingMoreView : public View<TraingMorePresenter>
+    {
+
+    public:
+        TraingMoreView();
+        virtual ~TraingMoreView();
+        static TraingMoreView *GetInstance(void);
+
+        void OnStart() override;
+        void OnSetUpView() override;
+        void OnTearDownView() override;
+        void OnStop() override;
+        void InitView();
+        void DeInit();
+        void InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize);
+        void InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId);
+        void InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath);
+        void InitList();
+        void PreLoad(void);
+
+    private:
+        UIView::OnDragListener *draglistener{nullptr};
+        TraingMoreView(TraingMoreView &&) = delete;
+        TraingMoreView &operator=(TraingMoreView &&) = delete;
+
+        UIViewGroup *container_ = nullptr;
+        UIScrollView *scrollView1_ = nullptr;
+        UILabel *label1_ = nullptr;
+        UIImageView *image1_ = nullptr;
+        UIImageView *image2_ = nullptr;
+        UIImageView *image3_ = nullptr;
+        UIImageView *image4_ = nullptr;
+        UIImageView *image5_ = nullptr;
+        UIImageView *image6_ = nullptr;
+        UIImageView *image7_ = nullptr;
+        UIImageView *image8_ = nullptr;
+        UIButton *button1_ = nullptr;
+        UIButton *button2_ = nullptr;
+        UIButton *button3_ = nullptr;
+        UIButton *button4_ = nullptr;
+        UIButton *button5_ = nullptr;
+        UIButton *button6_ = nullptr;
+        UIButton *button7_ = nullptr;
+        UIButton *button8_ = nullptr;
+        UIList *list1_ = nullptr;
+        IconAdapter *list1adapter_ = nullptr;
+        List<IconItemNode *> *list1data_ = nullptr;
+        bool viewiInitStatus{false};
+    };
+} // namespace OHOS
+#endif // TraingMore_PRESENTER_H
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingNomalPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingNomalPresenter.h
new file mode 100644 (file)
index 0000000..9d3d9bb
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef _TraingNomal_PRESENTER_H
+#define _TraingNomal_PRESENTER_H
+
+#include "Presenter.h"
+#include "TraingNomalView.h"
+
+namespace OHOS
+{
+    class TraingNomalView;
+
+    class TraingNomalPresenter : public Presenter<TraingNomalView>,
+                                 public UIView::OnClickListener,
+                                 public UIView::OnDragListener
+    {
+    public:
+        TraingNomalPresenter();
+        virtual ~TraingNomalPresenter();
+
+        void OnStart() override;
+        void OnPause() override;
+        void OnResume() override;
+        void OnStop() override;
+
+        static TraingNomalPresenter *GetInstance();
+
+    private:
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;
+        bool OnClick(UIView &view, const ClickEvent &event) override;
+        bool OnDrag(UIView &view, const DragEvent &event) override;
+    };
+} // namespace OHOS
+
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingNomalView.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingNomalView.h
new file mode 100644 (file)
index 0000000..0d6ba03
--- /dev/null
@@ -0,0 +1,60 @@
+#ifndef _TraingNomal_VIEW_H
+#define _TraingNomal_VIEW_H
+
+#include "BaseView.h"
+#include "View.h"
+#include <ui_scroll_view.h>
+#include "components/ui_view_group.h"
+#include "components/ui_label.h"
+#include "components/ui_image_view.h"
+#include "components/ui_button.h"
+#include "components/ui_image_animator.h"
+#include "components/ui_label_button_ext.h"
+#include "components/ui_chart.h"
+#include "components/ui_list.h"
+#include "components/icon_adapter.h"
+#include "wearable_log.h"
+#include "ohos_types.h"
+#include "components/ui_card_page.h"
+
+#include "TraingNomalPresenter.h"
+namespace OHOS
+{
+#define BUTTONGO "button1"
+#define BUTTONSET "button2"
+
+    class TraingNomalPresenter;
+    class TraingNomalView : public View<TraingNomalPresenter>
+    {
+
+    public:
+        TraingNomalView();
+        virtual ~TraingNomalView();
+        static TraingNomalView *GetInstance(void);
+
+        void OnStart() override;
+        void OnSetUpView() override;
+        void OnTearDownView() override;
+        void OnStop() override;
+        void InitView();
+        void DeInit();
+        void InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize);
+        void InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId);
+        void InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath);
+        void InitList();
+        void PreLoad(void);
+
+    private:
+        UIView::OnDragListener *draglistener{nullptr};
+        TraingNomalView(TraingNomalView &&) = delete;
+        TraingNomalView &operator=(TraingNomalView &&) = delete;
+
+        UIViewGroup *container_ = nullptr;
+        UILabel *label1_ = nullptr;
+        UILabel *label2_ = nullptr;
+        UIButton *button1_ = nullptr;
+        UIButton *button2_ = nullptr;
+        bool viewiInitStatus{false};
+    };
+} // namespace OHOS
+#endif // TraingNomal_PRESENTER_H
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingPresenter.h
new file mode 100644 (file)
index 0000000..6759a3b
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef _Traing_PRESENTER_H
+#define _Traing_PRESENTER_H
+
+#include "Presenter.h"
+#include "TraingView.h"
+
+namespace OHOS
+{
+    class TraingView;
+
+    class TraingPresenter : public Presenter<TraingView>,
+                            public UIView::OnClickListener,
+                            public UIView::OnDragListener
+    {
+    public:
+        TraingPresenter();
+        virtual ~TraingPresenter();
+
+        void OnStart() override;
+        void OnPause() override;
+        void OnResume() override;
+        void OnStop() override;
+
+        static TraingPresenter *GetInstance();
+
+    private:
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;
+        bool OnClick(UIView &view, const ClickEvent &event) override;
+        bool OnDrag(UIView &view, const DragEvent &event) override;
+    };
+} // namespace OHOS
+
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetCaluliPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetCaluliPresenter.h
new file mode 100644 (file)
index 0000000..5706845
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef _TraingSetCaluli_PRESENTER_H\r
+#define _TraingSetCaluli_PRESENTER_H\r
+\r
+#include "Presenter.h"\r
+#include "TraingSetCaluliView.h"\r
+\r
+namespace OHOS\r
+{\r
+    class TraingSetCaluliView;\r
+\r
+    class TraingSetCaluliPresenter : public Presenter<TraingSetCaluliView>,\r
+                                 public UIView::OnClickListener,\r
+                                 public UIView::OnDragListener\r
+    {\r
+    public:\r
+        TraingSetCaluliPresenter();\r
+        virtual ~TraingSetCaluliPresenter();\r
+\r
+        void OnStart() override;\r
+        void OnPause() override;\r
+        void OnResume() override;\r
+        void OnStop() override;\r
+\r
+        static TraingSetCaluliPresenter *GetInstance();\r
+\r
+    private:\r
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;\r
+        bool OnClick(UIView &view, const ClickEvent &event) override;\r
+        bool OnDrag(UIView &view, const DragEvent &event) override;\r
+    };\r
+} // namespace OHOS\r
+\r
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetCaluliView.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetCaluliView.h
new file mode 100644 (file)
index 0000000..2b9f128
--- /dev/null
@@ -0,0 +1,62 @@
+#ifndef _TraingSetCaluli_VIEW_H\r
+#define _TraingSetCaluli_VIEW_H\r
+\r
+#include "BaseView.h"\r
+#include "View.h"\r
+#include <ui_scroll_view.h>\r
+#include "components/ui_view_group.h"\r
+#include "components/ui_label.h"\r
+#include "components/ui_image_view.h"\r
+#include "components/ui_button.h"\r
+#include "components/ui_image_animator.h"\r
+#include "components/ui_label_button_ext.h"\r
+#include "components/ui_chart.h"\r
+#include "components/ui_list.h"\r
+#include "components/icon_adapter.h"\r
+#include "wearable_log.h"\r
+#include "ohos_types.h"\r
+#include "components/ui_card_page.h"\r
+#include "components/ui_picker.h"\r
+\r
+#include "TraingSetCaluliPresenter.h"\r
+namespace OHOS\r
+{\r
+#define BUTTONOK "button1"\r
+\r
+\r
+    class TraingSetCaluliPresenter;\r
+    class TraingSetCaluliView : public View<TraingSetCaluliPresenter>\r
+    {\r
+\r
+    public:\r
+        TraingSetCaluliView();\r
+        virtual ~TraingSetCaluliView();\r
+        static TraingSetCaluliView *GetInstance(void);\r
+\r
+        void OnStart() override;\r
+        void OnSetUpView() override;\r
+        void OnTearDownView() override;\r
+        void OnStop() override;\r
+        void InitView();\r
+        void DeInit();\r
+        void InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize);\r
+        void InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId);\r
+        void InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath);\r
+        void InitUIPicker(UIPicker *&picker, int x, int y, int width, int height, const char *viewId);\r
+        void InitList();\r
+        void PreLoad(void);\r
+\r
+    private:\r
+        UIView::OnDragListener *draglistener{nullptr};\r
+        TraingSetCaluliView(TraingSetCaluliView &&) = delete;\r
+        TraingSetCaluliView &operator=(TraingSetCaluliView &&) = delete;\r
+\r
+        UIViewGroup *container_ = nullptr;\r
+        UILabel *label1_ = nullptr;\r
+        UIButton *button1_ = nullptr;\r
+        UIPicker *uiPicker1_ = nullptr;\r
+\r
+        bool viewiInitStatus{false};\r
+    };\r
+} // namespace OHOS\r
+#endif // TraingSetCaluli_PRESENTER_H\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetDistPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetDistPresenter.h
new file mode 100644 (file)
index 0000000..23af5de
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef _TraingSetDist_PRESENTER_H
+#define _TraingSetDist_PRESENTER_H
+
+#include "Presenter.h"
+#include "TraingSetDistView.h"
+
+namespace OHOS
+{
+    class TraingSetDistView;
+
+    class TraingSetDistPresenter : public Presenter<TraingSetDistView>,
+                                 public UIView::OnClickListener,
+                                 public UIView::OnDragListener
+    {
+    public:
+        TraingSetDistPresenter();
+        virtual ~TraingSetDistPresenter();
+
+        void OnStart() override;
+        void OnPause() override;
+        void OnResume() override;
+        void OnStop() override;
+
+        static TraingSetDistPresenter *GetInstance();
+
+    private:
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;
+        bool OnClick(UIView &view, const ClickEvent &event) override;
+        bool OnDrag(UIView &view, const DragEvent &event) override;
+    };
+} // namespace OHOS
+
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetDistView.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetDistView.h
new file mode 100644 (file)
index 0000000..93807d2
--- /dev/null
@@ -0,0 +1,63 @@
+
+#ifndef _TraingSetDist_VIEW_H
+#define _TraingSetDist_VIEW_H
+
+#include "BaseView.h"
+#include "View.h"
+#include <ui_scroll_view.h>
+#include "components/ui_view_group.h"
+#include "components/ui_label.h"
+#include "components/ui_image_view.h"
+#include "components/ui_button.h"
+#include "components/ui_image_animator.h"
+#include "components/ui_label_button_ext.h"
+#include "components/ui_chart.h"
+#include "components/ui_list.h"
+#include "components/icon_adapter.h"
+#include "wearable_log.h"
+#include "ohos_types.h"
+#include "components/ui_card_page.h"
+#include "components/ui_picker.h"
+
+#include "TraingSetDistPresenter.h"
+namespace OHOS
+{
+#define BUTTONOK "button1"
+
+
+    class TraingSetDistPresenter;
+    class TraingSetDistView : public View<TraingSetDistPresenter>
+    {
+
+    public:
+        TraingSetDistView();
+        virtual ~TraingSetDistView();
+        static TraingSetDistView *GetInstance(void);
+
+        void OnStart() override;
+        void OnSetUpView() override;
+        void OnTearDownView() override;
+        void OnStop() override;
+        void InitView();
+        void DeInit();
+        void InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize);
+        void InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId);
+        void InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath);
+        void InitUIPicker(UIPicker *&picker, int x, int y, int width, int height, const char *viewId);
+        void InitList();
+        void PreLoad(void);
+
+    private:
+        UIView::OnDragListener *draglistener{nullptr};
+        TraingSetDistView(TraingSetDistView &&) = delete;
+        TraingSetDistView &operator=(TraingSetDistView &&) = delete;
+
+        UIViewGroup *container_ = nullptr;
+        UILabel *label1_ = nullptr;
+        UIButton *button1_ = nullptr;
+        UIPicker *uiPicker1_ = nullptr;
+
+        bool viewiInitStatus{false};
+    };
+} // namespace OHOS
+#endif // TraingSetDist_PRESENTER_H
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetPresenter.h
new file mode 100644 (file)
index 0000000..7e650aa
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef _TraingSet_PRESENTER_H
+#define _TraingSet_PRESENTER_H
+
+#include "Presenter.h"
+#include "TraingSetView.h"
+
+namespace OHOS
+{
+    class TraingSetView;
+
+    class TraingSetPresenter : public Presenter<TraingSetView>,
+                                 public UIView::OnClickListener,
+                                 public UIView::OnDragListener
+    {
+    public:
+        TraingSetPresenter();
+        virtual ~TraingSetPresenter();
+
+        void OnStart() override;
+        void OnPause() override;
+        void OnResume() override;
+        void OnStop() override;
+
+        static TraingSetPresenter *GetInstance();
+
+    private:
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;
+        bool OnClick(UIView &view, const ClickEvent &event) override;
+        bool OnDrag(UIView &view, const DragEvent &event) override;
+    };
+} // namespace OHOS
+
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetSeptPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetSeptPresenter.h
new file mode 100644 (file)
index 0000000..74034c0
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef _TraingSetSept_PRESENTER_H
+#define _TraingSetSept_PRESENTER_H
+
+#include "Presenter.h"
+#include "TraingSetSeptView.h"
+
+namespace OHOS
+{
+    class TraingSetSeptView;
+
+    class TraingSetSeptPresenter : public Presenter<TraingSetSeptView>,
+                                 public UIView::OnClickListener,
+                                 public UIView::OnDragListener
+    {
+    public:
+        TraingSetSeptPresenter();
+        virtual ~TraingSetSeptPresenter();
+
+        void OnStart() override;
+        void OnPause() override;
+        void OnResume() override;
+        void OnStop() override;
+
+        static TraingSetSeptPresenter *GetInstance();
+
+    private:
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;
+        bool OnClick(UIView &view, const ClickEvent &event) override;
+        bool OnDrag(UIView &view, const DragEvent &event) override;
+    };
+} // namespace OHOS
+
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetSeptView.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetSeptView.h
new file mode 100644 (file)
index 0000000..a57c92d
--- /dev/null
@@ -0,0 +1,63 @@
+
+#ifndef _TraingSetSept_VIEW_H
+#define _TraingSetSept_VIEW_H
+
+#include "BaseView.h"
+#include "View.h"
+#include <ui_scroll_view.h>
+#include "components/ui_view_group.h"
+#include "components/ui_label.h"
+#include "components/ui_image_view.h"
+#include "components/ui_button.h"
+#include "components/ui_image_animator.h"
+#include "components/ui_label_button_ext.h"
+#include "components/ui_chart.h"
+#include "components/ui_list.h"
+#include "components/icon_adapter.h"
+#include "wearable_log.h"
+#include "ohos_types.h"
+#include "components/ui_card_page.h"
+#include "components/ui_picker.h"
+
+#include "TraingSetSeptPresenter.h"
+namespace OHOS
+{
+#define BUTTONOK "button1"
+
+
+    class TraingSetSeptPresenter;
+    class TraingSetSeptView : public View<TraingSetSeptPresenter>
+    {
+
+    public:
+        TraingSetSeptView();
+        virtual ~TraingSetSeptView();
+        static TraingSetSeptView *GetInstance(void);
+
+        void OnStart() override;
+        void OnSetUpView() override;
+        void OnTearDownView() override;
+        void OnStop() override;
+        void InitView();
+        void DeInit();
+        void InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize);
+        void InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId);
+        void InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath);
+        void InitUIPicker(UIPicker *&picker, int x, int y, int width, int height, const char *viewId);
+        void InitList();
+        void PreLoad(void);
+
+    private:
+        UIView::OnDragListener *draglistener{nullptr};
+        TraingSetSeptView(TraingSetSeptView &&) = delete;
+        TraingSetSeptView &operator=(TraingSetSeptView &&) = delete;
+
+        UIViewGroup *container_ = nullptr;
+        UILabel *label1_ = nullptr;
+        UIButton *button1_ = nullptr;
+        UIPicker *uiPicker1_ = nullptr;
+
+        bool viewiInitStatus{false};
+    };
+} // namespace OHOS
+#endif // TraingSetSept_PRESENTER_H
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetTimePresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetTimePresenter.h
new file mode 100644 (file)
index 0000000..cacd63a
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef _TraingSetTime_PRESENTER_H
+#define _TraingSetTime_PRESENTER_H
+
+#include "Presenter.h"
+#include "TraingSetTimeView.h"
+
+namespace OHOS
+{
+    class TraingSetTimeView;
+
+    class TraingSetTimePresenter : public Presenter<TraingSetTimeView>,
+                                 public UIView::OnClickListener,
+                                 public UIView::OnDragListener
+    {
+    public:
+        TraingSetTimePresenter();
+        virtual ~TraingSetTimePresenter();
+
+        void OnStart() override;
+        void OnPause() override;
+        void OnResume() override;
+        void OnStop() override;
+
+        static TraingSetTimePresenter *GetInstance();
+
+    private:
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;
+        bool OnClick(UIView &view, const ClickEvent &event) override;
+        bool OnDrag(UIView &view, const DragEvent &event) override;
+    };
+} // namespace OHOS
+
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetTimeView.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetTimeView.h
new file mode 100644 (file)
index 0000000..2256e98
--- /dev/null
@@ -0,0 +1,62 @@
+#ifndef _TraingSetTime_VIEW_H
+#define _TraingSetTime_VIEW_H
+
+#include "BaseView.h"
+#include "View.h"
+#include <ui_scroll_view.h>
+#include "components/ui_view_group.h"
+#include "components/ui_label.h"
+#include "components/ui_image_view.h"
+#include "components/ui_button.h"
+#include "components/ui_image_animator.h"
+#include "components/ui_label_button_ext.h"
+#include "components/ui_chart.h"
+#include "components/ui_list.h"
+#include "components/icon_adapter.h"
+#include "wearable_log.h"
+#include "ohos_types.h"
+#include "components/ui_card_page.h"
+#include "components/ui_picker.h"
+
+#include "TraingSetTimePresenter.h"
+namespace OHOS
+{
+#define BUTTONOK "button1"
+
+
+    class TraingSetTimePresenter;
+    class TraingSetTimeView : public View<TraingSetTimePresenter>
+    {
+
+    public:
+        TraingSetTimeView();
+        virtual ~TraingSetTimeView();
+        static TraingSetTimeView *GetInstance(void);
+
+        void OnStart() override;
+        void OnSetUpView() override;
+        void OnTearDownView() override;
+        void OnStop() override;
+        void InitView();
+        void DeInit();
+        void InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize);
+        void InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId);
+        void InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath);
+        void InitUIPicker(UIPicker *&picker, int x, int y, int width, int height, const char *viewId);
+        void InitList();
+        void PreLoad(void);
+
+    private:
+        UIView::OnDragListener *draglistener{nullptr};
+        TraingSetTimeView(TraingSetTimeView &&) = delete;
+        TraingSetTimeView &operator=(TraingSetTimeView &&) = delete;
+
+        UIViewGroup *container_ = nullptr;
+        UILabel *label1_ = nullptr;
+        UIButton *button1_ = nullptr;
+        UIPicker *uiPicker1_ = nullptr;
+
+        bool viewiInitStatus{false};
+    };
+} // namespace OHOS
+#endif // TraingSetTime_PRESENTER_H
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetView.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingSetView.h
new file mode 100644 (file)
index 0000000..a78a941
--- /dev/null
@@ -0,0 +1,71 @@
+#ifndef _TraingSet_VIEW_H
+#define _TraingSet_VIEW_H
+
+#include "BaseView.h"
+#include "View.h"
+#include <ui_scroll_view.h>
+#include "components/ui_view_group.h"
+#include "components/ui_label.h"
+#include "components/ui_image_view.h"
+#include "components/ui_button.h"
+#include "components/ui_image_animator.h"
+#include "components/ui_label_button_ext.h"
+#include "components/ui_chart.h"
+#include "components/ui_list.h"
+#include "components/icon_adapter.h"
+#include "wearable_log.h"
+#include "ohos_types.h"
+#include "components/ui_card_page.h"
+
+#include "TraingSetPresenter.h"
+namespace OHOS
+{
+#define BUTTONTIME "button1"
+#define BUTTONCALULI "button2"
+
+    class TraingSetPresenter;
+    class TraingSetView : public View<TraingSetPresenter>
+    {
+
+    public:
+        TraingSetView();
+        virtual ~TraingSetView();
+        static TraingSetView *GetInstance(void);
+
+        void OnStart() override;
+        void OnSetUpView() override;
+        void OnTearDownView() override;
+        void OnStop() override;
+        void InitView();
+        void DeInit();
+        void InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize);
+        void InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId);
+        void InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath);
+        void InitList();
+        void PreLoad(void);
+
+    private:
+        UIView::OnDragListener *draglistener{nullptr};
+        TraingSetView(TraingSetView &&) = delete;
+        TraingSetView &operator=(TraingSetView &&) = delete;
+
+        UIViewGroup *container_ = nullptr;
+
+        UILabel *label1_ = nullptr;
+        UILabel *label2_ = nullptr;
+        UILabel *label3_ = nullptr;
+        UILabel *label4_ = nullptr;
+        UILabel *label5_ = nullptr;
+
+        UIImageView *image1_ = nullptr;
+        UIImageView *image2_ = nullptr;
+        UIImageView *image3_ = nullptr;
+        UIImageView *image4_ = nullptr;
+
+        UIButton *button1_ = nullptr;
+        UIButton *button2_ = nullptr;
+
+        bool viewiInitStatus{false};
+    };
+} // namespace OHOS
+#endif // TraingSet_PRESENTER_H
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingStrongPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingStrongPresenter.h
new file mode 100644 (file)
index 0000000..b69a7c6
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef _TraingStrong_PRESENTER_H
+#define _TraingStrong_PRESENTER_H
+
+#include "Presenter.h"
+#include "TraingStrongView.h"
+
+namespace OHOS
+{
+    class TraingStrongView;
+
+    class TraingStrongPresenter : public Presenter<TraingStrongView>,
+                                 public UIView::OnClickListener,
+                                 public UIView::OnDragListener
+    {
+    public:
+        TraingStrongPresenter();
+        virtual ~TraingStrongPresenter();
+
+        void OnStart() override;
+        void OnPause() override;
+        void OnResume() override;
+        void OnStop() override;
+
+        static TraingStrongPresenter *GetInstance();
+
+    private:
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;
+        bool OnClick(UIView &view, const ClickEvent &event) override;
+        bool OnDrag(UIView &view, const DragEvent &event) override;
+    };
+} // namespace OHOS
+
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingStrongView.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingStrongView.h
new file mode 100644 (file)
index 0000000..8cf7ba9
--- /dev/null
@@ -0,0 +1,74 @@
+#ifndef _TraingStrong_VIEW_H
+#define _TraingStrong_VIEW_H
+
+#include "BaseView.h"
+#include "View.h"
+#include <ui_scroll_view.h>
+#include "components/ui_view_group.h"
+#include "components/ui_label.h"
+#include "components/ui_image_view.h"
+#include "components/ui_button.h"
+#include "components/ui_image_animator.h"
+#include "components/ui_label_button_ext.h"
+#include "components/ui_chart.h"
+#include "components/ui_list.h"
+#include "components/icon_adapter.h"
+#include "wearable_log.h"
+#include "ohos_types.h"
+#include "components/ui_card_page.h"
+
+#include "TraingStrongPresenter.h"
+namespace OHOS
+{
+#define BUTTONNO "button1"
+#define BUTTONYES "button2"
+
+    class TraingStrongPresenter;
+    class TraingStrongView : public View<TraingStrongPresenter>
+    {
+
+    public:
+        TraingStrongView();
+        virtual ~TraingStrongView();
+        static TraingStrongView *GetInstance(void);
+
+        void OnStart() override;
+        void OnSetUpView() override;
+        void OnTearDownView() override;
+        void OnStop() override;
+        void InitView();
+        void DeInit();
+        void InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize);
+        void InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId);
+        void InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath);
+        void InitList();
+        void PreLoad(void);
+
+        // 通过函数改变
+        void SetLabel();
+        void SetButton();
+
+    private:
+        UIView::OnDragListener *draglistener{nullptr};
+        TraingStrongView(TraingStrongView &&) = delete;
+        TraingStrongView &operator=(TraingStrongView &&) = delete;
+
+        UIViewGroup *container_ = nullptr;
+        UIScrollView *scrollView1_ = nullptr;
+
+        UILabel *label1_ = nullptr;
+        UILabel *label2_ = nullptr;
+        UILabel *label3_ = nullptr;
+        UILabel *label4_ = nullptr;
+        UILabel *label5_ = nullptr;
+        UILabel *label6_ = nullptr;
+
+        UIImageView *image1_ = nullptr;
+        UIImageView *image2_ = nullptr;
+        UIImageView *image3_ = nullptr;
+        UIImageView *image4_ = nullptr;
+        UIImageView *image5_ = nullptr;
+        bool viewiInitStatus{false};
+    };
+} // namespace OHOS
+#endif // TraingStrong_PRESENTER_H
index e52c832..7ab6f6a 100644 (file)
@@ -15,6 +15,7 @@
 #include "ohos_types.h"
 #include "components/ui_card_page.h"
 
+#include "TraingPresenter.h"
 namespace OHOS
 {
 #define BUTTON1 "button1"    // 按键1
@@ -22,7 +23,8 @@ namespace OHOS
 #define BUTTON3 "button3"    // 按键3
 #define BUTTONMORE "button4" // 按键 更多
 
-    class TraingView : public UICardPage
+    class TraingPresenter;
+    class TraingView : public View<TraingPresenter>
     {
 
     public:
@@ -30,37 +32,32 @@ namespace OHOS
         virtual ~TraingView();
         static TraingView *GetInstance(void);
 
-        bool InitView();
+        void OnStart() override;
+        void OnSetUpView() override;
+        void OnTearDownView() override;
+        void OnStop() override;
+        void Init();
         void DeInit();
 
-        bool AddButton();
-        bool InitImage();
-        bool InitLable();
-
-        void PreLoad(void) override;
-        void UnLoad(void) override;
-
-        bool LoadImage(UIImageView *view, uint32_t resId);
-        bool LoadImage(UILabelButtonExt *view, uint32_t resId);
+        UIView *GetView();
 
     private:
         UIView::OnDragListener *draglistener{nullptr};
         TraingView(TraingView &&) = delete;
         TraingView &operator=(TraingView &&) = delete;
 
-        UILabelButtonExt *Button1 = nullptr;
-        UILabelButtonExt *Button2 = nullptr;
-        UILabelButtonExt *Button3 = nullptr;
-        UILabelButtonExt *ButtonMore = nullptr;
-
-        UILabel *titleLabel = nullptr;
-        UIImageView *image1 = nullptr;
-        UIImageView *image2 = nullptr;
-        UIImageView *image3 = nullptr;
-        UIImageView *imagemore = nullptr;
-
-        bool viewiInitStatus{false};
-        bool resLoadStatus{false};
+        UIViewGroup *container_ = nullptr;
+        UILabel *label1_ = nullptr;
+        UIButton *button3_ = nullptr;
+        UIButton *button4_ = nullptr;
+        UIButton *button1_ = nullptr;
+        UIButton *button2_ = nullptr;
+        UIImageView *image1_ = nullptr;
+        UILabel *label2_ = nullptr;
+        UIImageView *image3_ = nullptr;
+        UILabel *label3_ = nullptr;
+        UIImageView *image5_ = nullptr;
+        UILabel *label4_ = nullptr;
     };
 } // namespace OHOS
 #endif // Traing_PRESENTER_H
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingWinPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingWinPresenter.h
new file mode 100644 (file)
index 0000000..a034c77
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef _TraingWin_PRESENTER_H
+#define _TraingWin_PRESENTER_H
+
+#include "Presenter.h"
+#include "TraingWinView.h"
+
+namespace OHOS
+{
+    class TraingWinView;
+
+    class TraingWinPresenter : public Presenter<TraingWinView>,
+                                 public UIView::OnClickListener,
+                                 public UIView::OnDragListener
+    {
+    public:
+        TraingWinPresenter();
+        virtual ~TraingWinPresenter();
+
+        void OnStart() override;
+        void OnPause() override;
+        void OnResume() override;
+        void OnStop() override;
+
+        static TraingWinPresenter *GetInstance();
+
+    private:
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;
+        bool OnClick(UIView &view, const ClickEvent &event) override;
+        bool OnDrag(UIView &view, const DragEvent &event) override;
+    };
+} // namespace OHOS
+
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingWinView.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingWinView.h
new file mode 100644 (file)
index 0000000..0fc9d8f
--- /dev/null
@@ -0,0 +1,64 @@
+#ifndef _TraingWin_VIEW_H
+#define _TraingWin_VIEW_H
+
+#include "BaseView.h"
+#include "View.h"
+#include <ui_scroll_view.h>
+#include "components/ui_view_group.h"
+#include "components/ui_label.h"
+#include "components/ui_image_view.h"
+#include "components/ui_button.h"
+#include "components/ui_image_animator.h"
+#include "components/ui_label_button_ext.h"
+#include "components/ui_chart.h"
+#include "components/ui_list.h"
+#include "components/icon_adapter.h"
+#include "wearable_log.h"
+#include "ohos_types.h"
+#include "components/ui_card_page.h"
+
+#include "TraingWinPresenter.h"
+namespace OHOS
+{
+#define BUTTONOK "button1"
+
+    class TraingWinPresenter;
+    class TraingWinView : public View<TraingWinPresenter>
+    {
+
+    public:
+        TraingWinView();
+        virtual ~TraingWinView();
+        static TraingWinView *GetInstance(void);
+
+        void OnStart() override;
+        void OnSetUpView() override;
+        void OnTearDownView() override;
+        void OnStop() override;
+        void InitView();
+        void DeInit();
+
+        void InitImageAnimatorSource(UIImageAnimatorView *&imageAnimator, const char **imagePaths, int numFrames, int left, int top, int width, int height, const char *viewId,int time);
+        void InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize);
+        void InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId);
+        void InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath);
+        void InitList();
+        void PreLoad(void);
+
+    private:
+        UIView::OnDragListener *draglistener{nullptr};
+        TraingWinView(TraingWinView &&) = delete;
+        TraingWinView &operator=(TraingWinView &&) = delete;
+        UIViewGroup *container_ = nullptr;
+        UILabel *label1_ = nullptr;
+        UILabel *label2_ = nullptr;
+        UILabel *label3_ = nullptr;
+        UILabel *label4_ = nullptr;
+        UIButton *button1_ = nullptr;
+        UIImageView *image1_ = nullptr;
+        UIImageAnimatorView *imageAnimator;
+        bool viewiInitStatus{false};
+    };
+
+} // namespace OHOS
+#endif // TraingWin_PRESENTER_H
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingCardPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingCardPresenter.cpp
new file mode 100644 (file)
index 0000000..cac32c0
--- /dev/null
@@ -0,0 +1,79 @@
+#include "AppViewIDs.h"\r
+#include "NativeAbility.h"\r
+\r
+#include <iostream>\r
+#include <chrono>\r
+#include <thread>\r
+#include "traing/include/TraingCardPresenter.h"\r
+// #include "TraingCardView.h"\r
+\r
+namespace OHOS\r
+{\r
+\r
+    // 当前Presenter属性实例化的内存指针\r
+    static TraingCardPresenter *g_pTraingCardPresenter = nullptr;\r
+\r
+    TraingCardPresenter::TraingCardPresenter()\r
+    {\r
+\r
+        g_pTraingCardPresenter = this;\r
+    }\r
+\r
+    TraingCardPresenter::~TraingCardPresenter()\r
+    {\r
+\r
+        g_pTraingCardPresenter = nullptr;\r
+    }\r
+\r
+    TraingCardPresenter *TraingCardPresenter::GetInstance()\r
+    {\r
+\r
+        return g_pTraingCardPresenter;\r
+    }\r
+\r
+    void TraingCardPresenter::OnStart()\r
+    {\r
+\r
+        Presenter<TraingCardView>::OnStart();\r
+    }\r
+\r
+    void TraingCardPresenter::OnPause(void)\r
+    {\r
+\r
+        Presenter<TraingCardView>::OnPause();\r
+    }\r
+\r
+    void TraingCardPresenter::OnResume(void)\r
+    {\r
+\r
+        Presenter<TraingCardView>::OnResume();\r
+    }\r
+\r
+    void TraingCardPresenter::OnStop(void)\r
+    {\r
+\r
+        Presenter<TraingCardView>::OnStop();\r
+    }\r
+\r
+    bool TraingCardPresenter::OnDrag(UIView &view, const DragEvent &event)\r
+    {\r
+\r
+        if (event.GetDragDirection() == DragEvent::DIRECTION_BOTTOM_TO_TOP)\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGNOMAL);\r
+        }\r
+        UNUSED(view);\r
+        return true;\r
+    }\r
+\r
+    bool TraingCardPresenter::OnClick(UIView &view, const ClickEvent &event)\r
+    {\r
+        // 根据控件id查找是哪个控件触发了点击回调\r
+        // if (strcmp(view.GetViewId(), BUTTONSTOP) == 0)\r
+        // {\r
+        //     NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGNOMAL);\r
+        //     NativeAbility::GetInstance().\r
+        // }\r
+        return true;\r
+    }\r
+}\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingCardView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingCardView.cpp
new file mode 100644 (file)
index 0000000..422454b
--- /dev/null
@@ -0,0 +1,224 @@
+\r
+#include "traing/include/TraingCardView.h"\r
+#include "common/image_cache_manager.h"\r
+#include "UiConfig.h"\r
+#include "ui_resource_image.h"\r
+#include <ui_scroll_view.h>\r
+#include "components/ui_button.h"\r
+\r
+#include "common/screen.h"\r
+#include "components/ui_digital_clock.h"\r
+#include "components/ui_label.h"\r
+#include "font/ui_font.h"\r
+namespace OHOS\r
+{\r
+    static const uint16_t LABEL_FONT_SIZE = 200;\r
+    static const uint32_t BACK_GROUND_COLOR = 0xfff6f6f6;\r
+    static const uint32_t CARD_PAGE_COLOR = 0xffd0d0d0;\r
+\r
+    static TraingCardView *g_pTraingCardView{nullptr};\r
+\r
+    TraingCardView::TraingCardView()\r
+    {\r
+        g_pTraingCardView = this;\r
+    }\r
+\r
+    TraingCardView::~TraingCardView()\r
+    {\r
+        DeInit();\r
+        g_pTraingCardView = nullptr;\r
+    }\r
+\r
+    TraingCardView *TraingCardView::GetInstance()\r
+    {\r
+\r
+        return g_pTraingCardView;\r
+    }\r
+    /*\r
+    InitLabel:初始化标签\r
+    @param label 标签指针\r
+    @param left 标签左边位置\r
+    @param top 标签顶部位置\r
+    @param width 标签宽度\r
+    @param height 标签高度\r
+    @param viewId 标签的视图 ID\r
+    @param text 标签显示的文本\r
+    @param fontName 字体名称\r
+    @param fontSize 字体大小\r
+    */\r
+    void TraingCardView::InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize)\r
+    {\r
+        // 检查标签指针是否为空\r
+        if (label == nullptr)\r
+        {\r
+            label = new UILabel();\r
+        }\r
+        // 设置标签的位置和大小\r
+        label->SetPosition(left, top);\r
+        label->Resize(width, height);\r
+        // 设置标签的视图 ID\r
+        label->SetViewId(viewId);\r
+        // 设置标签的样式\r
+        label->SetStyle(STYLE_TEXT_FONT, fontSize);\r
+        label->SetFont(fontName, fontSize);\r
+        // 设置标签的文本和其他属性\r
+        label->SetText(text);\r
+        label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        label->SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x43, 0xff));\r
+        label->SetRollSpeed(0);\r
+        // 设置标签可见\r
+        label->SetVisible(true);\r
+    }\r
+    /*\r
+    InitButton:初始化按钮\r
+    @param button 按钮指针\r
+    @param left 按钮左边位置\r
+    @param top 按钮顶部位置\r
+    @param width 按钮宽度\r
+    @param height 按钮高度\r
+    @param viewId 按钮的视图 ID\r
+    */\r
+    void TraingCardView::InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId)\r
+    {\r
+        // 设置按钮的背景颜色\r
+        uint32_t backgroundColor = 0xff191919;        // 默认背景颜色\r
+        uint32_t pressedBackgroundColor = 0xff249115; // 按下时的背景颜色\r
+        uint32_t pressedBorderColor = 0xff0b1928;     // 按下时的边框颜色\r
+        // 创建新按钮(如果当前按钮为空)\r
+        if (button == nullptr)\r
+        {\r
+            button = new UIButton();\r
+        }\r
+        button->SetPosition(left, top);\r
+        button->Resize(width, height);\r
+        button->SetViewId(viewId);\r
+        button->SetStyle(STYLE_BACKGROUND_COLOR, backgroundColor);\r
+        button->SetStyleForState(STYLE_BACKGROUND_COLOR, pressedBackgroundColor, UIButton::PRESSED);\r
+        button->SetStyleForState(STYLE_BORDER_COLOR, pressedBorderColor, UIButton::PRESSED);\r
+        // 设置按钮的点击事件监听器为 TraingCardPresenter 的实例\r
+        button->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingCardPresenter::GetInstance()));\r
+        // 设置按钮可见\r
+        button->SetVisible(true);\r
+    }\r
+    /*\r
+   InitImageView:初始化图片\r
+   @param imageView 图片指针\r
+   @param left 图片左边位置\r
+   @param top 图片顶部位置\r
+   @param width 图片宽度\r
+   @param height 图片高度\r
+   @param viewId 图片的视图 ID\r
+   @param imagePath 图片路径\r
+   */\r
+    void TraingCardView::InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath)\r
+    {\r
+        if (imageView == nullptr)\r
+        {\r
+            imageView = new UIImageView();\r
+        }\r
+        imageView->SetPosition(left, top);\r
+        imageView->Resize(width, height);\r
+        imageView->SetViewId(viewId);\r
+        imageView->SetSrc(imagePath);\r
+        imageView->SetVisible(true);\r
+    }\r
+\r
+    /* InitView:初始化界面*/\r
+    void TraingCardView ::InitView()\r
+    {\r
+        if (swipe_ == nullptr)\r
+        {\r
+            swipe_ = new UISwipeView(UISwipeView::HORIZONTAL);\r
+            swipe_->SetPosition(0, 0, 466, 466);\r
+            swipe_->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
+        }\r
+\r
+        // 初始化Lable\r
+        InitLabel(label1_, 0, 55, 466, 466, "label1", "训练", DEFAULT_VECTOR_FONT_FILENAME, 200);\r
+        InitLabel(label2_, 0, 55, 466, 466, "label2", "暂停", DEFAULT_VECTOR_FONT_FILENAME, 200);\r
+        InitLabel(label3_, 0, 55, 466, 466, "label3", "结束", DEFAULT_VECTOR_FONT_FILENAME, 200);\r
+\r
+        swipe_->Add(label1_);\r
+        swipe_->Add(label2_);\r
+        swipe_->Add(label3_);\r
+    }\r
+\r
+    /* DeInit:删除组件 */\r
+    void TraingCardView::DeInit()\r
+    {\r
+        UIView *view = static_cast<UISwipeView *>(swipe_)->GetChildrenHead();\r
+        while (view != nullptr)\r
+        {\r
+            UIView *tempView = view;\r
+            view = view->GetNextSibling();\r
+            if (tempView->GetParent())\r
+            {\r
+                static_cast<UISwipeView *>(tempView->GetParent())->Remove(tempView);\r
+            }\r
+            delete tempView;\r
+        }\r
+        delete swipe_;\r
+        swipe_ = nullptr;\r
+    }\r
+\r
+    void TraingCardView::PreLoad(void)\r
+    {\r
+        if (!viewiInitStatus)\r
+        {\r
+            InitView();\r
+            viewiInitStatus = true;\r
+        }\r
+    }\r
+    void TraingCardView::OnStart()\r
+    {\r
+        swipe_ = new UISwipeView(UISwipeView::HORIZONTAL);\r
+        if (swipe_ == nullptr)\r
+        {\r
+            return;\r
+        }\r
+        swipe_->SetPosition(0, 0);\r
+        swipe_->SetWidth(Screen::GetInstance().GetWidth());\r
+        swipe_->SetHeight(Screen::GetInstance().GetHeight());\r
+\r
+        // 创建 draglistener 实例并设置为拖动监听器\r
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingCardPresenter::GetInstance());\r
+        if (draglistener == nullptr)\r
+        {\r
+            return;\r
+        }\r
+        swipe_->SetOnDragListener(draglistener);\r
+\r
+        swipe_->SetTouchable(true);\r
+        swipe_->SetDraggable(true);\r
+        swipe_->SetStyle(STYLE_BACKGROUND_COLOR, BACK_GROUND_COLOR);\r
+        swipe_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);\r
+        swipe_->SetBlankSize(0);\r
+        swipe_->SetReboundSize(200); // 200: rebound size\r
+        swipe_->SetElastic(true);\r
+\r
+        PreLoad();\r
+        RootView::GetInstance()->Add(swipe_);\r
+    }\r
+\r
+    void TraingCardView::OnSetUpView()\r
+    {\r
+\r
+        View<TraingCardPresenter>::OnSetUpView();\r
+        Draw();\r
+    }\r
+\r
+    void TraingCardView::OnTearDownView()\r
+    {\r
+        View<TraingCardPresenter>::OnTearDownView();\r
+        return;\r
+    }\r
+\r
+    void TraingCardView::OnStop()\r
+    {\r
+        View<TraingCardPresenter>::OnStop();\r
+        RootView::GetInstance()->RemoveAll();\r
+        return;\r
+    }\r
+\r
+}\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingControlPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingControlPresenter.cpp
new file mode 100644 (file)
index 0000000..a499f43
--- /dev/null
@@ -0,0 +1,100 @@
+#include "AppViewIDs.h"\r
+#include "NativeAbility.h"\r
+\r
+#include <iostream>\r
+#include <chrono>\r
+#include <thread>\r
+#include "traing/include/TraingControlPresenter.h"\r
+// #include "TraingControlView.h"\r
+\r
+namespace OHOS\r
+{\r
+\r
+    // 当前Presenter属性实例化的内存指针\r
+    static TraingControlPresenter *g_pTraingControlPresenter = nullptr;\r
+\r
+    TraingControlPresenter::TraingControlPresenter()\r
+    {\r
+\r
+        g_pTraingControlPresenter = this;\r
+    }\r
+\r
+    TraingControlPresenter::~TraingControlPresenter()\r
+    {\r
+\r
+        g_pTraingControlPresenter = nullptr;\r
+    }\r
+\r
+    TraingControlPresenter *TraingControlPresenter::GetInstance()\r
+    {\r
+\r
+        return g_pTraingControlPresenter;\r
+    }\r
+\r
+    void TraingControlPresenter::OnStart()\r
+    {\r
+\r
+        Presenter<TraingControlView>::OnStart();\r
+    }\r
+\r
+    void TraingControlPresenter::OnPause(void)\r
+    {\r
+\r
+        Presenter<TraingControlView>::OnPause();\r
+    }\r
+\r
+    void TraingControlPresenter::OnResume(void)\r
+    {\r
+\r
+        Presenter<TraingControlView>::OnResume();\r
+    }\r
+\r
+    void TraingControlPresenter::OnStop(void)\r
+    {\r
+\r
+        Presenter<TraingControlView>::OnStop();\r
+    }\r
+\r
+    bool TraingControlPresenter::OnDrag(UIView &view, const DragEvent &event)\r
+    {\r
+\r
+        if (event.GetDragDirection() == DragEvent::DIRECTION_RIGHT_TO_LEFT)\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGDATA);\r
+        }\r
+        UNUSED(view);\r
+        return true;\r
+    }\r
+\r
+    bool TraingControlPresenter::OnClick(UIView &view, const ClickEvent &event)\r
+    {\r
+        // 根据控件id查找是哪个控件触发了点击回调\r
+        if (strcmp(view.GetViewId(), BUTTONSTOP) == 0)\r
+        {\r
+            // 模拟训练\r
+            int random = rand() % 100; // 生成一个0~99的随机数\r
+            if (random < 70)\r
+            {\r
+                NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGENDNOTE2);\r
+            }\r
+            else\r
+            {\r
+                NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGENDNOTE);\r
+            }\r
+        }\r
+\r
+        printf("********* test:%s\n", test.c_str());\r
+        if (strcmp(view.GetViewId(), BUTTONPAUSE) == 0)\r
+        {\r
+            // 改变lable文字,button背景图片\r
+            // test如果等于继续那就变为暂停,反之;\r
+            test == "继续" ? test = "暂停" : test = "继续";\r
+            TraingControlView::GetInstance()->SetLabel();\r
+            TraingControlView::GetInstance()->SetButton();\r
+        }\r
+        printf("********* test:%s\n", test.c_str());\r
+        // TraingControlView::GetInstance()->InitView();\r
+\r
+        return true;\r
+    }\r
+}\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingControlView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingControlView.cpp
new file mode 100644 (file)
index 0000000..70123e6
--- /dev/null
@@ -0,0 +1,301 @@
+\r
+#include "traing/include/TraingControlView.h"\r
+\r
+#include "common/image_cache_manager.h"\r
+#include "UiConfig.h"\r
+#include "ui_resource_image.h"\r
+#include <ui_scroll_view.h>\r
+#include "components/ui_button.h"\r
+namespace OHOS\r
+{\r
+    static const char *imagePath_point = "/user/res/Training/control_point.bin";\r
+\r
+    static TraingControlView *g_pTraingControlView{nullptr};\r
+\r
+    TraingControlView::TraingControlView()\r
+    {\r
+        g_pTraingControlView = this;\r
+    }\r
+\r
+    TraingControlView::~TraingControlView()\r
+    {\r
+        DeInit();\r
+        g_pTraingControlView = nullptr;\r
+    }\r
+\r
+    TraingControlView *TraingControlView::GetInstance()\r
+    {\r
+\r
+        return g_pTraingControlView;\r
+    }\r
+    /*\r
+    InitLabel:初始化标签\r
+    @param label 标签指针\r
+    @param left 标签左边位置\r
+    @param top 标签顶部位置\r
+    @param width 标签宽度\r
+    @param height 标签高度\r
+    @param viewId 标签的视图 ID\r
+    @param text 标签显示的文本\r
+    @param fontName 字体名称\r
+    @param fontSize 字体大小\r
+    */\r
+    void TraingControlView::InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize)\r
+    {\r
+        // 检查标签指针是否为空\r
+        if (label == nullptr)\r
+        {\r
+            label = new UILabel();\r
+        }\r
+        // 设置标签的位置和大小\r
+        label->SetPosition(left, top);\r
+        label->Resize(width, height);\r
+        // 设置标签的视图 ID\r
+        label->SetViewId(viewId);\r
+        // 设置标签的样式\r
+        label->SetStyle(STYLE_TEXT_FONT, fontSize);\r
+        label->SetFont(fontName, fontSize);\r
+        // 设置标签的文本和其他属性\r
+        label->SetText(text);\r
+        label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        label->SetRollSpeed(0);\r
+        // 设置标签可见\r
+        label->SetVisible(true);\r
+    }\r
+    /*\r
+    InitButton:初始化按钮\r
+    @param button 按钮指针\r
+    @param left 按钮左边位置\r
+    @param top 按钮顶部位置\r
+    @param width 按钮宽度\r
+    @param height 按钮高度\r
+    @param viewId 按钮的视图 ID\r
+    */\r
+    void TraingControlView::InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId)\r
+    {\r
+        // 设置按钮的背景颜色\r
+        uint32_t backgroundColor = 0xff191919;        // 默认背景颜色\r
+        uint32_t pressedBackgroundColor = 0xff249115; // 按下时的背景颜色\r
+        uint32_t pressedBorderColor = 0xff0b1928;     // 按下时的边框颜色\r
+        // 创建新按钮(如果当前按钮为空)\r
+        if (button == nullptr)\r
+        {\r
+            button = new UIButton();\r
+        }\r
+        button->SetPosition(left, top);\r
+        button->Resize(width, height);\r
+        button->SetViewId(viewId);\r
+        button->SetStyle(STYLE_BACKGROUND_COLOR, backgroundColor);\r
+        button->SetStyleForState(STYLE_BACKGROUND_COLOR, pressedBackgroundColor, UIButton::PRESSED);\r
+        button->SetStyleForState(STYLE_BORDER_COLOR, pressedBorderColor, UIButton::PRESSED);\r
+        // 设置按钮的点击事件监听器为 TraingControlPresenter 的实例\r
+        button->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingControlPresenter::GetInstance()));\r
+        // 设置按钮可见\r
+        button->SetVisible(true);\r
+    }\r
+    /*\r
+   InitImageView:初始化图片\r
+   @param imageView 图片指针\r
+   @param left 图片左边位置\r
+   @param top 图片顶部位置\r
+   @param width 图片宽度\r
+   @param height 图片高度\r
+   @param viewId 图片的视图 ID\r
+   @param imagePath 图片路径\r
+   */\r
+    void TraingControlView::InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath)\r
+    {\r
+        if (imageView == nullptr)\r
+        {\r
+            imageView = new UIImageView();\r
+        }\r
+        imageView->SetPosition(left, top);\r
+        imageView->Resize(width, height);\r
+        imageView->SetViewId(viewId);\r
+        imageView->SetSrc(imagePath);\r
+        imageView->SetVisible(true);\r
+    }\r
+    /* InitView:初始化界面*/\r
+    void TraingControlView ::InitView()\r
+    {\r
+        if (container_ == nullptr)\r
+        {\r
+            container_ = new UIViewGroup();\r
+            container_->SetPosition(0, 0, 466, 466);\r
+            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
+        }\r
+\r
+        //  初始化Button\r
+        InitButton(button1_, 100, 202, 100, 100, BUTTONSTOP);\r
+        // Set additional property\r
+        char *button1defaultImgSrc = BUTTON_STOP_IMG_SRC;\r
+        char *button1triggeredImgSrc = nullptr;\r
+        button1_->SetImageSrc(button1defaultImgSrc, button1triggeredImgSrc);\r
+        container_->Add(button1_);\r
+\r
+        InitButton(button2_, 255, 202, 100, 100, BUTTONPAUSE);\r
+        // Set additional property\r
+        char *button2defaultImgSrc = BUTTON_PAUSE_IMG_SRC;\r
+        char *button2triggeredImgSrc = nullptr;\r
+        button2_->SetImageSrc(button2defaultImgSrc, button2triggeredImgSrc);\r
+        container_->Add(button2_);\r
+\r
+        // 初始化Lable\r
+        InitLabel(label1_, 188, 52, 90, 35, "label1", "训练中", DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        InitLabel(label2_, 98, 110, 60, 35, "label2", "00:00:00", DEFAULT_VECTOR_FONT_FILENAME, 65);\r
+        InitLabel(label3_, 125, 324, 60, 40, "label3", "结束", DEFAULT_VECTOR_FONT_FILENAME, 20);\r
+        InitLabel(label4_, 280, 324, 60, 40, "label4", "暂停", DEFAULT_VECTOR_FONT_FILENAME, 20);\r
+        container_->Add(label1_);\r
+        container_->Add(label2_);\r
+        container_->Add(label3_);\r
+        container_->Add(label4_);\r
+\r
+        // 初始化Image\r
+        InitImageView(image1_, 193, 421, 80, 20, "image1", imagePath_point);\r
+        container_->Add(image1_);\r
+    }\r
+\r
+    /******************************************************************************************************/\r
+    void TraingControlView::SetLabel()\r
+    {\r
+        if (TraingControlPresenter::GetInstance()->test == "继续")\r
+        {\r
+            label4_->SetText("继续");\r
+        }\r
+        else\r
+        {\r
+            label4_->SetText("暂停");\r
+        }\r
+    }\r
+\r
+    void TraingControlView::SetButton()\r
+    {\r
+        if (TraingControlPresenter::GetInstance()->test == "继续")\r
+        {\r
+            //button2_->SetViewId(BUTTONCONTINUE);\r
+            button2_->SetImageSrc(BUTTON_CONTINUE_IMG_SRC, nullptr);\r
+        }\r
+        if (TraingControlPresenter::GetInstance()->test == "暂停")\r
+        {\r
+            //button2_->SetViewId(BUTTONPAUSE);\r
+            button2_->SetImageSrc(BUTTON_PAUSE_IMG_SRC, nullptr);\r
+        }\r
+    }\r
+    /******************************************************************************************************/\r
+\r
+    /* DeInit:删除组件 */\r
+    void TraingControlView::DeInit()\r
+    {\r
+        // 删除Label\r
+        if (label1_ != nullptr)\r
+        {\r
+            container_->Remove(label1_);\r
+            delete label1_;\r
+            label1_ = nullptr;\r
+        }\r
+        if (label2_ != nullptr)\r
+        {\r
+            container_->Remove(label2_);\r
+            delete label2_;\r
+            label2_ = nullptr;\r
+        }\r
+        if (label3_ != nullptr)\r
+        {\r
+            container_->Remove(label3_);\r
+            delete label3_;\r
+            label3_ = nullptr;\r
+        }\r
+        if (label4_ != nullptr)\r
+        {\r
+            container_->Remove(label4_);\r
+            delete label4_;\r
+            label4_ = nullptr;\r
+        }\r
+\r
+        // 删除Button\r
+        if (button1_ != nullptr)\r
+        {\r
+            container_->Remove(button1_);\r
+            delete button1_;\r
+            button1_ = nullptr;\r
+        }\r
+        if (button2_ != nullptr)\r
+        {\r
+            container_->Remove(button2_);\r
+            delete button2_;\r
+            button2_ = nullptr;\r
+        }\r
+\r
+        // 删除Image\r
+        if (image1_ != nullptr)\r
+        {\r
+            container_->Remove(image1_);\r
+            delete image1_;\r
+            image1_ = nullptr;\r
+        }\r
+\r
+        // 删除容器\r
+        if (container_ != nullptr)\r
+        {\r
+            container_->RemoveAll(); // 移除容器中的所有组件\r
+            delete container_;\r
+            container_ = nullptr;\r
+        }\r
+    }\r
+\r
+    void TraingControlView::PreLoad(void)\r
+    {\r
+        if (!viewiInitStatus)\r
+        {\r
+            InitView();\r
+            viewiInitStatus = true;\r
+        }\r
+    }\r
+    void TraingControlView::OnStart()\r
+    {\r
+        container_ = new UIViewGroup();\r
+        if (container_ == nullptr)\r
+        {\r
+            return;\r
+        }\r
+        container_->SetPosition(0, 0);\r
+        container_->SetWidth(Screen::GetInstance().GetWidth());\r
+        container_->SetHeight(Screen::GetInstance().GetHeight());\r
+\r
+        // 创建 draglistener 实例并设置为拖动监听器\r
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingControlPresenter::GetInstance());\r
+        if (draglistener == nullptr)\r
+        {\r
+            return;\r
+        }\r
+        container_->SetOnDragListener(draglistener);\r
+\r
+        container_->SetTouchable(true);\r
+        container_->SetDraggable(true);\r
+\r
+        PreLoad();\r
+        RootView::GetInstance()->Add(container_);\r
+    }\r
+\r
+    void TraingControlView::OnSetUpView()\r
+    {\r
+\r
+        View<TraingControlPresenter>::OnSetUpView();\r
+        Draw();\r
+    }\r
+\r
+    void TraingControlView::OnTearDownView()\r
+    {\r
+\r
+        View<TraingControlPresenter>::OnTearDownView();\r
+        return;\r
+    }\r
+\r
+    void TraingControlView::OnStop()\r
+    {\r
+        View<TraingControlPresenter>::OnStop();\r
+        RootView::GetInstance()->RemoveAll();\r
+        return;\r
+    }\r
+}\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingDataPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingDataPresenter.cpp
new file mode 100644 (file)
index 0000000..6078f2c
--- /dev/null
@@ -0,0 +1,76 @@
+#include "AppViewIDs.h"\r
+#include "NativeAbility.h"\r
+\r
+#include <iostream>\r
+#include <chrono>\r
+#include <thread>\r
+#include "traing/include/TraingDataPresenter.h"\r
+// #include "TraingDataView.h"\r
+\r
+namespace OHOS\r
+{\r
+\r
+    // 当前Presenter属性实例化的内存指针\r
+    static TraingDataPresenter *g_pTraingDataPresenter = nullptr;\r
+\r
+    TraingDataPresenter::TraingDataPresenter()\r
+    {\r
+        g_pTraingDataPresenter = this;\r
+    }\r
+\r
+    TraingDataPresenter::~TraingDataPresenter()\r
+    {\r
+        g_pTraingDataPresenter = nullptr;\r
+    }\r
+\r
+    TraingDataPresenter *TraingDataPresenter::GetInstance()\r
+    {\r
+        return g_pTraingDataPresenter;\r
+    }\r
+\r
+    void TraingDataPresenter::OnStart()\r
+    {\r
+        Presenter<TraingDataView>::OnStart();\r
+    }\r
+\r
+    void TraingDataPresenter::OnPause(void)\r
+    {\r
+        Presenter<TraingDataView>::OnPause();\r
+    }\r
+\r
+    void TraingDataPresenter::OnResume(void)\r
+    {\r
+        Presenter<TraingDataView>::OnResume();\r
+    }\r
+\r
+    void TraingDataPresenter::OnStop(void)\r
+    {\r
+        Presenter<TraingDataView>::OnStop();\r
+    }\r
+\r
+    bool TraingDataPresenter::OnDrag(UIView &view, const DragEvent &event)\r
+    {\r
+\r
+        if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&\r
+            (event.GetDeltaX() > 20) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCONTROL);\r
+        }\r
+        if (event.GetDragDirection() == DragEvent::DIRECTION_BOTTOM_TO_TOP)\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGDETAIL);\r
+        }\r
+        UNUSED(view);\r
+        return true;\r
+    }\r
+\r
+    bool TraingDataPresenter::OnClick(UIView &view, const ClickEvent &event)\r
+    {\r
+        // 根据控件id查找是哪个控件触发了点击回调\r
+        if (strcmp(view.GetViewId(), BUTTONNOTE) == 0)\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGSTRONG);\r
+        }\r
+        return true;\r
+    }\r
+}\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingDataView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingDataView.cpp
new file mode 100644 (file)
index 0000000..8a184e7
--- /dev/null
@@ -0,0 +1,237 @@
+\r
+#include "traing/include/TraingDataView.h"\r
+\r
+#include "common/image_cache_manager.h"\r
+#include "UiConfig.h"\r
+#include "ui_resource_image.h"\r
+#include <ui_scroll_view.h>\r
+#include "components/ui_button.h"\r
+namespace OHOS\r
+{\r
+    static const char *imagePath_point = "/user/res/Training/data_point.bin";\r
+    static const char *imagePath_progress = "/user/res/Training/progress.bin";\r
+    static const char *imagePath_incoup = "/user/res/Training/inco_up.bin";\r
+    static const char *imagePath_arrows = "/user/res/Training/arrows.bin";\r
+    static const char *imagePath_strength = "/user/res/Training/sport-strength.bin";\r
+    static const char *imagePath_note = "/user/res/Training/note.bin";\r
+\r
+    static TraingDataView *g_pTraingDataView{nullptr};\r
+\r
+    TraingDataView::TraingDataView()\r
+    {\r
+        g_pTraingDataView = this;\r
+    }\r
+\r
+    TraingDataView::~TraingDataView()\r
+    {\r
+        DeInit();\r
+        g_pTraingDataView = nullptr;\r
+    }\r
+\r
+    TraingDataView *TraingDataView::GetInstance()\r
+    {\r
+\r
+        return g_pTraingDataView;\r
+    }\r
+    /*\r
+    InitLabel:初始化标签\r
+    @param label 标签指针\r
+    @param left 标签左边位置\r
+    @param top 标签顶部位置\r
+    @param width 标签宽度\r
+    @param height 标签高度\r
+    @param viewId 标签的视图 ID\r
+    @param text 标签显示的文本\r
+    @param fontName 字体名称\r
+    @param fontSize 字体大小\r
+    */\r
+    void TraingDataView::InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize)\r
+    {\r
+        // 检查标签指针是否为空\r
+        if (label == nullptr)\r
+        {\r
+            label = new UILabel();\r
+        }\r
+        // 设置标签的位置和大小\r
+        label->SetPosition(left, top);\r
+        label->Resize(width, height);\r
+        // 设置标签的视图 ID\r
+        label->SetViewId(viewId);\r
+        // 设置标签的样式\r
+        label->SetStyle(STYLE_TEXT_FONT, fontSize);\r
+        label->SetFont(fontName, fontSize);\r
+        // 设置标签的文本和其他属性\r
+        label->SetText(text);\r
+        label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        label->SetRollSpeed(0);\r
+        // 设置标签可见\r
+        label->SetVisible(true);\r
+    }\r
+    /*\r
+    InitButton:初始化按钮\r
+    @param button 按钮指针\r
+    @param left 按钮左边位置\r
+    @param top 按钮顶部位置\r
+    @param width 按钮宽度\r
+    @param height 按钮高度\r
+    @param viewId 按钮的视图 ID\r
+    */\r
+    void TraingDataView::InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId)\r
+    {\r
+        // 设置按钮的背景颜色\r
+        uint32_t backgroundColor = 0xff191919;        // 默认背景颜色\r
+        uint32_t pressedBackgroundColor = 0xff249115; // 按下时的背景颜色\r
+        uint32_t pressedBorderColor = 0xff0b1928;     // 按下时的边框颜色\r
+        // 创建新按钮(如果当前按钮为空)\r
+        if (button == nullptr)\r
+        {\r
+            button = new UIButton();\r
+        }\r
+        button->SetPosition(left, top);\r
+        button->Resize(width, height);\r
+        button->SetViewId(viewId);\r
+        button->SetStyle(STYLE_BACKGROUND_COLOR, backgroundColor);\r
+        button->SetStyleForState(STYLE_BACKGROUND_COLOR, pressedBackgroundColor, UIButton::PRESSED);\r
+        button->SetStyleForState(STYLE_BORDER_COLOR, pressedBorderColor, UIButton::PRESSED);\r
+        // 设置按钮的点击事件监听器为 TraingDataPresenter 的实例\r
+        button->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingDataPresenter::GetInstance()));\r
+        // 设置按钮可见\r
+        button->SetVisible(true);\r
+    }\r
+    /*\r
+   InitImageView:初始化图片\r
+   @param imageView 图片指针\r
+   @param left 图片左边位置\r
+   @param top 图片顶部位置\r
+   @param width 图片宽度\r
+   @param height 图片高度\r
+   @param viewId 图片的视图 ID\r
+   @param imagePath 图片路径\r
+   */\r
+    void TraingDataView::InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath)\r
+    {\r
+        if (imageView == nullptr)\r
+        {\r
+            imageView = new UIImageView();\r
+        }\r
+        imageView->SetPosition(left, top);\r
+        imageView->Resize(width, height);\r
+        imageView->SetViewId(viewId);\r
+        imageView->SetSrc(imagePath);\r
+        imageView->SetVisible(true);\r
+    }\r
+    /* InitView:初始化界面*/\r
+    void TraingDataView ::InitView()\r
+    {\r
+        if (container_ == nullptr)\r
+        {\r
+            container_ = new UIViewGroup();\r
+            container_->SetPosition(0, 0, 466, 466);\r
+            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
+        }\r
+\r
+        // 初始化Image\r
+        InitImageView(image1_, 13, 13, 440, 386, "image1", imagePath_progress);\r
+        InitImageView(image2_, 208, 297, 20, 20, "image2", imagePath_arrows);\r
+        InitImageView(image3_, 98, 314, 270, 20, "image3", imagePath_strength);\r
+        InitImageView(image4_, 225, 396, 16, 10, "image4", imagePath_incoup);\r
+        InitImageView(image5_, 193, 421, 80, 20, "image5", imagePath_point);\r
+        container_->Add(image1_);\r
+        container_->Add(image2_);\r
+        container_->Add(image3_);\r
+        container_->Add(image4_);\r
+        container_->Add(image5_);\r
+        // 初始化Lable\r
+        InitLabel(label1_, 185, 60, 90, 35, "label1", "23:54", DEFAULT_VECTOR_FONT_FILENAME, 40);\r
+        InitLabel(label2_, 158, 120, 150, 35, "label2", "跳绳运动中", DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        InitLabel(label3_, 90, 175, 60, 40, "label3", "00:31:26", DEFAULT_VECTOR_FONT_FILENAME, 80);\r
+        InitLabel(label4_, 150, 276, 60, 40, "label4", "144", DEFAULT_VECTOR_FONT_FILENAME, 23);\r
+        InitLabel(label5_, 167, 350, 60, 40, "label4", "中等强度", DEFAULT_VECTOR_FONT_FILENAME, 26);\r
+        container_->Add(label1_);\r
+        container_->Add(label2_);\r
+        container_->Add(label3_);\r
+        container_->Add(label4_);\r
+        container_->Add(label5_);\r
+        //  初始化Button\r
+        InitButton(button1_, 275, 350, 26, 26, BUTTONNOTE);\r
+        // Set additional property\r
+        static const char *button1defaultImgSrc = imagePath_note;\r
+        char *button1triggeredImgSrc = nullptr;\r
+        button1_->SetImageSrc(button1defaultImgSrc, button1triggeredImgSrc);\r
+        container_->Add(button1_);\r
+    }\r
+\r
+    /* DeInit:删除组件 */\r
+    void TraingDataView::DeInit()\r
+    {\r
+        UIView *view = static_cast<UIViewGroup *>(container_)->GetChildrenHead();\r
+        while (view != nullptr)\r
+        {\r
+            UIView *tempView = view;\r
+            view = view->GetNextSibling();\r
+            if (tempView->GetParent())\r
+            {\r
+                static_cast<UIViewGroup *>(tempView->GetParent())->Remove(tempView);\r
+            }\r
+            delete tempView;\r
+        }\r
+        delete container_;\r
+        container_ = nullptr;\r
+    }\r
+\r
+    void TraingDataView::PreLoad(void)\r
+    {\r
+        if (!viewiInitStatus)\r
+        {\r
+            InitView();\r
+            viewiInitStatus = true;\r
+        }\r
+    }\r
+    void TraingDataView::OnStart()\r
+    {\r
+        container_ = new UIViewGroup();\r
+        if (container_ == nullptr)\r
+        {\r
+            return;\r
+        }\r
+        container_->SetPosition(0, 0);\r
+        container_->SetWidth(Screen::GetInstance().GetWidth());\r
+        container_->SetHeight(Screen::GetInstance().GetHeight());\r
+\r
+        // 创建 draglistener 实例并设置为拖动监听器\r
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingDataPresenter::GetInstance());\r
+        if (draglistener == nullptr)\r
+        {\r
+            return;\r
+        }\r
+        container_->SetOnDragListener(draglistener);\r
+\r
+        container_->SetTouchable(true);\r
+        container_->SetDraggable(true);\r
+\r
+        PreLoad();\r
+        RootView::GetInstance()->Add(container_);\r
+    }\r
+\r
+    void TraingDataView::OnSetUpView()\r
+    {\r
+\r
+        View<TraingDataPresenter>::OnSetUpView();\r
+        Draw();\r
+    }\r
+\r
+    void TraingDataView::OnTearDownView()\r
+    {\r
+\r
+        View<TraingDataPresenter>::OnTearDownView();\r
+        return;\r
+    }\r
+\r
+    void TraingDataView::OnStop()\r
+    {\r
+        View<TraingDataPresenter>::OnStop();\r
+        RootView::GetInstance()->RemoveAll();\r
+        return;\r
+    }\r
+}\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingDetailPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingDetailPresenter.cpp
new file mode 100644 (file)
index 0000000..f473ff1
--- /dev/null
@@ -0,0 +1,74 @@
+#include "AppViewIDs.h"\r
+#include "NativeAbility.h"\r
+\r
+#include <iostream>\r
+#include <chrono>\r
+#include <thread>\r
+#include "traing/include/TraingDetailPresenter.h"\r
+// #include "TraingDetailView.h"\r
+\r
+namespace OHOS\r
+{\r
+\r
+    // 当前Presenter属性实例化的内存指针\r
+    static TraingDetailPresenter *g_pTraingDetailPresenter = nullptr;\r
+\r
+    TraingDetailPresenter::TraingDetailPresenter()\r
+    {\r
+\r
+        g_pTraingDetailPresenter = this;\r
+    }\r
+\r
+    TraingDetailPresenter::~TraingDetailPresenter()\r
+    {\r
+\r
+        g_pTraingDetailPresenter = nullptr;\r
+    }\r
+\r
+    TraingDetailPresenter *TraingDetailPresenter::GetInstance()\r
+    {\r
+\r
+        return g_pTraingDetailPresenter;\r
+    }\r
+\r
+    void TraingDetailPresenter::OnStart()\r
+    {\r
+\r
+        Presenter<TraingDetailView>::OnStart();\r
+    }\r
+\r
+    void TraingDetailPresenter::OnPause(void)\r
+    {\r
+\r
+        Presenter<TraingDetailView>::OnPause();\r
+    }\r
+\r
+    void TraingDetailPresenter::OnResume(void)\r
+    {\r
+\r
+        Presenter<TraingDetailView>::OnResume();\r
+    }\r
+\r
+    void TraingDetailPresenter::OnStop(void)\r
+    {\r
+\r
+        Presenter<TraingDetailView>::OnStop();\r
+    }\r
+\r
+    bool TraingDetailPresenter::OnDrag(UIView &view, const DragEvent &event)\r
+    {\r
+\r
+        if (event.GetDragDirection() == DragEvent::DIRECTION_TOP_TO_BOTTOM)\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGDATA);\r
+        }\r
+        UNUSED(view);\r
+        return true;\r
+    }\r
+\r
+    bool TraingDetailPresenter::OnClick(UIView &view, const ClickEvent &event)\r
+    {\r
+        // 根据控件id查找是哪个控件触发了点击回调\r
+        return true;\r
+    }\r
+}\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingDetailView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingDetailView.cpp
new file mode 100644 (file)
index 0000000..2f08671
--- /dev/null
@@ -0,0 +1,240 @@
+\r
+#include "traing/include/TraingDetailView.h"\r
+\r
+#include "common/image_cache_manager.h"\r
+#include "UiConfig.h"\r
+#include "ui_resource_image.h"\r
+#include <ui_scroll_view.h>\r
+#include "components/ui_button.h"\r
+namespace OHOS\r
+{\r
+    static const char *imagePath_heartrate = "/user/res/Training/heartrat_30.bin";\r
+    static const char *imagePath_mileage = "/user/res/Training/mileage_30.bin";\r
+    static const char *imagePath_step = "/user/res/Training/step_30.bin";\r
+    static const char *imagePath_calories = "/user/res/Training/calories_30.bin";\r
+    static const char *imagePath_line1 = "/user/res/Training/Line 1.bin";\r
+    static const char *imagePath_line2 = "/user/res/Training/Line 2.bin";\r
+\r
+    static TraingDetailView *g_pTraingDetailView{nullptr};\r
+\r
+    TraingDetailView::TraingDetailView()\r
+    {\r
+        g_pTraingDetailView = this;\r
+    }\r
+\r
+    TraingDetailView::~TraingDetailView()\r
+    {\r
+        DeInit();\r
+        g_pTraingDetailView = nullptr;\r
+    }\r
+\r
+    TraingDetailView *TraingDetailView::GetInstance()\r
+    {\r
+\r
+        return g_pTraingDetailView;\r
+    }\r
+    /*\r
+    InitLabel:初始化标签\r
+    @param label 标签指针\r
+    @param left 标签左边位置\r
+    @param top 标签顶部位置\r
+    @param width 标签宽度\r
+    @param height 标签高度\r
+    @param viewId 标签的视图 ID\r
+    @param text 标签显示的文本\r
+    @param fontName 字体名称\r
+    @param fontSize 字体大小\r
+    */\r
+    void TraingDetailView::InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize)\r
+    {\r
+        // 检查标签指针是否为空\r
+        if (label == nullptr)\r
+        {\r
+            label = new UILabel();\r
+        }\r
+        // 设置标签的位置和大小\r
+        label->SetPosition(left, top);\r
+        label->Resize(width, height);\r
+        // 设置标签的视图 ID\r
+        label->SetViewId(viewId);\r
+        // 设置标签的样式\r
+        label->SetStyle(STYLE_TEXT_FONT, fontSize);\r
+        label->SetFont(fontName, fontSize);\r
+        // 设置标签的文本和其他属性\r
+        label->SetText(text);\r
+        label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        label->SetRollSpeed(0);\r
+        // 设置标签可见\r
+        label->SetVisible(true);\r
+    }\r
+    /*\r
+    InitButton:初始化按钮\r
+    @param button 按钮指针\r
+    @param left 按钮左边位置\r
+    @param top 按钮顶部位置\r
+    @param width 按钮宽度\r
+    @param height 按钮高度\r
+    @param viewId 按钮的视图 ID\r
+    */\r
+    void TraingDetailView::InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId)\r
+    {\r
+        // 设置按钮的背景颜色\r
+        uint32_t backgroundColor = 0xff191919;        // 默认背景颜色\r
+        uint32_t pressedBackgroundColor = 0xff249115; // 按下时的背景颜色\r
+        uint32_t pressedBorderColor = 0xff0b1928;     // 按下时的边框颜色\r
+        // 创建新按钮(如果当前按钮为空)\r
+        if (button == nullptr)\r
+        {\r
+            button = new UIButton();\r
+        }\r
+        button->SetPosition(left, top);\r
+        button->Resize(width, height);\r
+        button->SetViewId(viewId);\r
+        button->SetStyle(STYLE_BACKGROUND_COLOR, backgroundColor);\r
+        button->SetStyleForState(STYLE_BACKGROUND_COLOR, pressedBackgroundColor, UIButton::PRESSED);\r
+        button->SetStyleForState(STYLE_BORDER_COLOR, pressedBorderColor, UIButton::PRESSED);\r
+        // 设置按钮的点击事件监听器为 TraingDetailPresenter 的实例\r
+        button->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingDetailPresenter::GetInstance()));\r
+        // 设置按钮可见\r
+        button->SetVisible(true);\r
+    }\r
+    /*\r
+   InitImageView:初始化图片\r
+   @param imageView 图片指针\r
+   @param left 图片左边位置\r
+   @param top 图片顶部位置\r
+   @param width 图片宽度\r
+   @param height 图片高度\r
+   @param viewId 图片的视图 ID\r
+   @param imagePath 图片路径\r
+   */\r
+    void TraingDetailView::InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath)\r
+    {\r
+        if (imageView == nullptr)\r
+        {\r
+            imageView = new UIImageView();\r
+        }\r
+        imageView->SetPosition(left, top);\r
+        imageView->Resize(width, height);\r
+        imageView->SetViewId(viewId);\r
+        imageView->SetSrc(imagePath);\r
+        imageView->SetVisible(true);\r
+    }\r
+    /* InitView:初始化界面*/\r
+    void TraingDetailView ::InitView()\r
+    {\r
+        if (container_ == nullptr)\r
+        {\r
+            container_ = new UIViewGroup();\r
+            container_->SetPosition(0, 0, 466, 466);\r
+            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
+        }\r
+\r
+        // 初始化Image\r
+        InitImageView(image1_, 134, 58, 30, 30, "image1", imagePath_heartrate);\r
+        InitImageView(image2_, 44, 189, 30, 30, "image2", imagePath_mileage);\r
+        InitImageView(image3_, 297, 189, 30, 30, "image3", imagePath_step);\r
+        InitImageView(image4_, 129, 335, 30, 30, "image4", imagePath_calories);\r
+        InitImageView(image5_, 0, 160, 10, 466, "image5", imagePath_line1);\r
+        InitImageView(image6_, 233, 193, 80, 20, "image5", imagePath_line2);\r
+        InitImageView(image7_, 0, 306, 10, 466, "image5", imagePath_line1);\r
+        container_->Add(image1_);\r
+        container_->Add(image2_);\r
+        container_->Add(image3_);\r
+        container_->Add(image4_);\r
+        container_->Add(image5_);\r
+        container_->Add(image6_);\r
+        container_->Add(image7_);\r
+        // 初始化Lable\r
+        InitLabel(label1_, 174, 60, 90, 35, "label1", "心率(次/分)", DEFAULT_VECTOR_FONT_FILENAME, 26);\r
+        InitLabel(label2_, 80, 190, 60, 40, "label2", "距离(公里)", DEFAULT_VECTOR_FONT_FILENAME, 26);\r
+        InitLabel(label3_, 332, 189, 60, 40, "label3", "步数", DEFAULT_VECTOR_FONT_FILENAME, 26);\r
+        InitLabel(label4_, 167, 336, 60, 40, "label4", "卡路里(千卡)", DEFAULT_VECTOR_FONT_FILENAME, 26);\r
+        InitLabel(label5_, 202, 94, 60, 40, "label5", "144", DEFAULT_VECTOR_FONT_FILENAME, 40);\r
+        InitLabel(label6_, 76, 233, 60, 40, "label6", "13.21", DEFAULT_VECTOR_FONT_FILENAME, 40);\r
+        InitLabel(label7_, 300, 233, 60, 40, "label7", "28312", DEFAULT_VECTOR_FONT_FILENAME, 40);\r
+        InitLabel(label8_, 175, 376, 60, 40, "label8", "210.03", DEFAULT_VECTOR_FONT_FILENAME, 40);\r
+        container_->Add(label1_);\r
+        container_->Add(label2_);\r
+        container_->Add(label3_);\r
+        container_->Add(label4_);\r
+        container_->Add(label5_);\r
+        container_->Add(label6_);\r
+        container_->Add(label7_);\r
+        container_->Add(label8_);\r
+    }\r
+\r
+    /* DeInit:删除组件 */\r
+    void TraingDetailView::DeInit()\r
+    {\r
+        UIView *view = static_cast<UIViewGroup *>(container_)->GetChildrenHead();\r
+        while (view != nullptr)\r
+        {\r
+            UIView *tempView = view;\r
+            view = view->GetNextSibling();\r
+            if (tempView->GetParent())\r
+            {\r
+                static_cast<UIViewGroup *>(tempView->GetParent())->Remove(tempView);\r
+            }\r
+            delete tempView;\r
+        }\r
+        delete container_;\r
+        container_ = nullptr;\r
+    }\r
+\r
+    void TraingDetailView::PreLoad(void)\r
+    {\r
+        if (!viewiInitStatus)\r
+        {\r
+            InitView();\r
+            viewiInitStatus = true;\r
+        }\r
+    }\r
+    void TraingDetailView::OnStart()\r
+    {\r
+        container_ = new UIViewGroup();\r
+        if (container_ == nullptr)\r
+        {\r
+            return;\r
+        }\r
+        container_->SetPosition(0, 0);\r
+        container_->SetWidth(Screen::GetInstance().GetWidth());\r
+        container_->SetHeight(Screen::GetInstance().GetHeight());\r
+\r
+        // 创建 draglistener 实例并设置为拖动监听器\r
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingDetailPresenter::GetInstance());\r
+        if (draglistener == nullptr)\r
+        {\r
+            return;\r
+        }\r
+        container_->SetOnDragListener(draglistener);\r
+\r
+        container_->SetTouchable(true);\r
+        container_->SetDraggable(true);\r
+\r
+        PreLoad();\r
+        RootView::GetInstance()->Add(container_);\r
+    }\r
+\r
+    void TraingDetailView::OnSetUpView()\r
+    {\r
+\r
+        View<TraingDetailPresenter>::OnSetUpView();\r
+        Draw();\r
+    }\r
+\r
+    void TraingDetailView::OnTearDownView()\r
+    {\r
+\r
+        View<TraingDetailPresenter>::OnTearDownView();\r
+        return;\r
+    }\r
+\r
+    void TraingDetailView::OnStop()\r
+    {\r
+        View<TraingDetailPresenter>::OnStop();\r
+        RootView::GetInstance()->RemoveAll();\r
+        return;\r
+    }\r
+}\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataPresenter.cpp
new file mode 100644 (file)
index 0000000..f469d6d
--- /dev/null
@@ -0,0 +1,79 @@
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+
+#include <iostream>
+#include <chrono>
+#include <thread>
+#include "traing/include/TraingEnddataPresenter.h"
+// #include "TraingEnddataView.h"
+
+namespace OHOS
+{
+
+    // 当前Presenter属性实例化的内存指针
+    static TraingEnddataPresenter *g_pTraingEnddataPresenter = nullptr;
+
+    TraingEnddataPresenter::TraingEnddataPresenter()
+    {
+
+        g_pTraingEnddataPresenter = this;
+    }
+
+    TraingEnddataPresenter::~TraingEnddataPresenter()
+    {
+
+        g_pTraingEnddataPresenter = nullptr;
+    }
+
+    TraingEnddataPresenter *TraingEnddataPresenter::GetInstance()
+    {
+
+        return g_pTraingEnddataPresenter;
+    }
+
+    void TraingEnddataPresenter::OnStart()
+    {
+
+        Presenter<TraingEnddataView>::OnStart();
+    }
+
+    void TraingEnddataPresenter::OnPause(void)
+    {
+
+        Presenter<TraingEnddataView>::OnPause();
+    }
+
+    void TraingEnddataPresenter::OnResume(void)
+    {
+
+        Presenter<TraingEnddataView>::OnResume();
+    }
+
+    void TraingEnddataPresenter::OnStop(void)
+    {
+
+        Presenter<TraingEnddataView>::OnStop();
+    }
+
+    bool TraingEnddataPresenter::OnDrag(UIView &view, const DragEvent &event)
+    {
+
+        // if (event.GetDragDirection() == DragEvent::DIRECTION_TOP_TO_BOTTOM)
+        // {
+        //     NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGDATA);
+        // }
+        UNUSED(view);
+        return true;
+    }
+
+    bool TraingEnddataPresenter::OnClick(UIView &view, const ClickEvent &event)
+    {
+
+        // 根据控件id查找是哪个控件触发了点击回调
+        if (strcmp(view.GetViewId(), BUTTONBACK) == 0)
+        {
+            //NativeAbility::GetInstance().ChangeSlice(VIEW_TRAINING);
+        }
+        return true;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataView.cpp
new file mode 100644 (file)
index 0000000..db4f865
--- /dev/null
@@ -0,0 +1,319 @@
+
+#include "traing/include/TraingEnddataView.h"
+
+#include "common/image_cache_manager.h"
+#include "UiConfig.h"
+#include "ui_resource_image.h"
+#include <ui_scroll_view.h>
+#include "components/ui_button.h"
+namespace OHOS
+{
+    static const char *imagePath_path = "/user/res/Training/path.bin";
+    static const char *imagePath_bubble = "/user/res/Training/bubble.bin";
+    static const char *imagePath_bubblepiont = "/user/res/Training/bubble_piont.bin";
+    static const char *imagePath_Line = "/user/res/Training/Line.bin";
+    static const char *imagePath_spot = "/user/res/Training/Walking_54.bin";
+    static const char *imagePath_incoup = "/user/res/Training/inco_up_40.bin";
+
+    static TraingEnddataView *g_pTraingEnddataView{nullptr};
+
+    TraingEnddataView::TraingEnddataView()
+    {
+        g_pTraingEnddataView = this;
+    }
+
+    TraingEnddataView::~TraingEnddataView()
+    {
+        DeInit();
+        g_pTraingEnddataView = nullptr;
+    }
+
+    TraingEnddataView *TraingEnddataView::GetInstance()
+    {
+
+        return g_pTraingEnddataView;
+    }
+
+    /*
+    InitLabel:初始化标签
+    @param label 标签指针
+    @param left 标签左边位置
+    @param top 标签顶部位置
+    @param width 标签宽度
+    @param height 标签高度
+    @param viewId 标签的视图 ID
+    @param text 标签显示的文本
+    @param fontName 字体名称
+    @param fontSize 字体大小
+    */
+    void TraingEnddataView::InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize)
+    {
+        // 检查标签指针是否为空
+        if (label == nullptr)
+        {
+            label = new UILabel();
+        }
+        // 设置标签的位置和大小
+        label->SetPosition(left, top);
+        label->Resize(width, height);
+        // 设置标签的视图 ID
+        label->SetViewId(viewId);
+        // 设置标签的样式
+        label->SetStyle(STYLE_TEXT_FONT, fontSize);
+        label->SetFont(fontName, fontSize);
+        // 设置标签的文本和其他属性
+        label->SetText(text);
+        label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+        label1_->SetTextColor(Color::GetColorFromRGBA(0x22, 0x9d, 0xd3, 0xff));
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        label->SetRollSpeed(0);
+        // 设置标签可见
+        label->SetVisible(true);
+    }
+    /*
+    InitButton:初始化按钮
+    @param button 按钮指针
+    @param left 按钮左边位置
+    @param top 按钮顶部位置
+    @param width 按钮宽度
+    @param height 按钮高度
+    @param viewId 按钮的视图 ID
+    */
+    void TraingEnddataView::InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId)
+    {
+        // 设置按钮的背景颜色
+        uint32_t backgroundColor = 0xff191919;        // 默认背景颜色
+        uint32_t pressedBackgroundColor = 0xff249115; // 按下时的背景颜色
+        uint32_t pressedBorderColor = 0xff0b1928;     // 按下时的边框颜色
+        // 创建新按钮(如果当前按钮为空)
+        if (button == nullptr)
+        {
+            button = new UIButton();
+        }
+        button->SetPosition(left, top);
+        button->Resize(width, height);
+        button->SetViewId(viewId);
+        button->SetStyle(STYLE_BACKGROUND_COLOR, backgroundColor);
+        button->SetStyleForState(STYLE_BACKGROUND_COLOR, pressedBackgroundColor, UIButton::PRESSED);
+        button->SetStyleForState(STYLE_BORDER_COLOR, pressedBorderColor, UIButton::PRESSED);
+        // 设置按钮的点击事件监听器为 TraingEnddataPresenter 的实例
+        button->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingEnddataPresenter::GetInstance()));
+        // 设置按钮可见
+        button->SetVisible(true);
+    }
+    /*
+   InitImageView:初始化图片
+   @param imageView 图片指针
+   @param left 图片左边位置
+   @param top 图片顶部位置
+   @param width 图片宽度
+   @param height 图片高度
+   @param viewId 图片的视图 ID
+   @param imagePath 图片路径
+   */
+    void TraingEnddataView::InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath)
+    {
+        if (imageView == nullptr)
+        {
+            imageView = new UIImageView();
+        }
+        imageView->SetPosition(left, top);
+        imageView->Resize(width, height);
+        imageView->SetViewId(viewId);
+        imageView->SetSrc(imagePath);
+        imageView->SetVisible(true);
+    }
+    /* InitView:初始化界面*/
+    void TraingEnddataView ::InitView()
+    {
+        if (container_ == nullptr)
+        {
+            container_ = new UIViewGroup();
+            container_->SetPosition(0, 0, 466, 466);
+            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);
+        }
+
+        // Add ScrollView to App
+        if (scrollView1_ == nullptr)
+        {
+            scrollView1_ = new UIScrollView();
+        }
+        scrollView1_->SetPosition(0, 0);        // widget's left position and top position
+        scrollView1_->Resize(466, 466);         // widget's width and height
+        scrollView1_->SetViewId("scrollView1"); // Set style
+        scrollView1_->SetReboundSize(100);
+        scrollView1_->SetScrollBlankSize(35);
+        scrollView1_->SetHorizontalScrollState(false);
+        // Add to rootView
+        container_->Add(scrollView1_);
+        scrollView1_->SetVisible(true);
+
+        // 初始化Image
+        InitImageView(image1_, 200, 131, 80, 48, "image1", imagePath_bubble);
+        InitImageView(image2_, 230, 183, 20, 20, "image2", imagePath_bubblepiont);
+        InitImageView(image3_, 96, 118, 271, 233, "image3", imagePath_path);
+        InitImageView(image4_, 212, 402, 40, 40, "image4", imagePath_incoup);
+        InitImageView(image5_, 80, 470, 54, 80, "image5", imagePath_spot);
+        InitImageView(image6_, 97, 552, 80, 20, "image6", imagePath_Line);
+        InitImageView(image8_, 97, 682, 80, 20, "image6", imagePath_Line);
+        InitImageView(image9_, 97, 812, 80, 20, "image6", imagePath_Line);
+        InitImageView(image10_, 97, 942, 80, 20, "image6", imagePath_Line);
+        InitImageView(image11_, 97, 1072, 80, 20, "image6", imagePath_Line);
+
+        scrollView1_->Add(image3_);
+        scrollView1_->Add(image6_);
+        scrollView1_->Add(image8_);
+        scrollView1_->Add(image9_);
+        scrollView1_->Add(image10_);
+        scrollView1_->Add(image11_);
+        scrollView1_->Add(image1_);
+        scrollView1_->Add(image2_);
+        scrollView1_->Add(image4_);
+        scrollView1_->Add(image5_);
+
+        // 初始化button
+        InitButton(button1_, 42, 1319, 380, 100, BUTTONBACK);
+        scrollView1_->Add(button1_);
+
+        // 初始化Lable
+        InitLabel(label1_, 188, 52, 90, 35, "label1", "健身类", DEFAULT_VECTOR_FONT_FILENAME, 30);
+        InitLabel(label2_, 220, 140, 60, 40, "label2", "达标", DEFAULT_VECTOR_FONT_FILENAME, 20);
+        InitLabel(label3_, 114, 252, 60, 40, "label3", "终", DEFAULT_VECTOR_FONT_FILENAME, 20);
+        InitLabel(label4_, 172, 284, 60, 40, "label4", "起", DEFAULT_VECTOR_FONT_FILENAME, 20);
+        InitLabel(label5_, 155, 372, 60, 40, "label5", "距离:8.3KM", DEFAULT_VECTOR_FONT_FILENAME, 30);
+        InitLabel(label6_, 146, 478, 60, 40, "label6", "健走", DEFAULT_VECTOR_FONT_FILENAME, 30);
+        InitLabel(label7_, 146, 517, 60, 40, "label7", "13:00:22-15:00:12", DEFAULT_VECTOR_FONT_FILENAME, 28);
+
+        InitLabel(label8_, 146, 590, 60, 40, "label8", "目标完成度", DEFAULT_VECTOR_FONT_FILENAME, 26);
+        InitLabel(label9_, 146, 720, 60, 40, "label9", "训练时长", DEFAULT_VECTOR_FONT_FILENAME, 26);
+        InitLabel(label10_, 146, 850, 60, 40, "label10", "距离(米)", DEFAULT_VECTOR_FONT_FILENAME, 26);
+        InitLabel(label11_, 146, 980, 60, 40, "label11", "平均心率(次/分)", DEFAULT_VECTOR_FONT_FILENAME, 26);
+        InitLabel(label12_, 146, 1110, 60, 40, "label2", "训练强度", DEFAULT_VECTOR_FONT_FILENAME, 26);
+        InitLabel(label18_, 155, 1232, 60, 40, "label8", "更多数据请前往手机\nAPP“小希爱玩”查看", DEFAULT_VECTOR_FONT_FILENAME, 26);
+
+        label7_->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f));
+        label8_->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f));
+        label9_->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f));
+        label10_->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f));
+        label11_->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f));
+        label12_->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f));
+        label18_->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f));
+
+        InitLabel(label13_, 146, 626, 60, 40, "label18", "226%", DEFAULT_VECTOR_FONT_FILENAME, 40);
+        label13_->SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff));
+        InitLabel(label14_, 146, 756, 60, 40, "label14", "05:45:46", DEFAULT_VECTOR_FONT_FILENAME, 40);
+        label14_->SetTextColor(Color::GetColorFromRGBA(0xff, 0x8a, 0x36, 0xff));
+        InitLabel(label15_, 146, 886, 60, 40, "label15", "8,301", DEFAULT_VECTOR_FONT_FILENAME, 40);
+        label15_->SetTextColor(Color::GetColorFromRGBA(0x36, 0x4a, 0xff, 0xff));
+        InitLabel(label16_, 146, 1016, 60, 40, "label16", "144", DEFAULT_VECTOR_FONT_FILENAME, 40);
+        label16_->SetTextColor(Color::GetColorFromRGBA(0xff, 0x5a, 0x36, 0xff));
+        InitLabel(label17_, 146, 1146, 60, 40, "label17", "中等强度", DEFAULT_VECTOR_FONT_FILENAME, 40);
+        label17_->SetTextColor(Color::GetColorFromRGBA(0xff, 0x5a, 0x36, 0xff));
+        InitLabel(label19_, 201, 1348, 60, 40, "label19", "关闭", DEFAULT_VECTOR_FONT_FILENAME, 31);
+
+        scrollView1_->Add(label1_);
+        scrollView1_->Add(label2_);
+        scrollView1_->Add(label3_);
+        scrollView1_->Add(label4_);
+        scrollView1_->Add(label5_);
+        scrollView1_->Add(label6_);
+        scrollView1_->Add(label7_);
+        scrollView1_->Add(label8_);
+        scrollView1_->Add(label9_);
+        scrollView1_->Add(label10_);
+        scrollView1_->Add(label11_);
+        scrollView1_->Add(label12_);
+        scrollView1_->Add(label13_);
+        scrollView1_->Add(label14_);
+        scrollView1_->Add(label15_);
+        scrollView1_->Add(label16_);
+        scrollView1_->Add(label17_);
+        scrollView1_->Add(label18_);
+        scrollView1_->Add(label19_);
+
+        // Add ImageView to App
+        if (image7_ == nullptr)
+        {
+            image7_ = new UIImageView();
+        }
+        image7_->SetPosition(188, 1460); // widget's left position and top position
+        image7_->Resize(100, 100);       // widget's width and height
+        image7_->SetViewId("image7");    // Set style
+        // Add to rootView
+        scrollView1_->Add(image7_);
+        image7_->SetVisible(true);
+    }
+
+    /* DeInit:删除组件 */
+    void TraingEnddataView::DeInit()
+    {
+        UIView *view = static_cast<UIViewGroup *>(container_)->GetChildrenHead();
+        while (view != nullptr)
+        {
+            UIView *tempView = view;
+            view = view->GetNextSibling();
+            if (tempView->GetParent())
+            {
+                static_cast<UIViewGroup *>(tempView->GetParent())->Remove(tempView);
+            }
+            delete tempView;
+        }
+        delete container_;
+        container_ = nullptr;
+    }
+
+    void TraingEnddataView::PreLoad(void)
+    {
+        if (!viewiInitStatus)
+        {
+            InitView();
+            viewiInitStatus = true;
+        }
+    }
+    void TraingEnddataView::OnStart()
+    {
+        container_ = new UIViewGroup();
+        if (container_ == nullptr)
+        {
+            return;
+        }
+        container_->SetPosition(0, 0);
+        container_->SetWidth(Screen::GetInstance().GetWidth());
+        container_->SetHeight(Screen::GetInstance().GetHeight());
+
+        // 创建 draglistener 实例并设置为拖动监听器
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingEnddataPresenter::GetInstance());
+        if (draglistener == nullptr)
+        {
+            return;
+        }
+        container_->SetOnDragListener(draglistener);
+
+        container_->SetTouchable(true);
+        container_->SetDraggable(true);
+
+        PreLoad();
+        RootView::GetInstance()->Add(container_);
+    }
+
+    void TraingEnddataView::OnSetUpView()
+    {
+
+        View<TraingEnddataPresenter>::OnSetUpView();
+        Draw();
+    }
+
+    void TraingEnddataView::OnTearDownView()
+    {
+
+        View<TraingEnddataPresenter>::OnTearDownView();
+        return;
+    }
+
+    void TraingEnddataView::OnStop()
+    {
+        View<TraingEnddataPresenter>::OnStop();
+        RootView::GetInstance()->RemoveAll();
+        return;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEndnote2Presenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEndnote2Presenter.cpp
new file mode 100644 (file)
index 0000000..ae8c859
--- /dev/null
@@ -0,0 +1,83 @@
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+
+#include <iostream>
+#include <chrono>
+#include <thread>
+#include "traing/include/TraingEndnote2Presenter.h"
+// #include "TraingEndnote2View.h"
+
+namespace OHOS
+{
+
+    // 当前Presenter属性实例化的内存指针
+    static TraingEndnote2Presenter *g_pTraingEndnote2Presenter = nullptr;
+
+    TraingEndnote2Presenter::TraingEndnote2Presenter()
+    {
+
+        g_pTraingEndnote2Presenter = this;
+    }
+
+    TraingEndnote2Presenter::~TraingEndnote2Presenter()
+    {
+
+        g_pTraingEndnote2Presenter = nullptr;
+    }
+
+    TraingEndnote2Presenter *TraingEndnote2Presenter::GetInstance()
+    {
+
+        return g_pTraingEndnote2Presenter;
+    }
+
+    void TraingEndnote2Presenter::OnStart()
+    {
+
+        Presenter<TraingEndnote2View>::OnStart();
+    }
+
+    void TraingEndnote2Presenter::OnPause(void)
+    {
+
+        Presenter<TraingEndnote2View>::OnPause();
+    }
+
+    void TraingEndnote2Presenter::OnResume(void)
+    {
+
+        Presenter<TraingEndnote2View>::OnResume();
+    }
+
+    void TraingEndnote2Presenter::OnStop(void)
+    {
+
+        Presenter<TraingEndnote2View>::OnStop();
+    }
+
+    bool TraingEndnote2Presenter::OnDrag(UIView &view, const DragEvent &event)
+    {
+
+        // if (event.GetDragDirection() == DragEvent::DIRECTION_TOP_TO_BOTTOM)
+        // {
+        //     NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGDATA);
+        // }
+        UNUSED(view);
+        return true;
+    }
+
+    bool TraingEndnote2Presenter::OnClick(UIView &view, const ClickEvent &event)
+    {
+
+        // 根据控件id查找是哪个控件触发了点击回调
+        if (strcmp(view.GetViewId(), BUTTONNO) == 0)
+        {
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCONTROL);
+        }
+        if (strcmp(view.GetViewId(), BUTTONYES) == 0)
+        {
+            //NativeAbility::GetInstance().ChangeSlice(VIEW_TRAINING);
+        }
+        return true;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEndnote2View.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEndnote2View.cpp
new file mode 100644 (file)
index 0000000..0285ef2
--- /dev/null
@@ -0,0 +1,225 @@
+
+#include "traing/include/TraingEndnote2View.h"
+
+#include "common/image_cache_manager.h"
+#include "UiConfig.h"
+#include "ui_resource_image.h"
+#include <ui_scroll_view.h>
+#include "components/ui_button.h"
+namespace OHOS
+{
+    static const char *imagePath_no = "/user/res/Training/no.bin";
+    static const char *imagePath_yes = "/user/res/Training/yes.bin";
+
+    static TraingEndnote2View *g_pTraingEndnote2View{nullptr};
+
+    TraingEndnote2View::TraingEndnote2View()
+    {
+        g_pTraingEndnote2View = this;
+    }
+
+    TraingEndnote2View::~TraingEndnote2View()
+    {
+        DeInit();
+        g_pTraingEndnote2View = nullptr;
+    }
+
+    TraingEndnote2View *TraingEndnote2View::GetInstance()
+    {
+
+        return g_pTraingEndnote2View;
+    }
+    /*
+    InitLabel:初始化标签
+    @param label 标签指针
+    @param left 标签左边位置
+    @param top 标签顶部位置
+    @param width 标签宽度
+    @param height 标签高度
+    @param viewId 标签的视图 ID
+    @param text 标签显示的文本
+    @param fontName 字体名称
+    @param fontSize 字体大小
+    */
+    void TraingEndnote2View::InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize)
+    {
+        // 检查标签指针是否为空
+        if (label == nullptr)
+        {
+            label = new UILabel();
+        }
+        // 设置标签的位置和大小
+        label->SetPosition(left, top);
+        label->Resize(width, height);
+        // 设置标签的视图 ID
+        label->SetViewId(viewId);
+        // 设置标签的样式
+        label->SetStyle(STYLE_TEXT_FONT, fontSize);
+        label->SetFont(fontName, fontSize);
+        // 设置标签的文本和其他属性
+        label->SetText(text);
+        label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        label->SetRollSpeed(0);
+        // 设置标签可见
+        label->SetVisible(true);
+    }
+    /*
+    InitButton:初始化按钮
+    @param button 按钮指针
+    @param left 按钮左边位置
+    @param top 按钮顶部位置
+    @param width 按钮宽度
+    @param height 按钮高度
+    @param viewId 按钮的视图 ID
+    */
+    void TraingEndnote2View::InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId)
+    {
+        // 设置按钮的背景颜色
+        uint32_t backgroundColor = 0xff191919;        // 默认背景颜色
+        uint32_t pressedBackgroundColor = 0xff249115; // 按下时的背景颜色
+        uint32_t pressedBorderColor = 0xff0b1928;     // 按下时的边框颜色
+        // 创建新按钮(如果当前按钮为空)
+        if (button == nullptr)
+        {
+            button = new UIButton();
+        }
+        button->SetPosition(left, top);
+        button->Resize(width, height);
+        button->SetViewId(viewId);
+        button->SetStyle(STYLE_BACKGROUND_COLOR, backgroundColor);
+        button->SetStyleForState(STYLE_BACKGROUND_COLOR, pressedBackgroundColor, UIButton::PRESSED);
+        button->SetStyleForState(STYLE_BORDER_COLOR, pressedBorderColor, UIButton::PRESSED);
+        // 设置按钮的点击事件监听器为 TraingEndnote2Presenter 的实例
+        button->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingEndnote2Presenter::GetInstance()));
+        // 设置按钮可见
+        button->SetVisible(true);
+    }
+    /*
+   InitImageView:初始化图片
+   @param imageView 图片指针
+   @param left 图片左边位置
+   @param top 图片顶部位置
+   @param width 图片宽度
+   @param height 图片高度
+   @param viewId 图片的视图 ID
+   @param imagePath 图片路径
+   */
+    void TraingEndnote2View::InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath)
+    {
+        if (imageView == nullptr)
+        {
+            imageView = new UIImageView();
+        }
+        imageView->SetPosition(left, top);
+        imageView->Resize(width, height);
+        imageView->SetViewId(viewId);
+        imageView->SetSrc(imagePath);
+        imageView->SetVisible(true);
+    }
+    /* InitView:初始化界面*/
+    void TraingEndnote2View ::InitView()
+    {
+        if (container_ == nullptr)
+        {
+            container_ = new UIViewGroup();
+            container_->SetPosition(0, 0, 466, 466);
+            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);
+        }
+
+        // 初始化Lable
+        InitLabel(label1_, 203, 52, 90, 35, "label1", "注意", DEFAULT_VECTOR_FONT_FILENAME, 30);
+        InitLabel(label2_, 56, 167, 60, 40, "label2", "当前运动量太小,无法记录\n是否结束运动", DEFAULT_VECTOR_FONT_FILENAME, 30);
+
+        container_->Add(label1_);
+        container_->Add(label2_);
+
+        InitButton(button1_, 111, 299, 100, 100, BUTTONNO);
+        // Set additional property
+        const char *button1defaultImgSrc = imagePath_no;
+        char *button1triggeredImgSrc = nullptr;
+        button1_->SetImageSrc(button1defaultImgSrc, button1triggeredImgSrc);
+
+        InitButton(button2_, 256, 299, 100, 100, BUTTONYES);
+        // Set additional property
+        const char *button2defaultImgSrc = imagePath_yes;
+        char *button2triggeredImgSrc = nullptr;
+        button2_->SetImageSrc(button2defaultImgSrc, button2triggeredImgSrc);
+
+        container_->Add(button1_);
+        container_->Add(button2_);
+    }
+
+    /* DeInit:删除组件 */
+    void TraingEndnote2View::DeInit()
+    {
+        UIView *view = static_cast<UIViewGroup *>(container_)->GetChildrenHead();
+        while (view != nullptr)
+        {
+            UIView *tempView = view;
+            view = view->GetNextSibling();
+            if (tempView->GetParent())
+            {
+                static_cast<UIViewGroup *>(tempView->GetParent())->Remove(tempView);
+            }
+            delete tempView;
+        }
+        delete container_;
+        container_ = nullptr;
+    }
+
+    void TraingEndnote2View::PreLoad(void)
+    {
+        if (!viewiInitStatus)
+        {
+            InitView();
+            viewiInitStatus = true;
+        }
+    }
+    void TraingEndnote2View::OnStart()
+    {
+        container_ = new UIViewGroup();
+        if (container_ == nullptr)
+        {
+            return;
+        }
+        container_->SetPosition(0, 0);
+        container_->SetWidth(Screen::GetInstance().GetWidth());
+        container_->SetHeight(Screen::GetInstance().GetHeight());
+
+        // 创建 draglistener 实例并设置为拖动监听器
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingEndnote2Presenter::GetInstance());
+        if (draglistener == nullptr)
+        {
+            return;
+        }
+        container_->SetOnDragListener(draglistener);
+
+        container_->SetTouchable(true);
+        container_->SetDraggable(true);
+
+        PreLoad();
+        RootView::GetInstance()->Add(container_);
+    }
+
+    void TraingEndnote2View::OnSetUpView()
+    {
+
+        View<TraingEndnote2Presenter>::OnSetUpView();
+        Draw();
+    }
+
+    void TraingEndnote2View::OnTearDownView()
+    {
+
+        View<TraingEndnote2Presenter>::OnTearDownView();
+        return;
+    }
+
+    void TraingEndnote2View::OnStop()
+    {
+        View<TraingEndnote2Presenter>::OnStop();
+        RootView::GetInstance()->RemoveAll();
+        return;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEndnotePresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEndnotePresenter.cpp
new file mode 100644 (file)
index 0000000..80c7f15
--- /dev/null
@@ -0,0 +1,83 @@
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+
+#include <iostream>
+#include <chrono>
+#include <thread>
+#include "traing/include/TraingEndnotePresenter.h"
+// #include "TraingEndnoteView.h"
+
+namespace OHOS
+{
+
+    // 当前Presenter属性实例化的内存指针
+    static TraingEndnotePresenter *g_pTraingEndnotePresenter = nullptr;
+
+    TraingEndnotePresenter::TraingEndnotePresenter()
+    {
+
+        g_pTraingEndnotePresenter = this;
+    }
+
+    TraingEndnotePresenter::~TraingEndnotePresenter()
+    {
+
+        g_pTraingEndnotePresenter = nullptr;
+    }
+
+    TraingEndnotePresenter *TraingEndnotePresenter::GetInstance()
+    {
+
+        return g_pTraingEndnotePresenter;
+    }
+
+    void TraingEndnotePresenter::OnStart()
+    {
+
+        Presenter<TraingEndnoteView>::OnStart();
+    }
+
+    void TraingEndnotePresenter::OnPause(void)
+    {
+
+        Presenter<TraingEndnoteView>::OnPause();
+    }
+
+    void TraingEndnotePresenter::OnResume(void)
+    {
+
+        Presenter<TraingEndnoteView>::OnResume();
+    }
+
+    void TraingEndnotePresenter::OnStop(void)
+    {
+
+        Presenter<TraingEndnoteView>::OnStop();
+    }
+
+    bool TraingEndnotePresenter::OnDrag(UIView &view, const DragEvent &event)
+    {
+
+        // if (event.GetDragDirection() == DragEvent::DIRECTION_TOP_TO_BOTTOM)
+        // {
+        //     NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGDATA);
+        // }
+        UNUSED(view);
+        return true;
+    }
+
+    bool TraingEndnotePresenter::OnClick(UIView &view, const ClickEvent &event)
+    {
+
+        // 根据控件id查找是哪个控件触发了点击回调
+        if (strcmp(view.GetViewId(), BUTTONNO) == 0)
+        {
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCONTROL);
+        }
+        if (strcmp(view.GetViewId(), BUTTONYES) == 0)
+        {
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGWIN);
+        }
+        return true;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEndnoteView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEndnoteView.cpp
new file mode 100644 (file)
index 0000000..e2c1d81
--- /dev/null
@@ -0,0 +1,225 @@
+
+#include "traing/include/TraingEndnoteView.h"
+
+#include "common/image_cache_manager.h"
+#include "UiConfig.h"
+#include "ui_resource_image.h"
+#include <ui_scroll_view.h>
+#include "components/ui_button.h"
+namespace OHOS
+{
+    static const char *imagePath_no = "/user/res/Training/no.bin";
+    static const char *imagePath_yes = "/user/res/Training/yes.bin";
+
+    static TraingEndnoteView *g_pTraingEndnoteView{nullptr};
+
+    TraingEndnoteView::TraingEndnoteView()
+    {
+        g_pTraingEndnoteView = this;
+    }
+
+    TraingEndnoteView::~TraingEndnoteView()
+    {
+        DeInit();
+        g_pTraingEndnoteView = nullptr;
+    }
+
+    TraingEndnoteView *TraingEndnoteView::GetInstance()
+    {
+
+        return g_pTraingEndnoteView;
+    }
+    /*
+    InitLabel:初始化标签
+    @param label 标签指针
+    @param left 标签左边位置
+    @param top 标签顶部位置
+    @param width 标签宽度
+    @param height 标签高度
+    @param viewId 标签的视图 ID
+    @param text 标签显示的文本
+    @param fontName 字体名称
+    @param fontSize 字体大小
+    */
+    void TraingEndnoteView::InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize)
+    {
+        // 检查标签指针是否为空
+        if (label == nullptr)
+        {
+            label = new UILabel();
+        }
+        // 设置标签的位置和大小
+        label->SetPosition(left, top);
+        label->Resize(width, height);
+        // 设置标签的视图 ID
+        label->SetViewId(viewId);
+        // 设置标签的样式
+        label->SetStyle(STYLE_TEXT_FONT, fontSize);
+        label->SetFont(fontName, fontSize);
+        // 设置标签的文本和其他属性
+        label->SetText(text);
+        label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        label->SetRollSpeed(0);
+        // 设置标签可见
+        label->SetVisible(true);
+    }
+    /*
+    InitButton:初始化按钮
+    @param button 按钮指针
+    @param left 按钮左边位置
+    @param top 按钮顶部位置
+    @param width 按钮宽度
+    @param height 按钮高度
+    @param viewId 按钮的视图 ID
+    */
+    void TraingEndnoteView::InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId)
+    {
+        // 设置按钮的背景颜色
+        uint32_t backgroundColor = 0xff191919;        // 默认背景颜色
+        uint32_t pressedBackgroundColor = 0xff249115; // 按下时的背景颜色
+        uint32_t pressedBorderColor = 0xff0b1928;     // 按下时的边框颜色
+        // 创建新按钮(如果当前按钮为空)
+        if (button == nullptr)
+        {
+            button = new UIButton();
+        }
+        button->SetPosition(left, top);
+        button->Resize(width, height);
+        button->SetViewId(viewId);
+        button->SetStyle(STYLE_BACKGROUND_COLOR, backgroundColor);
+        button->SetStyleForState(STYLE_BACKGROUND_COLOR, pressedBackgroundColor, UIButton::PRESSED);
+        button->SetStyleForState(STYLE_BORDER_COLOR, pressedBorderColor, UIButton::PRESSED);
+        // 设置按钮的点击事件监听器为 TraingEndnotePresenter 的实例
+        button->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingEndnotePresenter::GetInstance()));
+        // 设置按钮可见
+        button->SetVisible(true);
+    }
+    /*
+   InitImageView:初始化图片
+   @param imageView 图片指针
+   @param left 图片左边位置
+   @param top 图片顶部位置
+   @param width 图片宽度
+   @param height 图片高度
+   @param viewId 图片的视图 ID
+   @param imagePath 图片路径
+   */
+    void TraingEndnoteView::InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath)
+    {
+        if (imageView == nullptr)
+        {
+            imageView = new UIImageView();
+        }
+        imageView->SetPosition(left, top);
+        imageView->Resize(width, height);
+        imageView->SetViewId(viewId);
+        imageView->SetSrc(imagePath);
+        imageView->SetVisible(true);
+    }
+    /* InitView:初始化界面*/
+    void TraingEndnoteView ::InitView()
+    {
+        if (container_ == nullptr)
+        {
+            container_ = new UIViewGroup();
+            container_->SetPosition(0, 0, 466, 466);
+            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);
+        }
+
+        // 初始化Lable
+        InitLabel(label1_, 173, 52, 90, 35, "label1", "结束运动", DEFAULT_VECTOR_FONT_FILENAME, 30);
+        InitLabel(label2_, 116, 187, 60, 40, "label2", "是否结束本次运动", DEFAULT_VECTOR_FONT_FILENAME, 26);
+
+        container_->Add(label1_);
+        container_->Add(label2_);
+
+        InitButton(button1_, 111, 299, 100, 100, BUTTONNO);
+        // Set additional property
+        const char *button1defaultImgSrc = imagePath_no;
+        char *button1triggeredImgSrc = nullptr;
+        button1_->SetImageSrc(button1defaultImgSrc, button1triggeredImgSrc);
+
+        InitButton(button2_, 256, 299, 100, 100, BUTTONYES);
+        // Set additional property
+        const char *button2defaultImgSrc = imagePath_yes;
+        char *button2triggeredImgSrc = nullptr;
+        button2_->SetImageSrc(button2defaultImgSrc, button2triggeredImgSrc);
+
+        container_->Add(button1_);
+        container_->Add(button2_);
+    }
+
+    /* DeInit:删除组件 */
+    void TraingEndnoteView::DeInit()
+    {
+        UIView *view = static_cast<UIViewGroup *>(container_)->GetChildrenHead();
+        while (view != nullptr)
+        {
+            UIView *tempView = view;
+            view = view->GetNextSibling();
+            if (tempView->GetParent())
+            {
+                static_cast<UIViewGroup *>(tempView->GetParent())->Remove(tempView);
+            }
+            delete tempView;
+        }
+        delete container_;
+        container_ = nullptr;
+    }
+
+    void TraingEndnoteView::PreLoad(void)
+    {
+        if (!viewiInitStatus)
+        {
+            InitView();
+            viewiInitStatus = true;
+        }
+    }
+    void TraingEndnoteView::OnStart()
+    {
+        container_ = new UIViewGroup();
+        if (container_ == nullptr)
+        {
+            return;
+        }
+        container_->SetPosition(0, 0);
+        container_->SetWidth(Screen::GetInstance().GetWidth());
+        container_->SetHeight(Screen::GetInstance().GetHeight());
+
+        // 创建 draglistener 实例并设置为拖动监听器
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingEndnotePresenter::GetInstance());
+        if (draglistener == nullptr)
+        {
+            return;
+        }
+        container_->SetOnDragListener(draglistener);
+
+        container_->SetTouchable(true);
+        container_->SetDraggable(true);
+
+        PreLoad();
+        RootView::GetInstance()->Add(container_);
+    }
+
+    void TraingEndnoteView::OnSetUpView()
+    {
+
+        View<TraingEndnotePresenter>::OnSetUpView();
+        Draw();
+    }
+
+    void TraingEndnoteView::OnTearDownView()
+    {
+
+        View<TraingEndnotePresenter>::OnTearDownView();
+        return;
+    }
+
+    void TraingEndnoteView::OnStop()
+    {
+        View<TraingEndnotePresenter>::OnStop();
+        RootView::GetInstance()->RemoveAll();
+        return;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSPresenter.cpp
new file mode 100644 (file)
index 0000000..8bb2633
--- /dev/null
@@ -0,0 +1,84 @@
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+
+#include <iostream>
+#include <chrono>
+#include <thread>
+#include "traing/include/TraingGPSPresenter.h"
+// #include "TraingGPSView.h"
+
+namespace OHOS
+{
+
+    // 当前Presenter属性实例化的内存指针
+    static TraingGPSPresenter *g_pTraingGPSPresenter = nullptr;
+
+    TraingGPSPresenter::TraingGPSPresenter()
+    {
+
+        g_pTraingGPSPresenter = this;
+    }
+
+    TraingGPSPresenter::~TraingGPSPresenter()
+    {
+
+        g_pTraingGPSPresenter = nullptr;
+    }
+
+    TraingGPSPresenter *TraingGPSPresenter::GetInstance()
+    {
+
+        return g_pTraingGPSPresenter;
+    }
+
+    void TraingGPSPresenter::OnStart()
+    {
+
+        Presenter<TraingGPSView>::OnStart();
+    }
+
+    void TraingGPSPresenter::OnPause(void)
+    {
+
+        Presenter<TraingGPSView>::OnPause();
+    }
+
+    void TraingGPSPresenter::OnResume(void)
+    {
+
+        Presenter<TraingGPSView>::OnResume();
+    }
+
+    void TraingGPSPresenter::OnStop(void)
+    {
+
+        Presenter<TraingGPSView>::OnStop();
+    }
+
+    bool TraingGPSPresenter::OnDrag(UIView &view, const DragEvent &event)
+    {
+
+        if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&
+            (event.GetDeltaX() > 40) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))
+        {
+            uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();
+                       //NativeAbility::GetInstance().ChangeSlice(VIEW_TRAINING);
+        }
+        UNUSED(view);
+        return true;
+    }
+
+    bool TraingGPSPresenter::OnClick(UIView &view, const ClickEvent &event)
+    {
+        // 根据控件id查找是哪个控件触发了点击回调
+        if (strcmp(view.GetViewId(), BUTTONSET) == 0)
+        {
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGGPSSET);
+        }
+        if (strcmp(view.GetViewId(), BUTTONGO) == 0)
+        {
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCONTROL);
+        }
+        return true;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSView.cpp
new file mode 100644 (file)
index 0000000..46d4807
--- /dev/null
@@ -0,0 +1,231 @@
+
+#include "traing/include/TraingGPSView.h"
+
+#include "common/image_cache_manager.h"
+#include "UiConfig.h"
+#include "ui_resource_image.h"
+#include <ui_scroll_view.h>
+#include "components/ui_button.h"
+namespace OHOS
+{
+    static const char *imagePath_heartrate = "/user/res/Training/heartrate_1.bin";
+    static const char *imagePath_GPS = "/user/res/Training/GPS_1.bin";
+    static TraingGPSView *g_pTraingGPSView{nullptr};
+
+    TraingGPSView::TraingGPSView()
+    {
+        g_pTraingGPSView = this;
+    }
+
+    TraingGPSView::~TraingGPSView()
+    {
+        DeInit();
+        g_pTraingGPSView = nullptr;
+    }
+
+    TraingGPSView *TraingGPSView::GetInstance()
+    {
+
+        return g_pTraingGPSView;
+    }
+    /*
+    InitLabel:初始化标签
+    @param label 标签指针
+    @param left 标签左边位置
+    @param top 标签顶部位置
+    @param width 标签宽度
+    @param height 标签高度
+    @param viewId 标签的视图 ID
+    @param text 标签显示的文本
+    @param fontName 字体名称
+    @param fontSize 字体大小
+    */
+    void TraingGPSView::InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize)
+    {
+        // 检查标签指针是否为空
+        if (label == nullptr)
+        {
+            label = new UILabel();
+        }
+        // 设置标签的位置和大小
+        label->SetPosition(left, top);
+        label->Resize(width, height);
+        // 设置标签的视图 ID
+        label->SetViewId(viewId);
+        // 设置标签的样式
+        label->SetStyle(STYLE_TEXT_FONT, fontSize);
+        label->SetFont(fontName, fontSize);
+        // 设置标签的文本和其他属性
+        label->SetText(text);
+        label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        label->SetRollSpeed(0);
+        // 设置标签可见
+        label->SetVisible(true);
+    }
+    /*
+    InitButton:初始化按钮
+    @param button 按钮指针
+    @param left 按钮左边位置
+    @param top 按钮顶部位置
+    @param width 按钮宽度
+    @param height 按钮高度
+    @param viewId 按钮的视图 ID
+    */
+    void TraingGPSView::InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId)
+    {
+        // 设置按钮的背景颜色
+        uint32_t backgroundColor = 0xff191919;        // 默认背景颜色
+        uint32_t pressedBackgroundColor = 0xff249115; // 按下时的背景颜色
+        uint32_t pressedBorderColor = 0xff0b1928;     // 按下时的边框颜色
+        // 创建新按钮(如果当前按钮为空)
+        if (button == nullptr)
+        {
+            button = new UIButton();
+        }
+        button->SetPosition(left, top);
+        button->Resize(width, height);
+        button->SetViewId(viewId);
+        button->SetStyle(STYLE_BACKGROUND_COLOR, backgroundColor);
+        button->SetStyleForState(STYLE_BACKGROUND_COLOR, pressedBackgroundColor, UIButton::PRESSED);
+        button->SetStyleForState(STYLE_BORDER_COLOR, pressedBorderColor, UIButton::PRESSED);
+        // 设置按钮的点击事件监听器为 TraingGPSPresenter 的实例
+        button->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingGPSPresenter::GetInstance()));
+        // 设置按钮可见
+        button->SetVisible(true);
+    }
+    /*
+    InitImageView:初始化图片
+    @param imageView 图片指针
+    @param left 图片左边位置
+    @param top 图片顶部位置
+    @param width 图片宽度
+    @param height 图片高度
+    @param viewId 图片的视图 ID
+    @param imagePath 图片路径
+    */
+    void TraingGPSView::InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath)
+    {
+        if (imageView == nullptr)
+        {
+            imageView = new UIImageView();
+        }
+        imageView->SetPosition(left, top);
+        imageView->Resize(width, height);
+        imageView->SetViewId(viewId);
+        imageView->SetSrc(imagePath);
+        imageView->SetVisible(true);
+    }
+
+    /* InitView:初始化界面*/
+    void TraingGPSView ::InitView()
+    {
+        if (container_ == nullptr)
+        {
+            container_ = new UIViewGroup();
+            container_->SetPosition(0, 0, 466, 466);
+            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);
+        }
+
+        // 初始化Lable
+        InitLabel(label1_, 203, 52, 195, 35, "label1", "骑行", DEFAULT_VECTOR_FONT_FILENAME, 30);
+        container_->Add(label1_);
+        InitLabel(label2_, 160, 370, 146, 35, "label2", "设定目标 >", DEFAULT_VECTOR_FONT_FILENAME, 30);
+        container_->Add(label2_);
+        InitLabel(label3_, 41, 237, 54, 41, "lable3", "144", DEFAULT_VECTOR_FONT_FILENAME, 35);
+        container_->Add(label3_);
+        InitLabel(label4_, 361, 237, 54, 41, "lable4", "GPS", DEFAULT_VECTOR_FONT_FILENAME, 35);
+        container_->Add(label4_);
+        // 初始化image
+        InitImageView(image1_, 48, 193, 40, 40, "image1", imagePath_heartrate);
+        InitImageView(image2_, 375, 193, 40, 40, "image2", imagePath_GPS);
+        container_->Add(image1_);
+        container_->Add(image2_);
+        // 初始化Button
+        InitButton(button1_, 133, 133, 200, 200, BUTTONGO);
+        // Set additional property
+        char *button1defaultImgSrc = "/user/res/Training/Go.bin";
+        char *button1triggeredImgSrc = nullptr;
+        button1_->SetImageSrc(button1defaultImgSrc, button1triggeredImgSrc);
+
+        InitButton(button2_, 160, 370, 146, 35, BUTTONSET);
+        button2_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000); // 设置为透明按键
+        button2_->SetStyle(STYLE_BACKGROUND_OPA, 0x00);
+        button2_->SetStyleForState(STYLE_BACKGROUND_OPA, 0x80, UIButton::PRESSED); // 设置按下时的透明度为半透明
+
+        container_->Add(button1_);
+        container_->Add(button2_);
+    }
+    /* DeInit:删除组件*/
+    void TraingGPSView::DeInit()
+    {
+        UIView *view = static_cast<UIViewGroup *>(container_)->GetChildrenHead();
+        while (view != nullptr)
+        {
+            UIView *tempView = view;
+            view = view->GetNextSibling();
+            if (tempView->GetParent())
+            {
+                static_cast<UIViewGroup *>(tempView->GetParent())->Remove(tempView);
+            }
+            delete tempView;
+        }
+        delete container_;
+        container_ = nullptr;
+    }
+
+    void TraingGPSView::PreLoad(void)
+    {
+        if (!viewiInitStatus)
+        {
+            InitView();
+            viewiInitStatus = true;
+        }
+    }
+    void TraingGPSView::OnStart()
+    {
+        container_ = new UIViewGroup();
+        if (container_ == nullptr)
+        {
+            return;
+        }
+        container_->SetPosition(0, 0);
+        container_->SetWidth(Screen::GetInstance().GetWidth());
+        container_->SetHeight(Screen::GetInstance().GetHeight());
+
+        // 创建 draglistener 实例并设置为拖动监听器
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingGPSPresenter::GetInstance());
+        if (draglistener == nullptr)
+        {
+            return;
+        }
+        container_->SetOnDragListener(draglistener);
+
+        container_->SetTouchable(true);
+        container_->SetDraggable(true);
+
+        PreLoad();
+        RootView::GetInstance()->Add(container_);
+    }
+
+    void TraingGPSView::OnSetUpView()
+    {
+
+        View<TraingGPSPresenter>::OnSetUpView();
+        Draw();
+    }
+
+    void TraingGPSView::OnTearDownView()
+    {
+
+        View<TraingGPSPresenter>::OnTearDownView();
+        return;
+    }
+
+    void TraingGPSView::OnStop()
+    {
+        View<TraingGPSPresenter>::OnStop();
+        RootView::GetInstance()->RemoveAll();
+        return;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSbackPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSbackPresenter.cpp
new file mode 100644 (file)
index 0000000..06be192
--- /dev/null
@@ -0,0 +1,80 @@
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+
+#include <iostream>
+#include <chrono>
+#include <thread>
+#include "traing/include/TraingGPSbackPresenter.h"
+// #include "TraingGPSbackView.h"
+
+namespace OHOS
+{
+
+    // 当前Presenter属性实例化的内存指针
+    static TraingGPSbackPresenter *g_pTraingGPSbackPresenter = nullptr;
+
+    TraingGPSbackPresenter::TraingGPSbackPresenter()
+    {
+
+        g_pTraingGPSbackPresenter = this;
+    }
+
+    TraingGPSbackPresenter::~TraingGPSbackPresenter()
+    {
+
+        g_pTraingGPSbackPresenter = nullptr;
+    }
+
+    TraingGPSbackPresenter *TraingGPSbackPresenter::GetInstance()
+    {
+
+        return g_pTraingGPSbackPresenter;
+    }
+
+    void TraingGPSbackPresenter::OnStart()
+    {
+
+        Presenter<TraingGPSbackView>::OnStart();
+    }
+
+    void TraingGPSbackPresenter::OnPause(void)
+    {
+
+        Presenter<TraingGPSbackView>::OnPause();
+    }
+
+    void TraingGPSbackPresenter::OnResume(void)
+    {
+
+        Presenter<TraingGPSbackView>::OnResume();
+    }
+
+    void TraingGPSbackPresenter::OnStop(void)
+    {
+
+        Presenter<TraingGPSbackView>::OnStop();
+    }
+
+    bool TraingGPSbackPresenter::OnDrag(UIView &view, const DragEvent &event)
+    {
+
+        // if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&
+        //     (event.GetDeltaX() > 40) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))
+        // {
+        //     uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();
+        //    NativeAbility::GetInstance().ChangeSlice(preSlice);
+        // }
+        UNUSED(view);
+        return true;
+    }
+
+    bool TraingGPSbackPresenter::OnClick(UIView &view, const ClickEvent &event)
+    {
+        // 根据控件id查找是哪个控件触发了点击回调
+        if (strcmp(view.GetViewId(), BUTTONOK) == 0)
+        {
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCONTROL);
+        }
+        return true;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSbackView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSbackView.cpp
new file mode 100644 (file)
index 0000000..2244133
--- /dev/null
@@ -0,0 +1,220 @@
+
+#include "traing/include/TraingGPSbackView.h"
+
+#include "common/image_cache_manager.h"
+#include "UiConfig.h"
+#include "ui_resource_image.h"
+#include <ui_scroll_view.h>
+#include "components/ui_button.h"
+namespace OHOS
+{
+    static const char *imagePath_warning = "/user/res/Training/back.bin";
+    static TraingGPSbackView *g_pTraingGPSbackView{nullptr};
+
+    TraingGPSbackView::TraingGPSbackView()
+    {
+        g_pTraingGPSbackView = this;
+    }
+
+    TraingGPSbackView::~TraingGPSbackView()
+    {
+        DeInit();
+        g_pTraingGPSbackView = nullptr;
+    }
+
+    TraingGPSbackView *TraingGPSbackView::GetInstance()
+    {
+
+        return g_pTraingGPSbackView;
+    }
+    /*
+    InitLabel:初始化标签
+    @param label 标签指针
+    @param left 标签左边位置
+    @param top 标签顶部位置
+    @param width 标签宽度
+    @param height 标签高度
+    @param viewId 标签的视图 ID
+    @param text 标签显示的文本
+    @param fontName 字体名称
+    @param fontSize 字体大小
+    */
+    void TraingGPSbackView::InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize)
+    {
+        // 检查标签指针是否为空
+        if (label == nullptr)
+        {
+            label = new UILabel();
+        }
+        // 设置标签的位置和大小
+        label->SetPosition(left, top);
+        label->Resize(width, height);
+        // 设置标签的视图 ID
+        label->SetViewId(viewId);
+        // 设置标签的样式
+        label->SetStyle(STYLE_TEXT_FONT, fontSize);
+        label->SetFont(fontName, fontSize);
+        // 设置标签的文本和其他属性
+        label->SetText(text);
+        label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        label->SetRollSpeed(0);
+        // 设置标签可见
+        label->SetVisible(true);
+    }
+    /*
+    InitButton:初始化按钮
+    @param button 按钮指针
+    @param left 按钮左边位置
+    @param top 按钮顶部位置
+    @param width 按钮宽度
+    @param height 按钮高度
+    @param viewId 按钮的视图 ID
+    */
+    void TraingGPSbackView::InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId)
+    {
+        // 设置按钮的背景颜色
+        uint32_t backgroundColor = 0xff191919;        // 默认背景颜色
+        uint32_t pressedBackgroundColor = 0xff249115; // 按下时的背景颜色
+        uint32_t pressedBorderColor = 0xff0b1928;     // 按下时的边框颜色
+        // 创建新按钮(如果当前按钮为空)
+        if (button == nullptr)
+        {
+            button = new UIButton();
+        }
+        button->SetPosition(left, top);
+        button->Resize(width, height);
+        button->SetViewId(viewId);
+        button->SetStyle(STYLE_BACKGROUND_COLOR, backgroundColor);
+        button->SetStyleForState(STYLE_BACKGROUND_COLOR, pressedBackgroundColor, UIButton::PRESSED);
+        button->SetStyleForState(STYLE_BORDER_COLOR, pressedBorderColor, UIButton::PRESSED);
+        // 设置按钮的点击事件监听器为 TraingGPSbackPresenter 的实例
+        button->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingGPSbackPresenter::GetInstance()));
+        // 设置按钮可见
+        button->SetVisible(true);
+    }
+    /*
+    InitImageView:初始化图片
+    @param imageView 图片指针
+    @param left 图片左边位置
+    @param top 图片顶部位置
+    @param width 图片宽度
+    @param height 图片高度
+    @param viewId 图片的视图 ID
+    @param imagePath 图片路径
+    */
+    void TraingGPSbackView::InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath)
+    {
+        if (imageView == nullptr)
+        {
+            imageView = new UIImageView();
+        }
+        imageView->SetPosition(left, top);
+        imageView->Resize(width, height);
+        imageView->SetViewId(viewId);
+        imageView->SetSrc(imagePath);
+        imageView->SetVisible(true);
+    }
+
+    /* InitView:初始化界面*/
+    void TraingGPSbackView ::InitView()
+    {
+        if (container_ == nullptr)
+        {
+            container_ = new UIViewGroup();
+            container_->SetPosition(0, 0, 466, 466);
+            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);
+        }
+
+        // 初始化Lable
+        InitLabel(label1_, 175, 52, 195, 35, "label1", "GPS连接", DEFAULT_VECTOR_FONT_FILENAME, 35);
+        container_->Add(label1_);
+        InitLabel(label2_, 55, 253, 146, 35, "label2", "GPS已连接,当前信号正常", DEFAULT_VECTOR_FONT_FILENAME, 30);
+        container_->Add(label2_);
+        
+        // 初始化image
+        InitImageView(image1_, 193, 140, 40, 40, "image1", imagePath_warning); 
+        container_->Add(image1_);
+
+        // 初始化Button
+        InitButton(button1_, 0, 366, 466, 100, BUTTONOK);
+        // Set additional property
+        char *button1defaultImgSrc = "/user/res/Training/buttonok.bin";
+        char *button1triggeredImgSrc = nullptr;
+        button1_->SetImageSrc(button1defaultImgSrc, button1triggeredImgSrc);   
+        container_->Add(button1_);
+
+    }
+    /* DeInit:删除组件*/
+    void TraingGPSbackView::DeInit()
+    {
+        UIView *view = static_cast<UIViewGroup *>(container_)->GetChildrenHead();
+        while (view != nullptr)
+        {
+            UIView *tempView = view;
+            view = view->GetNextSibling();
+            if (tempView->GetParent())
+            {
+                static_cast<UIViewGroup *>(tempView->GetParent())->Remove(tempView);
+            }
+            delete tempView;
+        }
+        delete container_;
+        container_ = nullptr;
+    }
+
+    void TraingGPSbackView::PreLoad(void)
+    {
+        if (!viewiInitStatus)
+        {
+            InitView();
+            viewiInitStatus = true;
+        }
+    }
+    void TraingGPSbackView::OnStart()
+    {
+        container_ = new UIViewGroup();
+        if (container_ == nullptr)
+        {
+            return;
+        }
+        container_->SetPosition(0, 0);
+        container_->SetWidth(Screen::GetInstance().GetWidth());
+        container_->SetHeight(Screen::GetInstance().GetHeight());
+
+        // 创建 draglistener 实例并设置为拖动监听器
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingGPSbackPresenter::GetInstance());
+        if (draglistener == nullptr)
+        {
+            return;
+        }
+        container_->SetOnDragListener(draglistener);
+
+        container_->SetTouchable(true);
+        container_->SetDraggable(true);
+
+        PreLoad();
+        RootView::GetInstance()->Add(container_);
+    }
+
+    void TraingGPSbackView::OnSetUpView()
+    {
+
+        View<TraingGPSbackPresenter>::OnSetUpView();
+        Draw();
+    }
+
+    void TraingGPSbackView::OnTearDownView()
+    {
+
+        View<TraingGPSbackPresenter>::OnTearDownView();
+        return;
+    }
+
+    void TraingGPSbackView::OnStop()
+    {
+        View<TraingGPSbackPresenter>::OnStop();
+        RootView::GetInstance()->RemoveAll();
+        return;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSlackPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSlackPresenter.cpp
new file mode 100644 (file)
index 0000000..8887c53
--- /dev/null
@@ -0,0 +1,94 @@
+/*** 
+ * @Author: Caisking 3449750381@qq.com
+ * @Date: 2023-12-12 16:55:28
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-01-16 15:44:47
+ * @FilePath: /1.FD230/FD230/code/sdk/application/wearable/nativeapp/nativeui/traing/src/TraingGPSlackPresenter.cpp
+ * @Description: 
+ * @
+ * @Copyright (c) 2024 by Caisking , All Rights Reserved. 
+ */
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+
+#include <iostream>
+#include <chrono>
+#include <thread>
+#include "traing/include/TraingGPSlackPresenter.h"
+// #include "TraingGPSlackView.h"
+
+namespace OHOS
+{
+
+    // 当前Presenter属性实例化的内存指针
+    static TraingGPSlackPresenter *g_pTraingGPSlackPresenter = nullptr;
+
+    TraingGPSlackPresenter::TraingGPSlackPresenter()
+    {
+
+        g_pTraingGPSlackPresenter = this;
+    }
+
+    TraingGPSlackPresenter::~TraingGPSlackPresenter()
+    {
+
+        g_pTraingGPSlackPresenter = nullptr;
+    }
+
+    TraingGPSlackPresenter *TraingGPSlackPresenter::GetInstance()
+    {
+
+        return g_pTraingGPSlackPresenter;
+    }
+
+    void TraingGPSlackPresenter::OnStart()
+    {
+
+        Presenter<TraingGPSlackView>::OnStart();
+    }
+
+    void TraingGPSlackPresenter::OnPause(void)
+    {
+
+        Presenter<TraingGPSlackView>::OnPause();
+    }
+
+    void TraingGPSlackPresenter::OnResume(void)
+    {
+
+        Presenter<TraingGPSlackView>::OnResume();
+    }
+
+    void TraingGPSlackPresenter::OnStop(void)
+    {
+
+        Presenter<TraingGPSlackView>::OnStop();
+    }
+
+    bool TraingGPSlackPresenter::OnDrag(UIView &view, const DragEvent &event)
+    {
+
+        if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&
+            (event.GetDeltaX() > 40) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))
+        {
+            uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();
+           //NativeAbility::GetInstance().ChangeSlice(VIEW_TRAINING);
+        }
+        UNUSED(view);
+        return true;
+    }
+
+    bool TraingGPSlackPresenter::OnClick(UIView &view, const ClickEvent &event)
+    {
+        // 根据控件id查找是哪个控件触发了点击回调
+        if (strcmp(view.GetViewId(), BUTTONSET) == 0)
+        {
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGSET);
+        }
+        if (strcmp(view.GetViewId(), BUTTONGO) == 0)
+        {
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGGPSNOTE);
+        }
+        return true;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSlackView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSlackView.cpp
new file mode 100644 (file)
index 0000000..383e6a6
--- /dev/null
@@ -0,0 +1,231 @@
+
+#include "traing/include/TraingGPSlackView.h"
+
+#include "common/image_cache_manager.h"
+#include "UiConfig.h"
+#include "ui_resource_image.h"
+#include <ui_scroll_view.h>
+#include "components/ui_button.h"
+namespace OHOS
+{
+    static const char *imagePath_heartrate = "/user/res/Training/heartrate_2.bin";
+    static const char *imagePath_GPS = "/user/res/Training/GPS_2.bin";
+    static TraingGPSlackView *g_pTraingGPSlackView{nullptr};
+
+    TraingGPSlackView::TraingGPSlackView()
+    {
+        g_pTraingGPSlackView = this;
+    }
+
+    TraingGPSlackView::~TraingGPSlackView()
+    {
+        DeInit();
+        g_pTraingGPSlackView = nullptr;
+    }
+
+    TraingGPSlackView *TraingGPSlackView::GetInstance()
+    {
+
+        return g_pTraingGPSlackView;
+    }
+    /*
+    InitLabel:初始化标签
+    @param label 标签指针
+    @param left 标签左边位置
+    @param top 标签顶部位置
+    @param width 标签宽度
+    @param height 标签高度
+    @param viewId 标签的视图 ID
+    @param text 标签显示的文本
+    @param fontName 字体名称
+    @param fontSize 字体大小
+    */
+    void TraingGPSlackView::InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize)
+    {
+        // 检查标签指针是否为空
+        if (label == nullptr)
+        {
+            label = new UILabel();
+        }
+        // 设置标签的位置和大小
+        label->SetPosition(left, top);
+        label->Resize(width, height);
+        // 设置标签的视图 ID
+        label->SetViewId(viewId);
+        // 设置标签的样式
+        label->SetStyle(STYLE_TEXT_FONT, fontSize);
+        label->SetFont(fontName, fontSize);
+        // 设置标签的文本和其他属性
+        label->SetText(text);
+        label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        label->SetRollSpeed(0);
+        // 设置标签可见
+        label->SetVisible(true);
+    }
+    /*
+    InitButton:初始化按钮
+    @param button 按钮指针
+    @param left 按钮左边位置
+    @param top 按钮顶部位置
+    @param width 按钮宽度
+    @param height 按钮高度
+    @param viewId 按钮的视图 ID
+    */
+    void TraingGPSlackView::InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId)
+    {
+        // 设置按钮的背景颜色
+        uint32_t backgroundColor = 0xff191919;        // 默认背景颜色
+        uint32_t pressedBackgroundColor = 0xff249115; // 按下时的背景颜色
+        uint32_t pressedBorderColor = 0xff0b1928;     // 按下时的边框颜色
+        // 创建新按钮(如果当前按钮为空)
+        if (button == nullptr)
+        {
+            button = new UIButton();
+        }
+        button->SetPosition(left, top);
+        button->Resize(width, height);
+        button->SetViewId(viewId);
+        button->SetStyle(STYLE_BACKGROUND_COLOR, backgroundColor);
+        button->SetStyleForState(STYLE_BACKGROUND_COLOR, pressedBackgroundColor, UIButton::PRESSED);
+        button->SetStyleForState(STYLE_BORDER_COLOR, pressedBorderColor, UIButton::PRESSED);
+        // 设置按钮的点击事件监听器为 TraingGPSlackPresenter 的实例
+        button->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingGPSlackPresenter::GetInstance()));
+        // 设置按钮可见
+        button->SetVisible(true);
+    }
+    /*
+    InitImageView:初始化图片
+    @param imageView 图片指针
+    @param left 图片左边位置
+    @param top 图片顶部位置
+    @param width 图片宽度
+    @param height 图片高度
+    @param viewId 图片的视图 ID
+    @param imagePath 图片路径
+    */
+    void TraingGPSlackView::InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath)
+    {
+        if (imageView == nullptr)
+        {
+            imageView = new UIImageView();
+        }
+        imageView->SetPosition(left, top);
+        imageView->Resize(width, height);
+        imageView->SetViewId(viewId);
+        imageView->SetSrc(imagePath);
+        imageView->SetVisible(true);
+    }
+
+    /* InitView:初始化界面*/
+    void TraingGPSlackView ::InitView()
+    {
+        if (container_ == nullptr)
+        {
+            container_ = new UIViewGroup();
+            container_->SetPosition(0, 0, 466, 466);
+            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);
+        }
+
+        // 初始化Lable
+        InitLabel(label1_, 203, 52, 195, 35, "label1", "骑行", DEFAULT_VECTOR_FONT_FILENAME, 30);
+        container_->Add(label1_);
+        InitLabel(label2_, 160, 370, 146, 35, "label2", "设定目标 >", DEFAULT_VECTOR_FONT_FILENAME, 30);
+        container_->Add(label2_);
+        InitLabel(label3_, 41, 237, 54, 41, "lable3", "--", DEFAULT_VECTOR_FONT_FILENAME, 35);
+        container_->Add(label3_);
+        InitLabel(label4_, 361, 237, 54, 41, "lable4", "--", DEFAULT_VECTOR_FONT_FILENAME, 35);
+        container_->Add(label4_);
+        // 初始化image
+        InitImageView(image1_, 48, 193, 40, 40, "image1", imagePath_heartrate);
+        InitImageView(image2_, 375, 193, 40, 40, "image2", imagePath_GPS);
+        container_->Add(image1_);
+        container_->Add(image2_);
+        // 初始化Button
+        InitButton(button1_, 133, 133, 200, 200, BUTTONGO);
+        // Set additional property
+        char *button1defaultImgSrc = "/user/res/Training/Go_2.bin";
+        char *button1triggeredImgSrc = nullptr;
+        button1_->SetImageSrc(button1defaultImgSrc, button1triggeredImgSrc);
+
+        InitButton(button2_, 160, 370, 146, 35, BUTTONSET);
+        button2_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000); // 设置为透明按键
+        button2_->SetStyle(STYLE_BACKGROUND_OPA, 0x00);
+        button2_->SetStyleForState(STYLE_BACKGROUND_OPA, 0x80, UIButton::PRESSED); // 设置按下时的透明度为半透明
+
+        container_->Add(button1_);
+        container_->Add(button2_);
+    }
+    /* DeInit:删除组件*/
+    void TraingGPSlackView::DeInit()
+    {
+        UIView *view = static_cast<UIViewGroup *>(container_)->GetChildrenHead();
+        while (view != nullptr)
+        {
+            UIView *tempView = view;
+            view = view->GetNextSibling();
+            if (tempView->GetParent())
+            {
+                static_cast<UIViewGroup *>(tempView->GetParent())->Remove(tempView);
+            }
+            delete tempView;
+        }
+        delete container_;
+        container_ = nullptr;
+    }
+
+    void TraingGPSlackView::PreLoad(void)
+    {
+        if (!viewiInitStatus)
+        {
+            InitView();
+            viewiInitStatus = true;
+        }
+    }
+    void TraingGPSlackView::OnStart()
+    {
+        container_ = new UIViewGroup();
+        if (container_ == nullptr)
+        {
+            return;
+        }
+        container_->SetPosition(0, 0);
+        container_->SetWidth(Screen::GetInstance().GetWidth());
+        container_->SetHeight(Screen::GetInstance().GetHeight());
+
+        // 创建 draglistener 实例并设置为拖动监听器
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingGPSlackPresenter::GetInstance());
+        if (draglistener == nullptr)
+        {
+            return;
+        }
+        container_->SetOnDragListener(draglistener);
+
+        container_->SetTouchable(true);
+        container_->SetDraggable(true);
+
+        PreLoad();
+        RootView::GetInstance()->Add(container_);
+    }
+
+    void TraingGPSlackView::OnSetUpView()
+    {
+
+        View<TraingGPSlackPresenter>::OnSetUpView();
+        Draw();
+    }
+
+    void TraingGPSlackView::OnTearDownView()
+    {
+
+        View<TraingGPSlackPresenter>::OnTearDownView();
+        return;
+    }
+
+    void TraingGPSlackView::OnStop()
+    {
+        View<TraingGPSlackPresenter>::OnStop();
+        RootView::GetInstance()->RemoveAll();
+        return;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSlostPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSlostPresenter.cpp
new file mode 100644 (file)
index 0000000..1f895c7
--- /dev/null
@@ -0,0 +1,80 @@
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+
+#include <iostream>
+#include <chrono>
+#include <thread>
+#include "traing/include/TraingGPSlostPresenter.h"
+// #include "TraingGPSlostView.h"
+
+namespace OHOS
+{
+
+    // 当前Presenter属性实例化的内存指针
+    static TraingGPSlostPresenter *g_pTraingGPSlostPresenter = nullptr;
+
+    TraingGPSlostPresenter::TraingGPSlostPresenter()
+    {
+
+        g_pTraingGPSlostPresenter = this;
+    }
+
+    TraingGPSlostPresenter::~TraingGPSlostPresenter()
+    {
+
+        g_pTraingGPSlostPresenter = nullptr;
+    }
+
+    TraingGPSlostPresenter *TraingGPSlostPresenter::GetInstance()
+    {
+
+        return g_pTraingGPSlostPresenter;
+    }
+
+    void TraingGPSlostPresenter::OnStart()
+    {
+
+        Presenter<TraingGPSlostView>::OnStart();
+    }
+
+    void TraingGPSlostPresenter::OnPause(void)
+    {
+
+        Presenter<TraingGPSlostView>::OnPause();
+    }
+
+    void TraingGPSlostPresenter::OnResume(void)
+    {
+
+        Presenter<TraingGPSlostView>::OnResume();
+    }
+
+    void TraingGPSlostPresenter::OnStop(void)
+    {
+
+        Presenter<TraingGPSlostView>::OnStop();
+    }
+
+    bool TraingGPSlostPresenter::OnDrag(UIView &view, const DragEvent &event)
+    {
+
+        // if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&
+        //     (event.GetDeltaX() > 40) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))
+        // {
+        //     uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();
+        //    NativeAbility::GetInstance().ChangeSlice(preSlice);
+        // }
+        UNUSED(view);
+        return true;
+    }
+
+    bool TraingGPSlostPresenter::OnClick(UIView &view, const ClickEvent &event)
+    {
+        // 根据控件id查找是哪个控件触发了点击回调
+        if (strcmp(view.GetViewId(), BUTTONOK) == 0)
+        {
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGGPSBACK);
+        }
+        return true;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSlostView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSlostView.cpp
new file mode 100644 (file)
index 0000000..aa275c6
--- /dev/null
@@ -0,0 +1,220 @@
+
+#include "traing/include/TraingGPSlostView.h"
+
+#include "common/image_cache_manager.h"
+#include "UiConfig.h"
+#include "ui_resource_image.h"
+#include <ui_scroll_view.h>
+#include "components/ui_button.h"
+namespace OHOS
+{
+    static const char *imagePath_warning = "/user/res/Training/warning.bin";
+    static TraingGPSlostView *g_pTraingGPSlostView{nullptr};
+
+    TraingGPSlostView::TraingGPSlostView()
+    {
+        g_pTraingGPSlostView = this;
+    }
+
+    TraingGPSlostView::~TraingGPSlostView()
+    {
+        DeInit();
+        g_pTraingGPSlostView = nullptr;
+    }
+
+    TraingGPSlostView *TraingGPSlostView::GetInstance()
+    {
+
+        return g_pTraingGPSlostView;
+    }
+    /*
+    InitLabel:初始化标签
+    @param label 标签指针
+    @param left 标签左边位置
+    @param top 标签顶部位置
+    @param width 标签宽度
+    @param height 标签高度
+    @param viewId 标签的视图 ID
+    @param text 标签显示的文本
+    @param fontName 字体名称
+    @param fontSize 字体大小
+    */
+    void TraingGPSlostView::InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize)
+    {
+        // 检查标签指针是否为空
+        if (label == nullptr)
+        {
+            label = new UILabel();
+        }
+        // 设置标签的位置和大小
+        label->SetPosition(left, top);
+        label->Resize(width, height);
+        // 设置标签的视图 ID
+        label->SetViewId(viewId);
+        // 设置标签的样式
+        label->SetStyle(STYLE_TEXT_FONT, fontSize);
+        label->SetFont(fontName, fontSize);
+        // 设置标签的文本和其他属性
+        label->SetText(text);
+        label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        label->SetRollSpeed(0);
+        // 设置标签可见
+        label->SetVisible(true);
+    }
+    /*
+    InitButton:初始化按钮
+    @param button 按钮指针
+    @param left 按钮左边位置
+    @param top 按钮顶部位置
+    @param width 按钮宽度
+    @param height 按钮高度
+    @param viewId 按钮的视图 ID
+    */
+    void TraingGPSlostView::InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId)
+    {
+        // 设置按钮的背景颜色
+        uint32_t backgroundColor = 0xff191919;        // 默认背景颜色
+        uint32_t pressedBackgroundColor = 0xff249115; // 按下时的背景颜色
+        uint32_t pressedBorderColor = 0xff0b1928;     // 按下时的边框颜色
+        // 创建新按钮(如果当前按钮为空)
+        if (button == nullptr)
+        {
+            button = new UIButton();
+        }
+        button->SetPosition(left, top);
+        button->Resize(width, height);
+        button->SetViewId(viewId);
+        button->SetStyle(STYLE_BACKGROUND_COLOR, backgroundColor);
+        button->SetStyleForState(STYLE_BACKGROUND_COLOR, pressedBackgroundColor, UIButton::PRESSED);
+        button->SetStyleForState(STYLE_BORDER_COLOR, pressedBorderColor, UIButton::PRESSED);
+        // 设置按钮的点击事件监听器为 TraingGPSlostPresenter 的实例
+        button->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingGPSlostPresenter::GetInstance()));
+        // 设置按钮可见
+        button->SetVisible(true);
+    }
+    /*
+    InitImageView:初始化图片
+    @param imageView 图片指针
+    @param left 图片左边位置
+    @param top 图片顶部位置
+    @param width 图片宽度
+    @param height 图片高度
+    @param viewId 图片的视图 ID
+    @param imagePath 图片路径
+    */
+    void TraingGPSlostView::InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath)
+    {
+        if (imageView == nullptr)
+        {
+            imageView = new UIImageView();
+        }
+        imageView->SetPosition(left, top);
+        imageView->Resize(width, height);
+        imageView->SetViewId(viewId);
+        imageView->SetSrc(imagePath);
+        imageView->SetVisible(true);
+    }
+
+    /* InitView:初始化界面*/
+    void TraingGPSlostView ::InitView()
+    {
+        if (container_ == nullptr)
+        {
+            container_ = new UIViewGroup();
+            container_->SetPosition(0, 0, 466, 466);
+            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);
+        }
+
+        // 初始化Lable
+        InitLabel(label1_, 175, 52, 195, 35, "label1", "GPS丢失", DEFAULT_VECTOR_FONT_FILENAME, 35);
+        container_->Add(label1_);
+        InitLabel(label2_, 55, 253, 146, 35, "label2", "当前位置搜索不到GPS信号", DEFAULT_VECTOR_FONT_FILENAME, 30);
+        container_->Add(label2_);
+        
+        // 初始化image
+        InitImageView(image1_, 193, 140, 40, 40, "image1", imagePath_warning); 
+        container_->Add(image1_);
+
+        // 初始化Button
+        InitButton(button1_, 0, 366, 466, 100, BUTTONOK);
+        // Set additional property
+        char *button1defaultImgSrc = "/user/res/Training/buttonok.bin";
+        char *button1triggeredImgSrc = nullptr;
+        button1_->SetImageSrc(button1defaultImgSrc, button1triggeredImgSrc);   
+        container_->Add(button1_);
+
+    }
+    /* DeInit:删除组件*/
+    void TraingGPSlostView::DeInit()
+    {
+        UIView *view = static_cast<UIViewGroup *>(container_)->GetChildrenHead();
+        while (view != nullptr)
+        {
+            UIView *tempView = view;
+            view = view->GetNextSibling();
+            if (tempView->GetParent())
+            {
+                static_cast<UIViewGroup *>(tempView->GetParent())->Remove(tempView);
+            }
+            delete tempView;
+        }
+        delete container_;
+        container_ = nullptr;
+    }
+
+    void TraingGPSlostView::PreLoad(void)
+    {
+        if (!viewiInitStatus)
+        {
+            InitView();
+            viewiInitStatus = true;
+        }
+    }
+    void TraingGPSlostView::OnStart()
+    {
+        container_ = new UIViewGroup();
+        if (container_ == nullptr)
+        {
+            return;
+        }
+        container_->SetPosition(0, 0);
+        container_->SetWidth(Screen::GetInstance().GetWidth());
+        container_->SetHeight(Screen::GetInstance().GetHeight());
+
+        // 创建 draglistener 实例并设置为拖动监听器
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingGPSlostPresenter::GetInstance());
+        if (draglistener == nullptr)
+        {
+            return;
+        }
+        container_->SetOnDragListener(draglistener);
+
+        container_->SetTouchable(true);
+        container_->SetDraggable(true);
+
+        PreLoad();
+        RootView::GetInstance()->Add(container_);
+    }
+
+    void TraingGPSlostView::OnSetUpView()
+    {
+
+        View<TraingGPSlostPresenter>::OnSetUpView();
+        Draw();
+    }
+
+    void TraingGPSlostView::OnTearDownView()
+    {
+
+        View<TraingGPSlostPresenter>::OnTearDownView();
+        return;
+    }
+
+    void TraingGPSlostView::OnStop()
+    {
+        View<TraingGPSlostPresenter>::OnStop();
+        RootView::GetInstance()->RemoveAll();
+        return;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSnotePresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSnotePresenter.cpp
new file mode 100644 (file)
index 0000000..dc96663
--- /dev/null
@@ -0,0 +1,84 @@
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+
+#include <iostream>
+#include <chrono>
+#include <thread>
+#include "traing/include/TraingGPSnotePresenter.h"
+// #include "TraingGPSnoteView.h"
+
+namespace OHOS
+{
+
+    // 当前Presenter属性实例化的内存指针
+    static TraingGPSnotePresenter *g_pTraingGPSnotePresenter = nullptr;
+
+    TraingGPSnotePresenter::TraingGPSnotePresenter()
+    {
+
+        g_pTraingGPSnotePresenter = this;
+    }
+
+    TraingGPSnotePresenter::~TraingGPSnotePresenter()
+    {
+
+        g_pTraingGPSnotePresenter = nullptr;
+    }
+
+    TraingGPSnotePresenter *TraingGPSnotePresenter::GetInstance()
+    {
+
+        return g_pTraingGPSnotePresenter;
+    }
+
+    void TraingGPSnotePresenter::OnStart()
+    {
+
+        Presenter<TraingGPSnoteView>::OnStart();
+    }
+
+    void TraingGPSnotePresenter::OnPause(void)
+    {
+
+        Presenter<TraingGPSnoteView>::OnPause();
+    }
+
+    void TraingGPSnotePresenter::OnResume(void)
+    {
+
+        Presenter<TraingGPSnoteView>::OnResume();
+    }
+
+    void TraingGPSnotePresenter::OnStop(void)
+    {
+
+        Presenter<TraingGPSnoteView>::OnStop();
+    }
+
+    bool TraingGPSnotePresenter::OnDrag(UIView &view, const DragEvent &event)
+    {
+
+        if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&
+            (event.GetDeltaX() > 40) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))
+        {
+            uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();
+            NativeAbility::GetInstance().ChangeSlice(preSlice);
+        }
+        UNUSED(view);
+        return true;
+    }
+
+    bool TraingGPSnotePresenter::OnClick(UIView &view, const ClickEvent &event)
+    {
+        // 根据控件id查找是哪个控件触发了点击回调
+        if (strcmp(view.GetViewId(), BUTTONBACK) == 0)
+        {
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGGPSLACK);
+        }
+        if (strcmp(view.GetViewId(), BUTTONGO) == 0)
+        {
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGGPSLOST);
+        }
+        return true;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSnoteView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSnoteView.cpp
new file mode 100644 (file)
index 0000000..34c4f75
--- /dev/null
@@ -0,0 +1,254 @@
+
+#include "traing/include/TraingGPSnoteView.h"
+
+#include "common/image_cache_manager.h"
+#include "UiConfig.h"
+#include "ui_resource_image.h"
+#include <ui_scroll_view.h>
+#include "components/ui_button.h"
+namespace OHOS
+{
+    static const char *imagePath_warning = "/user/res/Training/warning.bin";
+
+    static TraingGPSnoteView *g_pTraingGPSnoteView{nullptr};
+
+    TraingGPSnoteView::TraingGPSnoteView()
+    {
+        g_pTraingGPSnoteView = this;
+    }
+
+    TraingGPSnoteView::~TraingGPSnoteView()
+    {
+        DeInit();
+        g_pTraingGPSnoteView = nullptr;
+    }
+
+    TraingGPSnoteView *TraingGPSnoteView::GetInstance()
+    {
+
+        return g_pTraingGPSnoteView;
+    }
+
+    /*
+    InitLabel:初始化标签
+    @param label 标签指针
+    @param left 标签左边位置
+    @param top 标签顶部位置
+    @param width 标签宽度
+    @param height 标签高度
+    @param viewId 标签的视图 ID
+    @param text 标签显示的文本
+    @param fontName 字体名称
+    @param fontSize 字体大小
+    */
+    void TraingGPSnoteView::InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize)
+    {
+        // 检查标签指针是否为空
+        if (label == nullptr)
+        {
+            label = new UILabel();
+        }
+        // 设置标签的位置和大小
+        label->SetPosition(left, top);
+        label->Resize(width, height);
+        // 设置标签的视图 ID
+        label->SetViewId(viewId);
+        // 设置标签的样式
+        label->SetStyle(STYLE_TEXT_FONT, fontSize);
+        label->SetFont(fontName, fontSize);
+        // 设置标签的文本和其他属性
+        label->SetText(text);
+        label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+        label1_->SetTextColor(Color::GetColorFromRGBA(0x22, 0x9d, 0xd3, 0xff));
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        label->SetRollSpeed(0);
+        // 设置标签可见
+        label->SetVisible(true);
+    }
+    /*
+    InitButton:初始化按钮
+    @param button 按钮指针
+    @param left 按钮左边位置
+    @param top 按钮顶部位置
+    @param width 按钮宽度
+    @param height 按钮高度
+    @param viewId 按钮的视图 ID
+    */
+    void TraingGPSnoteView::InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId)
+    {
+        // 设置按钮的背景颜色
+        uint32_t backgroundColor = 0xff191919;        // 默认背景颜色
+        uint32_t pressedBackgroundColor = 0xff249115; // 按下时的背景颜色
+        uint32_t pressedBorderColor = 0xff0b1928;     // 按下时的边框颜色
+        // 创建新按钮(如果当前按钮为空)
+        if (button == nullptr)
+        {
+            button = new UIButton();
+        }
+        button->SetPosition(left, top);
+        button->Resize(width, height);
+        button->SetViewId(viewId);
+        button->SetStyle(STYLE_BACKGROUND_COLOR, backgroundColor);
+        button->SetStyleForState(STYLE_BACKGROUND_COLOR, pressedBackgroundColor, UIButton::PRESSED);
+        button->SetStyleForState(STYLE_BORDER_COLOR, pressedBorderColor, UIButton::PRESSED);
+        // 设置按钮的点击事件监听器为 TraingGPSnotePresenter 的实例
+        button->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingGPSnotePresenter::GetInstance()));
+        // 设置按钮可见
+        button->SetVisible(true);
+    }
+    /*
+   InitImageView:初始化图片
+   @param imageView 图片指针
+   @param left 图片左边位置
+   @param top 图片顶部位置
+   @param width 图片宽度
+   @param height 图片高度
+   @param viewId 图片的视图 ID
+   @param imagePath 图片路径
+   */
+    void TraingGPSnoteView::InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath)
+    {
+        if (imageView == nullptr)
+        {
+            imageView = new UIImageView();
+        }
+        imageView->SetPosition(left, top);
+        imageView->Resize(width, height);
+        imageView->SetViewId(viewId);
+        imageView->SetSrc(imagePath);
+        imageView->SetVisible(true);
+    }
+    /* InitView:初始化界面*/
+    void TraingGPSnoteView ::InitView()
+    {
+        if (container_ == nullptr)
+        {
+            container_ = new UIViewGroup();
+            container_->SetPosition(0, 0, 466, 466);
+            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);
+        }
+
+        // Add ScrollView to App
+        if (scrollView1_ == nullptr)
+        {
+            scrollView1_ = new UIScrollView();
+        }
+        scrollView1_->SetPosition(0, 0);        // widget's left position and top position
+        scrollView1_->Resize(466, 466);         // widget's width and height
+        scrollView1_->SetViewId("scrollView1"); // Set style
+        scrollView1_->SetReboundSize(100);
+        scrollView1_->SetScrollBlankSize(52);
+        scrollView1_->SetHorizontalScrollState(false);
+        // Add to rootView
+        container_->Add(scrollView1_);
+        scrollView1_->SetVisible(true);
+
+        // 初始化Image
+        InitImageView(image1_, 193, 111, 80, 80, "image1", imagePath_warning);
+        scrollView1_->Add(image1_);
+
+        // 初始化button
+        InitButton(button1_, 118, 334, 230, 80, BUTTONBACK);
+        button1_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff4fc34c);
+        scrollView1_->Add(button1_);
+
+        InitButton(button2_, 118, 434, 230, 80, BUTTONGO);
+        scrollView1_->Add(button2_);
+
+        // 初始化Lable
+        InitLabel(label1_, 160, 52, 90, 35, "label1", "GPS未准备", DEFAULT_VECTOR_FONT_FILENAME, 30);
+        InitLabel(label2_, 33, 215, 60, 40, "label2", "GPS仍在定位,建议等待定位\n完成后再开始训练", DEFAULT_VECTOR_FONT_FILENAME, 30);
+        InitLabel(label3_, 181, 357, 60, 40, "label3", "继续等待", DEFAULT_VECTOR_FONT_FILENAME, 30);
+        InitLabel(label4_, 181, 457, 60, 40, "label4", "直接开始", DEFAULT_VECTOR_FONT_FILENAME, 30);
+
+        scrollView1_->Add(label1_);
+        scrollView1_->Add(label2_);
+        scrollView1_->Add(label3_);
+        scrollView1_->Add(label4_);
+
+        // Add ImageView to App
+        if (image2_ == nullptr)
+        {
+            image2_ = new UIImageView();
+        }
+        image2_->SetPosition(181, 500); // widget's left position and top position
+        image2_->Resize(100, 100);       // widget's width and height
+        image2_->SetViewId("image7");    // Set style
+        // Add to rootView
+        scrollView1_->Add(image2_);
+        image2_->SetVisible(true);
+    }
+
+    /* DeInit:删除组件 */
+    void TraingGPSnoteView::DeInit()
+    {
+        UIView *view = static_cast<UIViewGroup *>(container_)->GetChildrenHead();
+        while (view != nullptr)
+        {
+            UIView *tempView = view;
+            view = view->GetNextSibling();
+            if (tempView->GetParent())
+            {
+                static_cast<UIViewGroup *>(tempView->GetParent())->Remove(tempView);
+            }
+            delete tempView;
+        }
+        delete container_;
+        container_ = nullptr;
+    }
+
+    void TraingGPSnoteView::PreLoad(void)
+    {
+        if (!viewiInitStatus)
+        {
+            InitView();
+            viewiInitStatus = true;
+        }
+    }
+    void TraingGPSnoteView::OnStart()
+    {
+        container_ = new UIViewGroup();
+        if (container_ == nullptr)
+        {
+            return;
+        }
+        container_->SetPosition(0, 0);
+        container_->SetWidth(Screen::GetInstance().GetWidth());
+        container_->SetHeight(Screen::GetInstance().GetHeight());
+
+        // 创建 draglistener 实例并设置为拖动监听器
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingGPSnotePresenter::GetInstance());
+        if (draglistener == nullptr)
+        {
+            return;
+        }
+        container_->SetOnDragListener(draglistener);
+
+        container_->SetTouchable(true);
+        container_->SetDraggable(true);
+
+        PreLoad();
+        RootView::GetInstance()->Add(container_);
+    }
+
+    void TraingGPSnoteView::OnSetUpView()
+    {
+
+        View<TraingGPSnotePresenter>::OnSetUpView();
+        Draw();
+    }
+
+    void TraingGPSnoteView::OnTearDownView()
+    {
+
+        View<TraingGPSnotePresenter>::OnTearDownView();
+        return;
+    }
+
+    void TraingGPSnoteView::OnStop()
+    {
+        View<TraingGPSnotePresenter>::OnStop();
+        RootView::GetInstance()->RemoveAll();
+        return;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSsetPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSsetPresenter.cpp
new file mode 100644 (file)
index 0000000..706a124
--- /dev/null
@@ -0,0 +1,92 @@
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+
+#include <iostream>
+#include <chrono>
+#include <thread>
+#include "traing/include/TraingGPSsetPresenter.h"
+// #include "TraingGPSsetView.h"
+
+namespace OHOS
+{
+
+    // 当前Presenter属性实例化的内存指针
+    static TraingGPSsetPresenter *g_pTraingGPSsetPresenter = nullptr;
+
+    TraingGPSsetPresenter::TraingGPSsetPresenter()
+    {
+
+        g_pTraingGPSsetPresenter = this;
+    }
+
+    TraingGPSsetPresenter::~TraingGPSsetPresenter()
+    {
+
+        g_pTraingGPSsetPresenter = nullptr;
+    }
+
+    TraingGPSsetPresenter *TraingGPSsetPresenter::GetInstance()
+    {
+
+        return g_pTraingGPSsetPresenter;
+    }
+
+    void TraingGPSsetPresenter::OnStart()
+    {
+
+        Presenter<TraingGPSsetView>::OnStart();
+    }
+
+    void TraingGPSsetPresenter::OnPause(void)
+    {
+
+        Presenter<TraingGPSsetView>::OnPause();
+    }
+
+    void TraingGPSsetPresenter::OnResume(void)
+    {
+
+        Presenter<TraingGPSsetView>::OnResume();
+    }
+
+    void TraingGPSsetPresenter::OnStop(void)
+    {
+
+        Presenter<TraingGPSsetView>::OnStop();
+    }
+
+    bool TraingGPSsetPresenter::OnDrag(UIView &view, const DragEvent &event)
+    {
+
+        if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&
+            (event.GetDeltaX() > 40) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))
+        {
+            uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGGPS);
+        }
+        UNUSED(view);
+        return true;
+    }
+
+    bool TraingGPSsetPresenter::OnClick(UIView &view, const ClickEvent &event)
+    {
+        // 根据控件id查找是哪个控件触发了点击回调
+        if (strcmp(view.GetViewId(), BUTTONTIME) == 0)
+        {
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGSETTIME);
+        }
+        if (strcmp(view.GetViewId(), BUTTONMIL) == 0)
+        {
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGSETDIST);
+        }
+        if (strcmp(view.GetViewId(), BUTTONCALULI) == 0)
+        {
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGSETCALULI);
+        }
+        if (strcmp(view.GetViewId(), BUTTONWALK) == 0)
+        {
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGSETSTEP);
+        }
+        return true;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSsetView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingGPSsetView.cpp
new file mode 100644 (file)
index 0000000..bd19af4
--- /dev/null
@@ -0,0 +1,301 @@
+
+#include "traing/include/TraingGPSsetView.h"
+
+#include "common/image_cache_manager.h"
+#include "UiConfig.h"
+#include "ui_resource_image.h"
+#include <ui_scroll_view.h>
+#include "components/ui_button.h"
+namespace OHOS
+{
+    // 定义全局变量
+    static char *imagePaths[] = {"/user/res/Training/time.bin",
+                                 "/user/res/Training/mileage.bin",
+                                 "/user/res/Training/calories.bin",
+                                 "/user/res/Training/walking.bin"};
+
+    static char *text[] = {"时长", "距离", "卡路里", "步数"};
+    static const char *imagePath_iocn = "/user/res/Training/icon.bin";
+    static TraingGPSsetView *g_pTraingGPSsetView{nullptr};
+
+    TraingGPSsetView::TraingGPSsetView()
+    {
+        g_pTraingGPSsetView = this;
+    }
+
+    TraingGPSsetView::~TraingGPSsetView()
+    {
+        DeInit();
+        g_pTraingGPSsetView = nullptr;
+    }
+
+    TraingGPSsetView *TraingGPSsetView::GetInstance()
+    {
+
+        return g_pTraingGPSsetView;
+    }
+    /*
+    InitLabel:初始化标签
+    @param label 标签指针
+    @param left 标签左边位置
+    @param top 标签顶部位置
+    @param width 标签宽度
+    @param height 标签高度
+    @param viewId 标签的视图 ID
+    @param text 标签显示的文本
+    @param fontName 字体名称
+    @param fontSize 字体大小
+    */
+    void TraingGPSsetView::InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize)
+    {
+        // 检查标签指针是否为空
+        if (label == nullptr)
+        {
+            label = new UILabel();
+        }
+        // 设置标签的位置和大小
+        label->SetPosition(left, top);
+        label->Resize(width, height);
+        // 设置标签的视图 ID
+        label->SetViewId(viewId);
+        // 设置标签的样式
+        label->SetStyle(STYLE_TEXT_FONT, fontSize);
+        label->SetFont(fontName, fontSize);
+        // 设置标签的文本和其他属性
+        label->SetText(text);
+        label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        label->SetRollSpeed(0);
+        // 设置标签可见
+        label->SetVisible(true);
+    }
+    /*
+    InitButton:初始化按钮
+    @param button 按钮指针
+    @param left 按钮左边位置
+    @param top 按钮顶部位置
+    @param width 按钮宽度
+    @param height 按钮高度
+    @param viewId 按钮的视图 ID
+    */
+    void TraingGPSsetView::InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId)
+    {
+        // 设置按钮的背景颜色
+        uint32_t backgroundColor = 0xff191919;        // 默认背景颜色
+        uint32_t pressedBackgroundColor = 0xff249115; // 按下时的背景颜色
+        uint32_t pressedBorderColor = 0xff0b1928;     // 按下时的边框颜色
+        // 创建新按钮(如果当前按钮为空)
+        if (button == nullptr)
+        {
+            button = new UIButton();
+        }
+        button->SetPosition(left, top);
+        button->Resize(width, height);
+        button->SetViewId(viewId);
+        button->SetStyle(STYLE_BACKGROUND_COLOR, backgroundColor);
+        button->SetStyleForState(STYLE_BACKGROUND_COLOR, pressedBackgroundColor, UIButton::PRESSED);
+        button->SetStyleForState(STYLE_BORDER_COLOR, pressedBorderColor, UIButton::PRESSED);
+        // 设置按钮的点击事件监听器为 TraingGPSsetPresenter 的实例
+        button->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingGPSsetPresenter::GetInstance()));
+        // 设置按钮可见
+        button->SetVisible(true);
+    }
+    /*
+   InitImageView:初始化图片
+   @param imageView 图片指针
+   @param left 图片左边位置
+   @param top 图片顶部位置
+   @param width 图片宽度
+   @param height 图片高度
+   @param viewId 图片的视图 ID
+   @param imagePath 图片路径
+   */
+    void TraingGPSsetView::InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath)
+    {
+        if (imageView == nullptr)
+        {
+            imageView = new UIImageView();
+        }
+        imageView->SetPosition(left, top);
+        imageView->Resize(width, height);
+        imageView->SetViewId(viewId);
+        imageView->SetSrc(imagePath);
+        imageView->SetVisible(true);
+    }
+    /*  Traing:初始化list  */
+    void TraingGPSsetView::InitList()
+    {
+        // Add List to App
+        if (list1_ == nullptr)
+        {
+            list1_ = new UIList();
+        }
+        list1_->SetPosition(60, 110); // widget's left position and top position
+        list1_->Resize(300, 530);     // widget's width and height
+        list1_->SetViewId("list1");   // Set style
+        list1_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);
+        list1_->SetStyle(STYLE_BACKGROUND_OPA, 0x00);
+
+        // Set additional property
+        if (list1data_ == nullptr)
+        {
+            list1data_ = new List<IconItemNode *>();
+        }
+
+        // 使用全局变量来初始化列表项
+        for (int i = 0; i < 4; ++i)
+        {
+            IconItemNode *listData = new IconItemNode();
+            listData->imagePath = imagePaths[i];
+            listData->txt = text[i];
+            list1data_->PushBack(listData);
+        }
+
+        if (list1adapter_ == nullptr)
+        {
+            list1adapter_ = new IconAdapter();
+        }
+        list1adapter_->SetItemSize(190, 120);
+        list1adapter_->SetImageSize(70, 120);
+        list1adapter_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+        list1adapter_->SetData(list1data_);
+        list1_->SetAdapter(list1adapter_);
+
+        // Add to scrollView1
+        // scrollView1_->Add(list1_);
+        list1_->SetVisible(true);
+    }
+    /* InitView:初始化界面*/
+    void TraingGPSsetView ::InitView()
+    {
+        if (container_ == nullptr)
+        {
+            container_ = new UIViewGroup();
+            container_->SetPosition(0, 0, 466, 466);
+            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);
+        }
+        // Add ScrollView to App
+        if (scrollView1_ == nullptr)
+        {
+            scrollView1_ = new UIScrollView();
+        }
+        scrollView1_->SetPosition(0, 0);        // widget's left position and top position
+        scrollView1_->Resize(466, 466);         // widget's width and height
+        scrollView1_->SetViewId("scrollView1"); // Set style
+        scrollView1_->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+        scrollView1_->SetReboundSize(100);
+        scrollView1_->SetScrollBlankSize(52);
+        scrollView1_->SetHorizontalScrollState(false);
+        // Add to rootView
+        container_->Add(scrollView1_);
+        scrollView1_->SetVisible(true);
+
+        //  初始化Button
+        InitButton(button1_, 43, 120, 380, 100, BUTTONTIME);
+        InitButton(button2_, 43, 240, 380, 100, BUTTONMIL);
+        InitButton(button3_, 43, 360, 380, 100, BUTTONCALULI);
+        InitButton(button4_, 43, 480, 380, 100, BUTTONWALK);
+        scrollView1_->Add(button1_);
+        scrollView1_->Add(button2_);
+        scrollView1_->Add(button3_);
+        scrollView1_->Add(button4_);
+
+        // 初始化Image
+        InitImageView(image1_, 380, 160, 100, 100, "image1", imagePath_iocn);
+        InitImageView(image2_, 380, 280, 100, 100, "image2", imagePath_iocn);
+        InitImageView(image3_, 380, 400, 100, 100, "image3", imagePath_iocn);
+        InitImageView(image4_, 380, 520, 100, 100, "image4", imagePath_iocn);
+        scrollView1_->Add(image1_);
+        scrollView1_->Add(image2_);
+        scrollView1_->Add(image3_);
+        scrollView1_->Add(image4_);
+
+        // 初始化Lable
+        InitLabel(label1_, 203, 52, 120, 35, "label1", "骑行", DEFAULT_VECTOR_FONT_FILENAME, 30);
+        InitLabel(label2_, 300, 160, 60, 35, "label2", "30 分钟", DEFAULT_VECTOR_FONT_FILENAME, 20);
+        InitLabel(label3_, 300, 280, 69, 23, "label3", "5 公里", DEFAULT_VECTOR_FONT_FILENAME, 20);
+        InitLabel(label4_, 300, 400, 60, 35, "label4", "500 千卡", DEFAULT_VECTOR_FONT_FILENAME, 20);
+        InitLabel(label5_, 300, 520, 60, 35, "label5", "2000 步", DEFAULT_VECTOR_FONT_FILENAME, 20);
+        scrollView1_->Add(label1_);
+        scrollView1_->Add(label2_);
+        scrollView1_->Add(label3_);
+        scrollView1_->Add(label4_);
+        scrollView1_->Add(label5_);
+
+        // 初始化list
+        InitList();
+        scrollView1_->Add(list1_);
+    }
+    /* DeInit:删除组件 */
+    void TraingGPSsetView::DeInit()
+    {
+        UIView *view = static_cast<UIViewGroup *>(container_)->GetChildrenHead();
+        while (view != nullptr)
+        {
+            UIView *tempView = view;
+            view = view->GetNextSibling();
+            if (tempView->GetParent())
+            {
+                static_cast<UIViewGroup *>(tempView->GetParent())->Remove(tempView);
+            }
+            delete tempView;
+        }
+        delete container_;
+        container_ = nullptr;
+    }
+
+    void TraingGPSsetView::PreLoad(void)
+    {
+        if (!viewiInitStatus)
+        {
+            InitView();
+            viewiInitStatus = true;
+        }
+    }
+    void TraingGPSsetView::OnStart()
+    {
+        container_ = new UIViewGroup();
+        if (container_ == nullptr)
+        {
+            return;
+        }
+        container_->SetPosition(0, 0);
+        container_->SetWidth(Screen::GetInstance().GetWidth());
+        container_->SetHeight(Screen::GetInstance().GetHeight());
+
+        // 创建 draglistener 实例并设置为拖动监听器
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingGPSsetPresenter::GetInstance());
+        if (draglistener == nullptr)
+        {
+            return;
+        }
+        container_->SetOnDragListener(draglistener);
+
+        container_->SetTouchable(true);
+        container_->SetDraggable(true);
+
+        PreLoad();
+        RootView::GetInstance()->Add(container_);
+    }
+
+    void TraingGPSsetView::OnSetUpView()
+    {
+
+        View<TraingGPSsetPresenter>::OnSetUpView();
+        Draw();
+    }
+
+    void TraingGPSsetView::OnTearDownView()
+    {
+
+        View<TraingGPSsetPresenter>::OnTearDownView();
+        return;
+    }
+
+    void TraingGPSsetView::OnStop()
+    {
+        View<TraingGPSsetPresenter>::OnStop();
+        RootView::GetInstance()->RemoveAll();
+        return;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingLimitPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingLimitPresenter.cpp
new file mode 100644 (file)
index 0000000..745fc09
--- /dev/null
@@ -0,0 +1,107 @@
+#include "AppViewIDs.h"\r
+#include "NativeAbility.h"\r
+\r
+#include <iostream>\r
+#include <chrono>\r
+#include <thread>\r
+#include "traing/include/TraingLimitPresenter.h"\r
+// #include "TraingLimitView.h"\r
+\r
+namespace OHOS\r
+{\r
+\r
+    // 当前Presenter属性实例化的内存指针\r
+    static TraingLimitPresenter *g_pTraingLimitPresenter = nullptr;\r
+\r
+    TraingLimitPresenter::TraingLimitPresenter()\r
+    {\r
+\r
+        g_pTraingLimitPresenter = this;\r
+    }\r
+\r
+    TraingLimitPresenter::~TraingLimitPresenter()\r
+    {\r
+\r
+        g_pTraingLimitPresenter = nullptr;\r
+    }\r
+\r
+    TraingLimitPresenter *TraingLimitPresenter::GetInstance()\r
+    {\r
+\r
+        return g_pTraingLimitPresenter;\r
+    }\r
+\r
+    void TraingLimitPresenter::OnStart()\r
+    {\r
+\r
+        Presenter<TraingLimitView>::OnStart();\r
+    }\r
+\r
+    void TraingLimitPresenter::OnPause(void)\r
+    {\r
+\r
+        Presenter<TraingLimitView>::OnPause();\r
+    }\r
+\r
+    void TraingLimitPresenter::OnResume(void)\r
+    {\r
+\r
+        Presenter<TraingLimitView>::OnResume();\r
+    }\r
+\r
+    void TraingLimitPresenter::OnStop(void)\r
+    {\r
+\r
+        Presenter<TraingLimitView>::OnStop();\r
+    }\r
+\r
+    bool TraingLimitPresenter::OnDrag(UIView &view, const DragEvent &event)\r
+    {\r
+\r
+        if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&\r
+            (event.GetDeltaX() > 30) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGMORE);\r
+        }\r
+        UNUSED(view);\r
+        return true;\r
+    }\r
+\r
+    bool TraingLimitPresenter::OnClick(UIView &view, const ClickEvent &event)\r
+    {\r
+        // 根据控件id查找是哪个控件触发了点击回调\r
+        if (strcmp(view.GetViewId(), BUTTON1) == 0)\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGNOMAL);\r
+        }\r
+        if (strcmp(view.GetViewId(), BUTTON2) == 0)\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGNOMAL);\r
+        }\r
+        if (strcmp(view.GetViewId(), BUTTON3) == 0)\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGNOMAL);\r
+        }\r
+        if (strcmp(view.GetViewId(), BUTTON4) == 0)\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGNOMAL);\r
+        }\r
+        if (strcmp(view.GetViewId(), BUTTON5) == 0)\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGNOMAL);\r
+        }\r
+        if (strcmp(view.GetViewId(), BUTTON6) == 0)\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGNOMAL);\r
+        }\r
+        if (strcmp(view.GetViewId(), BUTTON7) == 0)\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGNOMAL);\r
+        }\r
+        if (strcmp(view.GetViewId(), BUTTON8) == 0)\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGNOMAL);\r
+        }\r
+        return true;\r
+    }\r
+}\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingLimitView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingLimitView.cpp
new file mode 100644 (file)
index 0000000..5ebde5c
--- /dev/null
@@ -0,0 +1,400 @@
+\r
+#include "traing/include/TraingLimitView.h"\r
+\r
+#include "common/image_cache_manager.h"\r
+#include "UiConfig.h"\r
+#include "ui_resource_image.h"\r
+#include <ui_scroll_view.h>\r
+#include "components/ui_button.h"\r
+namespace OHOS\r
+{\r
+\r
+    static char *text[] = {"一般极限运动", "滑板", "高空弹跳/蹦极", "跑酷", "BMX", "定向越野", "跳伞", "铁人三项运动"};\r
+    static const char *imagePath_iocn = "/user/res/Training/icon.bin";\r
+\r
+    static TraingLimitView *g_pTraingLimitView{nullptr};\r
+\r
+    TraingLimitView::TraingLimitView()\r
+    {\r
+        g_pTraingLimitView = this;\r
+    }\r
+\r
+    TraingLimitView::~TraingLimitView()\r
+    {\r
+        DeInit();\r
+        g_pTraingLimitView = nullptr;\r
+    }\r
+\r
+    TraingLimitView *TraingLimitView::GetInstance()\r
+    {\r
+\r
+        return g_pTraingLimitView;\r
+    }\r
+    /*\r
+    InitLabel:初始化标签\r
+    @param label 标签指针\r
+    @param left 标签左边位置\r
+    @param top 标签顶部位置\r
+    @param width 标签宽度\r
+    @param height 标签高度\r
+    @param viewId 标签的视图 ID\r
+    @param text 标签显示的文本\r
+    @param fontName 字体名称\r
+    @param fontSize 字体大小\r
+    */\r
+    void TraingLimitView::InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize)\r
+    {\r
+        // 检查标签指针是否为空\r
+        if (label == nullptr)\r
+        {\r
+            label = new UILabel();\r
+        }\r
+        // 设置标签的位置和大小\r
+        label->SetPosition(left, top);\r
+        label->Resize(width, height);\r
+        // 设置标签的视图 ID\r
+        label->SetViewId(viewId);\r
+        // 设置标签的样式\r
+        label->SetStyle(STYLE_TEXT_FONT, fontSize);\r
+        label->SetFont(fontName, fontSize);\r
+        // 设置标签的文本和其他属性\r
+        label->SetText(text);\r
+        label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        label->SetRollSpeed(0);\r
+        // 设置标签可见\r
+        label->SetVisible(true);\r
+    }\r
+    /*\r
+    InitButton:初始化按钮\r
+    @param button 按钮指针\r
+    @param left 按钮左边位置\r
+    @param top 按钮顶部位置\r
+    @param width 按钮宽度\r
+    @param height 按钮高度\r
+    @param viewId 按钮的视图 ID\r
+    */\r
+    void TraingLimitView::InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId)\r
+    {\r
+        // 设置按钮的背景颜色\r
+        uint32_t backgroundColor = 0xff191919;        // 默认背景颜色\r
+        uint32_t pressedBackgroundColor = 0xff249115; // 按下时的背景颜色\r
+        uint32_t pressedBorderColor = 0xff0b1928;     // 按下时的边框颜色\r
+        // 创建新按钮(如果当前按钮为空)\r
+        if (button == nullptr)\r
+        {\r
+            button = new UIButton();\r
+        }\r
+        button->SetPosition(left, top);\r
+        button->Resize(width, height);\r
+        button->SetViewId(viewId);\r
+        button->SetStyle(STYLE_BACKGROUND_COLOR, backgroundColor);\r
+        button->SetStyleForState(STYLE_BACKGROUND_COLOR, pressedBackgroundColor, UIButton::PRESSED);\r
+        button->SetStyleForState(STYLE_BORDER_COLOR, pressedBorderColor, UIButton::PRESSED);\r
+        // 设置按钮的点击事件监听器为 TraingLimitPresenter 的实例\r
+        button->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingLimitPresenter::GetInstance()));\r
+        // 设置按钮可见\r
+        button->SetVisible(true);\r
+    }\r
+\r
+    /*\r
+    InitImageView:初始化图片\r
+    @param imageView 图片指针\r
+    @param left 图片左边位置\r
+    @param top 图片顶部位置\r
+    @param width 图片宽度\r
+    @param height 图片高度\r
+    @param viewId 图片的视图 ID\r
+    @param imagePath 图片路径\r
+    */\r
+    void TraingLimitView::InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath)\r
+    {\r
+        if (imageView == nullptr)\r
+        {\r
+            imageView = new UIImageView();\r
+        }\r
+        imageView->SetPosition(left, top);\r
+        imageView->Resize(width, height);\r
+        imageView->SetViewId(viewId);\r
+        imageView->SetSrc(imagePath);\r
+        imageView->SetVisible(true);\r
+    }\r
+\r
+    /*  Traing:初始化list  */\r
+    void TraingLimitView::InitList()\r
+    {\r
+        // Add List to App\r
+        if (list1_ == nullptr)\r
+        {\r
+            list1_ = new UIList();\r
+        }\r
+        list1_->SetPosition(35, 110); // widget's left position and top position\r
+        list1_->Resize(300, 1100);    // widget's width and height\r
+        list1_->SetViewId("list1");   // Set style\r
+        list1_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);\r
+        list1_->SetStyle(STYLE_BACKGROUND_OPA, 0x00);\r
+\r
+        // Set additional property\r
+        if (list1data_ == nullptr)\r
+        {\r
+            list1data_ = new List<IconItemNode *>();\r
+        }\r
+\r
+        // 使用全局变量来初始化列表项\r
+        for (int i = 0; i < 8; ++i)\r
+        {\r
+            IconItemNode *listData = new IconItemNode();\r
+            //listData->imagePath = imagePaths[i];\r
+            listData->txt = text[i];\r
+            list1data_->PushBack(listData);\r
+        }\r
+\r
+        if (list1adapter_ == nullptr)\r
+        {\r
+            list1adapter_ = new IconAdapter();\r
+        }\r
+        list1adapter_->SetItemSize(250, 120);\r
+        list1adapter_->SetImageSize(130, 120);\r
+        list1adapter_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        list1adapter_->SetData(list1data_);\r
+        list1_->SetAdapter(list1adapter_);\r
+\r
+        // Add to scrollView1\r
+        // scrollView1_->Add(list1_);\r
+        list1_->SetVisible(true);\r
+    }\r
+    /* InitView:初始化界面*/\r
+    void TraingLimitView ::InitView()\r
+    {\r
+        if (container_ == nullptr)\r
+        {\r
+            container_ = new UIViewGroup();\r
+            container_->SetPosition(0, 0, 466, 466);\r
+            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
+        }\r
+        // Add ScrollView to App\r
+        if (scrollView1_ == nullptr)\r
+        {\r
+            scrollView1_ = new UIScrollView();\r
+        }\r
+        scrollView1_->SetPosition(0, 0);        // widget's left position and top position\r
+        scrollView1_->Resize(466, 466);         // widget's width and height\r
+        scrollView1_->SetViewId("scrollView1"); // Set style\r
+        scrollView1_->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
+        // Add to rootView\r
+        container_->Add(scrollView1_);\r
+        scrollView1_->SetVisible(true);\r
+\r
+        // 初始化Lable\r
+        InitLabel(label1_, 173, 52, 200, 60, "label1", "极限训练", DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        scrollView1_->Add(label1_);\r
+        // 初始化Button\r
+        InitButton(button1_, 43, 120, 380, 100, BUTTON1);\r
+        InitButton(button2_, 43, 240, 380, 100, BUTTON2);\r
+        InitButton(button3_, 43, 360, 380, 100, BUTTON3);\r
+        InitButton(button4_, 43, 480, 380, 100, BUTTON4);\r
+        InitButton(button5_, 43, 600, 380, 100, BUTTON5);\r
+        InitButton(button6_, 43, 720, 380, 100, BUTTON6);\r
+        InitButton(button7_, 43, 840, 380, 100, BUTTON7);\r
+        InitButton(button8_, 43, 960, 380, 100, BUTTON8);\r
+        scrollView1_->Add(button1_);\r
+        scrollView1_->Add(button2_);\r
+        scrollView1_->Add(button3_);\r
+        scrollView1_->Add(button4_);\r
+        scrollView1_->Add(button5_);\r
+        scrollView1_->Add(button6_);\r
+        scrollView1_->Add(button7_);\r
+        scrollView1_->Add(button8_);\r
+        // 初始化image\r
+        InitImageView(image1_, 360, 160, 100, 100, "image1", imagePath_iocn);\r
+        InitImageView(image2_, 360, 280, 100, 100, "image2", imagePath_iocn);\r
+        InitImageView(image3_, 360, 400, 100, 100, "image3", imagePath_iocn);\r
+        InitImageView(image4_, 360, 520, 100, 100, "image4", imagePath_iocn);\r
+        InitImageView(image5_, 360, 640, 100, 100, "image5", imagePath_iocn);\r
+        InitImageView(image6_, 360, 760, 100, 100, "image6", imagePath_iocn);\r
+        InitImageView(image7_, 360, 880, 100, 100, "image7", imagePath_iocn);\r
+        InitImageView(image8_, 360, 1000, 100, 100, "image8", imagePath_iocn);\r
+        scrollView1_->Add(image1_);\r
+        scrollView1_->Add(image2_);\r
+        scrollView1_->Add(image3_);\r
+        scrollView1_->Add(image4_);\r
+        scrollView1_->Add(image5_);\r
+        scrollView1_->Add(image6_);\r
+        scrollView1_->Add(image7_);\r
+        scrollView1_->Add(image8_);\r
+        // 初始化list\r
+        InitList();\r
+        scrollView1_->Add(list1_);\r
+    }\r
+    /* DeInit:删除组件*/\r
+    void TraingLimitView::DeInit()\r
+    {\r
+        if (label1_ != nullptr)\r
+        {\r
+            delete label1_;\r
+            label1_ = nullptr;\r
+        }\r
+        if (button1_ != nullptr)\r
+        {\r
+            delete button1_;\r
+            button1_ = nullptr;\r
+        }\r
+        if (button8_ != nullptr)\r
+        {\r
+            delete button8_;\r
+            button8_ = nullptr;\r
+        }\r
+        if (button7_ != nullptr)\r
+        {\r
+            delete button7_;\r
+            button7_ = nullptr;\r
+        }\r
+        if (button6_ != nullptr)\r
+        {\r
+            delete button6_;\r
+            button6_ = nullptr;\r
+        }\r
+        if (button5_ != nullptr)\r
+        {\r
+            delete button5_;\r
+            button5_ = nullptr;\r
+        }\r
+        if (button4_ != nullptr)\r
+        {\r
+            delete button4_;\r
+            button4_ = nullptr;\r
+        }\r
+        if (button3_ != nullptr)\r
+        {\r
+            delete button3_;\r
+            button3_ = nullptr;\r
+        }\r
+        if (button2_ != nullptr)\r
+        {\r
+            delete button2_;\r
+            button2_ = nullptr;\r
+        }\r
+        if (image1_ != nullptr)\r
+        {\r
+            delete image1_;\r
+            image1_ = nullptr;\r
+        }\r
+        if (image2_ != nullptr)\r
+        {\r
+            delete image2_;\r
+            image2_ = nullptr;\r
+        }\r
+        if (image3_ != nullptr)\r
+        {\r
+            delete image3_;\r
+            image3_ = nullptr;\r
+        }\r
+        if (image4_ != nullptr)\r
+        {\r
+            delete image4_;\r
+            image4_ = nullptr;\r
+        }\r
+        if (image5_ != nullptr)\r
+        {\r
+            delete image5_;\r
+            image5_ = nullptr;\r
+        }\r
+        if (image6_ != nullptr)\r
+        {\r
+            delete image6_;\r
+            image6_ = nullptr;\r
+        }\r
+        if (image7_ != nullptr)\r
+        {\r
+            delete image7_;\r
+            image7_ = nullptr;\r
+        }\r
+        if (image8_ != nullptr)\r
+        {\r
+            delete image8_;\r
+            image8_ = nullptr;\r
+        }\r
+        if (list1_ != nullptr)\r
+        {\r
+            delete list1_;\r
+            list1_ = nullptr;\r
+        }\r
+        if (list1adapter_ != nullptr)\r
+        {\r
+            delete list1adapter_;\r
+            list1adapter_ = nullptr;\r
+        }\r
+        if (list1data_ != nullptr)\r
+        {\r
+            list1data_->Clear();\r
+            delete list1data_;\r
+            list1data_ = nullptr;\r
+        }\r
+        if (scrollView1_ != nullptr)\r
+        {\r
+            delete scrollView1_;\r
+            scrollView1_ = nullptr;\r
+        }\r
+        if (container_ != nullptr)\r
+        {\r
+            container_->RemoveAll();\r
+            delete container_;\r
+            container_ = nullptr;\r
+        }\r
+    }\r
+\r
+    void TraingLimitView::PreLoad(void)\r
+    {\r
+        if (!viewiInitStatus)\r
+        {\r
+            InitView();\r
+            viewiInitStatus = true;\r
+        }\r
+    }\r
+    void TraingLimitView::OnStart()\r
+    {\r
+        container_ = new UIViewGroup();\r
+        if (container_ == nullptr)\r
+        {\r
+            return;\r
+        }\r
+        container_->SetPosition(0, 0);\r
+        container_->SetWidth(Screen::GetInstance().GetWidth());\r
+        container_->SetHeight(Screen::GetInstance().GetHeight());\r
+\r
+        // 创建 draglistener 实例并设置为拖动监听器\r
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingLimitPresenter::GetInstance());\r
+        if (draglistener == nullptr)\r
+        {\r
+            return;\r
+        }\r
+        container_->SetOnDragListener(draglistener);\r
+\r
+        container_->SetTouchable(true);\r
+        container_->SetDraggable(true);\r
+\r
+        PreLoad();\r
+        RootView::GetInstance()->Add(container_);\r
+    }\r
+\r
+    void TraingLimitView::OnSetUpView()\r
+    {\r
+\r
+        View<TraingLimitPresenter>::OnSetUpView();\r
+        Draw();\r
+    }\r
+\r
+    void TraingLimitView::OnTearDownView()\r
+    {\r
+\r
+        View<TraingLimitPresenter>::OnTearDownView();\r
+        return;\r
+    }\r
+\r
+    void TraingLimitView::OnStop()\r
+    {\r
+        View<TraingLimitPresenter>::OnStop();\r
+        RootView::GetInstance()->RemoveAll();\r
+        return;\r
+    }\r
+}\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingMorePresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingMorePresenter.cpp
new file mode 100644 (file)
index 0000000..44119bf
--- /dev/null
@@ -0,0 +1,107 @@
+#include "AppViewIDs.h"\r
+#include "NativeAbility.h"\r
+\r
+#include <iostream>\r
+#include <chrono>\r
+#include <thread>\r
+#include "traing/include/TraingMorePresenter.h"\r
+// #include "TraingMoreView.h"\r
+\r
+namespace OHOS\r
+{\r
+\r
+    // 当前Presenter属性实例化的内存指针\r
+    static TraingMorePresenter *g_pTraingMorePresenter = nullptr;\r
+\r
+    TraingMorePresenter::TraingMorePresenter()\r
+    {\r
+\r
+        g_pTraingMorePresenter = this;\r
+    }\r
+\r
+    TraingMorePresenter::~TraingMorePresenter()\r
+    {\r
+\r
+        g_pTraingMorePresenter = nullptr;\r
+    }\r
+\r
+    TraingMorePresenter *TraingMorePresenter::GetInstance()\r
+    {\r
+\r
+        return g_pTraingMorePresenter;\r
+    }\r
+\r
+    void TraingMorePresenter::OnStart()\r
+    {\r
+\r
+        Presenter<TraingMoreView>::OnStart();\r
+    }\r
+\r
+    void TraingMorePresenter::OnPause(void)\r
+    {\r
+\r
+        Presenter<TraingMoreView>::OnPause();\r
+    }\r
+\r
+    void TraingMorePresenter::OnResume(void)\r
+    {\r
+\r
+        Presenter<TraingMoreView>::OnResume();\r
+    }\r
+\r
+    void TraingMorePresenter::OnStop(void)\r
+    {\r
+\r
+        Presenter<TraingMoreView>::OnStop();\r
+    }\r
+\r
+    bool TraingMorePresenter::OnDrag(UIView &view, const DragEvent &event)\r
+    {\r
+\r
+        if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&\r
+            (event.GetDeltaX() > 40) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))\r
+        {\r
+            //NativeAbility::GetInstance().ChangeSlice(VIEW_TRAINING);\r
+        }\r
+        UNUSED(view);\r
+        return true;\r
+    }\r
+\r
+    bool TraingMorePresenter::OnClick(UIView &view, const ClickEvent &event)\r
+    {\r
+        // 根据控件id查找是哪个控件触发了点击回调\r
+        if (strcmp(view.GetViewId(), BUTTON_BALL) == 0)\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGLIMIT);\r
+        }\r
+        if (strcmp(view.GetViewId(), BUTTON_DANCE) == 0)\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGLIMIT);\r
+        }\r
+        if (strcmp(view.GetViewId(), BUTTON_FITNESS) == 0)\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGLIMIT);\r
+        }\r
+        if (strcmp(view.GetViewId(), BUTTON_ICE) == 0)\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGLIMIT);\r
+        }\r
+        if (strcmp(view.GetViewId(), BUTTON_LIMIT) == 0)\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGLIMIT);\r
+        }\r
+        if (strcmp(view.GetViewId(), BUTTON_OTHER) == 0)\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGLIMIT);\r
+        }\r
+        if (strcmp(view.GetViewId(), BUTTON_REST) == 0)\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGLIMIT);\r
+        }\r
+        if (strcmp(view.GetViewId(), BUTTON_SWIMMING) == 0)\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGLIMIT);\r
+        }\r
+        return true;\r
+    }\r
+}\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingMoreView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingMoreView.cpp
new file mode 100644 (file)
index 0000000..f821077
--- /dev/null
@@ -0,0 +1,411 @@
+\r
+#include "traing/include/TraingMoreView.h"\r
+\r
+#include "common/image_cache_manager.h"\r
+#include "UiConfig.h"\r
+#include "ui_resource_image.h"\r
+#include <ui_scroll_view.h>\r
+#include "components/ui_button.h"\r
+namespace OHOS\r
+{\r
+    // 定义全局变量\r
+    static char *imagePaths[] = {"/user/res/Training/Fitness.bin",\r
+                          "/user/res/Training/Dance.bin",\r
+                          "/user/res/Training/Rest.bin",\r
+                          "/user/res/Training/Ball.bin",\r
+                          "/user/res/Training/Swimming.bin",\r
+                          "/user/res/Training/Ice.bin",\r
+                          "/user/res/Training/Limit.bin",\r
+                          "/user/res/Training/Other.bin"};\r
+\r
+    static char *text[] = {"健身类", "舞蹈类", "休闲运动", "球类", "水上运动", "冰上运动", "极限运动", "其他"};\r
+    static const char *imagePath_iocn = "/user/res/Training/icon.bin";\r
+\r
+    static TraingMoreView *g_pTraingMoreView{nullptr};\r
+\r
+    TraingMoreView::TraingMoreView()\r
+    {\r
+        g_pTraingMoreView = this;\r
+    }\r
+\r
+    TraingMoreView::~TraingMoreView()\r
+    {\r
+        DeInit();\r
+        g_pTraingMoreView = nullptr;\r
+    }\r
+\r
+    TraingMoreView *TraingMoreView::GetInstance()\r
+    {\r
+\r
+        return g_pTraingMoreView;\r
+    }\r
+    /*\r
+    InitLabel:初始化标签\r
+    @param label 标签指针\r
+    @param left 标签左边位置\r
+    @param top 标签顶部位置\r
+    @param width 标签宽度\r
+    @param height 标签高度\r
+    @param viewId 标签的视图 ID\r
+    @param text 标签显示的文本\r
+    @param fontName 字体名称\r
+    @param fontSize 字体大小\r
+    */\r
+    void TraingMoreView::InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize)\r
+    {\r
+        // 检查标签指针是否为空\r
+        if (label == nullptr)\r
+        {\r
+            label = new UILabel();\r
+        }\r
+        // 设置标签的位置和大小\r
+        label->SetPosition(left, top);\r
+        label->Resize(width, height);\r
+        // 设置标签的视图 ID\r
+        label->SetViewId(viewId);\r
+        // 设置标签的样式\r
+        label->SetStyle(STYLE_TEXT_FONT, fontSize);\r
+        label->SetFont(fontName, fontSize);\r
+        // 设置标签的文本和其他属性\r
+        label->SetText(text);\r
+        label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        label->SetRollSpeed(0);\r
+        // 设置标签可见\r
+        label->SetVisible(true);\r
+    }\r
+    /*\r
+    InitButton:初始化按钮\r
+    @param button 按钮指针\r
+    @param left 按钮左边位置\r
+    @param top 按钮顶部位置\r
+    @param width 按钮宽度\r
+    @param height 按钮高度\r
+    @param viewId 按钮的视图 ID\r
+    */\r
+    void TraingMoreView::InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId)\r
+    {\r
+        // 设置按钮的背景颜色\r
+        uint32_t backgroundColor = 0xff191919;        // 默认背景颜色\r
+        uint32_t pressedBackgroundColor = 0xff249115; // 按下时的背景颜色\r
+        uint32_t pressedBorderColor = 0xff0b1928;     // 按下时的边框颜色\r
+        // 创建新按钮(如果当前按钮为空)\r
+        if (button == nullptr)\r
+        {\r
+            button = new UIButton();\r
+        }\r
+        button->SetPosition(left, top);\r
+        button->Resize(width, height);\r
+        button->SetViewId(viewId);\r
+        button->SetStyle(STYLE_BACKGROUND_COLOR, backgroundColor);\r
+        button->SetStyleForState(STYLE_BACKGROUND_COLOR, pressedBackgroundColor, UIButton::PRESSED);\r
+        button->SetStyleForState(STYLE_BORDER_COLOR, pressedBorderColor, UIButton::PRESSED);\r
+        // 设置按钮的点击事件监听器为 TraingMorePresenter 的实例\r
+        button->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingMorePresenter::GetInstance()));\r
+        // 设置按钮可见\r
+        button->SetVisible(true);\r
+    }\r
+\r
+    /*\r
+    InitImageView:初始化图片\r
+    @param imageView 图片指针\r
+    @param left 图片左边位置\r
+    @param top 图片顶部位置\r
+    @param width 图片宽度\r
+    @param height 图片高度\r
+    @param viewId 图片的视图 ID\r
+    @param imagePath 图片路径\r
+    */\r
+    void TraingMoreView::InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath)\r
+    {\r
+        if (imageView == nullptr)\r
+        {\r
+            imageView = new UIImageView();\r
+        }\r
+        imageView->SetPosition(left, top);\r
+        imageView->Resize(width, height);\r
+        imageView->SetViewId(viewId);\r
+        imageView->SetSrc(imagePath);\r
+        imageView->SetVisible(true);\r
+    }\r
+\r
+    /*  Traing:初始化list  */\r
+    void TraingMoreView::InitList()\r
+    {\r
+        // Add List to App\r
+        if (list1_ == nullptr)\r
+        {\r
+            list1_ = new UIList();\r
+        }\r
+        list1_->SetPosition(35, 110); // widget's left position and top position\r
+        list1_->Resize(300, 1100);    // widget's width and height\r
+        list1_->SetViewId("list1");   // Set style\r
+        list1_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);\r
+        list1_->SetStyle(STYLE_BACKGROUND_OPA, 0x00);\r
+\r
+        // Set additional property\r
+        if (list1data_ == nullptr)\r
+        {\r
+            list1data_ = new List<IconItemNode *>();\r
+        }\r
+\r
+        // 使用全局变量来初始化列表项\r
+        for (int i = 0; i < 8; ++i)\r
+        {\r
+            IconItemNode *listData = new IconItemNode();\r
+            listData->imagePath = imagePaths[i];\r
+            listData->txt = text[i];\r
+            list1data_->PushBack(listData);\r
+        }\r
+\r
+        if (list1adapter_ == nullptr)\r
+        {\r
+            list1adapter_ = new IconAdapter();\r
+        }\r
+        list1adapter_->SetItemSize(250, 120);\r
+        list1adapter_->SetImageSize(130, 120);\r
+        list1adapter_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        list1adapter_->SetData(list1data_);\r
+        list1_->SetAdapter(list1adapter_);\r
+\r
+        // Add to scrollView1\r
+        // scrollView1_->Add(list1_);\r
+        list1_->SetVisible(true);\r
+    }\r
+    /* InitView:初始化界面*/\r
+    void TraingMoreView ::InitView()\r
+    {\r
+        if (container_ == nullptr)\r
+        {\r
+            container_ = new UIViewGroup();\r
+            container_->SetPosition(0, 0, 466, 466);\r
+            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
+        }\r
+        // Add ScrollView to App\r
+        if (scrollView1_ == nullptr)\r
+        {\r
+            scrollView1_ = new UIScrollView();\r
+        }\r
+        scrollView1_->SetPosition(0, 0);        // widget's left position and top position\r
+        scrollView1_->Resize(466, 466);         // widget's width and height\r
+        scrollView1_->SetViewId("scrollView1"); // Set style\r
+        scrollView1_->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
+        // Add to rootView\r
+        container_->Add(scrollView1_);\r
+        scrollView1_->SetVisible(true);\r
+\r
+        // 初始化Lable\r
+        InitLabel(label1_, 203, 52, 200, 60, "label1", "训练", DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        scrollView1_->Add(label1_);\r
+        // 初始化Button\r
+        InitButton(button1_, 43, 120, 380, 100, BUTTON_FITNESS);\r
+        InitButton(button2_, 43, 240, 380, 100, BUTTON_DANCE);\r
+        InitButton(button1_, 43, 120, 380, 100, BUTTON_FITNESS);\r
+        InitButton(button2_, 43, 240, 380, 100, BUTTON_DANCE);\r
+        InitButton(button3_, 43, 360, 380, 100, BUTTON_REST);\r
+        InitButton(button4_, 43, 480, 380, 100, BUTTON_BALL);\r
+        InitButton(button5_, 43, 600, 380, 100, BUTTON_SWIMMING);\r
+        InitButton(button6_, 43, 720, 380, 100, BUTTON_ICE);\r
+        InitButton(button7_, 43, 840, 380, 100, BUTTON_LIMIT);\r
+        InitButton(button8_, 43, 960, 380, 100, BUTTON_OTHER);\r
+        scrollView1_->Add(button1_);\r
+        scrollView1_->Add(button2_);\r
+        scrollView1_->Add(button3_);\r
+        scrollView1_->Add(button4_);\r
+        scrollView1_->Add(button5_);\r
+        scrollView1_->Add(button6_);\r
+        scrollView1_->Add(button7_);\r
+        scrollView1_->Add(button8_);\r
+        // 初始化image\r
+        InitImageView(image1_, 360, 160, 100, 100, "image1", imagePath_iocn);\r
+        InitImageView(image2_, 360, 280, 100, 100, "image2", imagePath_iocn);\r
+        InitImageView(image3_, 360, 400, 100, 100, "image3", imagePath_iocn);\r
+        InitImageView(image4_, 360, 520, 100, 100, "image4", imagePath_iocn);\r
+        InitImageView(image5_, 360, 640, 100, 100, "image5", imagePath_iocn);\r
+        InitImageView(image6_, 360, 760, 100, 100, "image6", imagePath_iocn);\r
+        InitImageView(image7_, 360, 880, 100, 100, "image7", imagePath_iocn);\r
+        InitImageView(image8_, 360, 1000, 100, 100, "image8", imagePath_iocn);\r
+        scrollView1_->Add(image1_);\r
+        scrollView1_->Add(image2_);\r
+        scrollView1_->Add(image3_);\r
+        scrollView1_->Add(image4_);\r
+        scrollView1_->Add(image5_);\r
+        scrollView1_->Add(image6_);\r
+        scrollView1_->Add(image7_);\r
+        scrollView1_->Add(image8_);\r
+        // 初始化list\r
+        InitList();\r
+        scrollView1_->Add(list1_);\r
+    }\r
+    /* DeInit:删除组件*/\r
+    void TraingMoreView::DeInit()\r
+    {\r
+        if (label1_ != nullptr)\r
+        {\r
+            delete label1_;\r
+            label1_ = nullptr;\r
+        }\r
+        if (button1_ != nullptr)\r
+        {\r
+            delete button1_;\r
+            button1_ = nullptr;\r
+        }\r
+        if (button8_ != nullptr)\r
+        {\r
+            delete button8_;\r
+            button8_ = nullptr;\r
+        }\r
+        if (button7_ != nullptr)\r
+        {\r
+            delete button7_;\r
+            button7_ = nullptr;\r
+        }\r
+        if (button6_ != nullptr)\r
+        {\r
+            delete button6_;\r
+            button6_ = nullptr;\r
+        }\r
+        if (button5_ != nullptr)\r
+        {\r
+            delete button5_;\r
+            button5_ = nullptr;\r
+        }\r
+        if (button4_ != nullptr)\r
+        {\r
+            delete button4_;\r
+            button4_ = nullptr;\r
+        }\r
+        if (button3_ != nullptr)\r
+        {\r
+            delete button3_;\r
+            button3_ = nullptr;\r
+        }\r
+        if (button2_ != nullptr)\r
+        {\r
+            delete button2_;\r
+            button2_ = nullptr;\r
+        }\r
+        if (image1_ != nullptr)\r
+        {\r
+            delete image1_;\r
+            image1_ = nullptr;\r
+        }\r
+        if (image2_ != nullptr)\r
+        {\r
+            delete image2_;\r
+            image2_ = nullptr;\r
+        }\r
+        if (image3_ != nullptr)\r
+        {\r
+            delete image3_;\r
+            image3_ = nullptr;\r
+        }\r
+        if (image4_ != nullptr)\r
+        {\r
+            delete image4_;\r
+            image4_ = nullptr;\r
+        }\r
+        if (image5_ != nullptr)\r
+        {\r
+            delete image5_;\r
+            image5_ = nullptr;\r
+        }\r
+        if (image6_ != nullptr)\r
+        {\r
+            delete image6_;\r
+            image6_ = nullptr;\r
+        }\r
+        if (image7_ != nullptr)\r
+        {\r
+            delete image7_;\r
+            image7_ = nullptr;\r
+        }\r
+        if (image8_ != nullptr)\r
+        {\r
+            delete image8_;\r
+            image8_ = nullptr;\r
+        }\r
+        if (list1_ != nullptr)\r
+        {\r
+            delete list1_;\r
+            list1_ = nullptr;\r
+        }\r
+        if (list1adapter_ != nullptr)\r
+        {\r
+            delete list1adapter_;\r
+            list1adapter_ = nullptr;\r
+        }\r
+        if (list1data_ != nullptr)\r
+        {\r
+            list1data_->Clear();\r
+            delete list1data_;\r
+            list1data_ = nullptr;\r
+        }\r
+        if (scrollView1_ != nullptr)\r
+        {\r
+            delete scrollView1_;\r
+            scrollView1_ = nullptr;\r
+        }\r
+        if (container_ != nullptr)\r
+        {\r
+            container_->RemoveAll();\r
+            delete container_;\r
+            container_ = nullptr;\r
+        }\r
+    }\r
+\r
+    void TraingMoreView::PreLoad(void)\r
+    {\r
+        if (!viewiInitStatus)\r
+        {\r
+            InitView();\r
+            viewiInitStatus = true;\r
+        }\r
+    }\r
+    void TraingMoreView::OnStart()\r
+    {\r
+        container_ = new UIViewGroup();\r
+        if (container_ == nullptr)\r
+        {\r
+            return;\r
+        }\r
+        container_->SetPosition(0, 0);\r
+        container_->SetWidth(Screen::GetInstance().GetWidth());\r
+        container_->SetHeight(Screen::GetInstance().GetHeight());\r
+\r
+        // 创建 draglistener 实例并设置为拖动监听器\r
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingMorePresenter::GetInstance());\r
+        if (draglistener == nullptr)\r
+        {\r
+            return;\r
+        }\r
+        container_->SetOnDragListener(draglistener);\r
+\r
+        container_->SetTouchable(true);\r
+        container_->SetDraggable(true);\r
+\r
+        PreLoad();\r
+        RootView::GetInstance()->Add(container_);\r
+    }\r
+\r
+    void TraingMoreView::OnSetUpView()\r
+    {\r
+\r
+        View<TraingMorePresenter>::OnSetUpView();\r
+        Draw();\r
+    }\r
+\r
+    void TraingMoreView::OnTearDownView()\r
+    {\r
+\r
+        View<TraingMorePresenter>::OnTearDownView();\r
+        return;\r
+    }\r
+\r
+    void TraingMoreView::OnStop()\r
+    {\r
+        View<TraingMorePresenter>::OnStop();\r
+        RootView::GetInstance()->RemoveAll();\r
+        return;\r
+    }\r
+}\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingNomalPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingNomalPresenter.cpp
new file mode 100644 (file)
index 0000000..49c7693
--- /dev/null
@@ -0,0 +1,83 @@
+#include "AppViewIDs.h"\r
+#include "NativeAbility.h"\r
+\r
+#include <iostream>\r
+#include <chrono>\r
+#include <thread>\r
+#include "traing/include/TraingNomalPresenter.h"\r
+// #include "TraingNomalView.h"\r
+\r
+namespace OHOS\r
+{\r
+\r
+    // 当前Presenter属性实例化的内存指针\r
+    static TraingNomalPresenter *g_pTraingNomalPresenter = nullptr;\r
+\r
+    TraingNomalPresenter::TraingNomalPresenter()\r
+    {\r
+\r
+        g_pTraingNomalPresenter = this;\r
+    }\r
+\r
+    TraingNomalPresenter::~TraingNomalPresenter()\r
+    {\r
+\r
+        g_pTraingNomalPresenter = nullptr;\r
+    }\r
+\r
+    TraingNomalPresenter *TraingNomalPresenter::GetInstance()\r
+    {\r
+\r
+        return g_pTraingNomalPresenter;\r
+    }\r
+\r
+    void TraingNomalPresenter::OnStart()\r
+    {\r
+\r
+        Presenter<TraingNomalView>::OnStart();\r
+    }\r
+\r
+    void TraingNomalPresenter::OnPause(void)\r
+    {\r
+\r
+        Presenter<TraingNomalView>::OnPause();\r
+    }\r
+\r
+    void TraingNomalPresenter::OnResume(void)\r
+    {\r
+\r
+        Presenter<TraingNomalView>::OnResume();\r
+    }\r
+\r
+    void TraingNomalPresenter::OnStop(void)\r
+    {\r
+\r
+        Presenter<TraingNomalView>::OnStop();\r
+    }\r
+\r
+    bool TraingNomalPresenter::OnDrag(UIView &view, const DragEvent &event)\r
+    {\r
+\r
+        if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&\r
+            (event.GetDeltaX() > 40) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGMORE);\r
+        }\r
+        UNUSED(view);\r
+        return true;\r
+    }\r
+\r
+    bool TraingNomalPresenter::OnClick(UIView &view, const ClickEvent &event)\r
+    {\r
+        // 根据控件id查找是哪个控件触发了点击回调\r
+        if (strcmp(view.GetViewId(), BUTTONSET) == 0)\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGSET);\r
+        }\r
+        if (strcmp(view.GetViewId(), BUTTONGO) == 0)\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCONTROL);\r
+        }\r
+        return true;\r
+    }\r
+}\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingNomalView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingNomalView.cpp
new file mode 100644 (file)
index 0000000..0ffafd0
--- /dev/null
@@ -0,0 +1,206 @@
+
+#include "traing/include/TraingNomalView.h"
+
+#include "common/image_cache_manager.h"
+#include "UiConfig.h"
+#include "ui_resource_image.h"
+#include <ui_scroll_view.h>
+#include "components/ui_button.h"
+namespace OHOS
+{
+
+    static TraingNomalView *g_pTraingNomalView{nullptr};
+
+    TraingNomalView::TraingNomalView()
+    {
+        g_pTraingNomalView = this;
+    }
+
+    TraingNomalView::~TraingNomalView()
+    {
+        DeInit();
+        g_pTraingNomalView = nullptr;
+    }
+
+    TraingNomalView *TraingNomalView::GetInstance()
+    {
+
+        return g_pTraingNomalView;
+    }
+    /*
+    InitLabel:初始化标签
+    @param label 标签指针
+    @param left 标签左边位置
+    @param top 标签顶部位置
+    @param width 标签宽度
+    @param height 标签高度
+    @param viewId 标签的视图 ID
+    @param text 标签显示的文本
+    @param fontName 字体名称
+    @param fontSize 字体大小
+    */
+    void TraingNomalView::InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize)
+    {
+        // 检查标签指针是否为空
+        if (label == nullptr)
+        {
+            label = new UILabel();
+        }
+        // 设置标签的位置和大小
+        label->SetPosition(left, top);
+        label->Resize(width, height);
+        // 设置标签的视图 ID
+        label->SetViewId(viewId);
+        // 设置标签的样式
+        label->SetStyle(STYLE_TEXT_FONT, fontSize);
+        label->SetFont(fontName, fontSize);
+        // 设置标签的文本和其他属性
+        label->SetText(text);
+        label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        label->SetRollSpeed(0);
+        // 设置标签可见
+        label->SetVisible(true);
+    }
+    /*
+    InitButton:初始化按钮
+    @param button 按钮指针
+    @param left 按钮左边位置
+    @param top 按钮顶部位置
+    @param width 按钮宽度
+    @param height 按钮高度
+    @param viewId 按钮的视图 ID
+    */
+    void TraingNomalView::InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId)
+    {
+        // 设置按钮的背景颜色
+        uint32_t backgroundColor = 0xff191919;        // 默认背景颜色
+        uint32_t pressedBackgroundColor = 0xff249115; // 按下时的背景颜色
+        uint32_t pressedBorderColor = 0xff0b1928;     // 按下时的边框颜色
+        // 创建新按钮(如果当前按钮为空)
+        if (button == nullptr)
+        {
+            button = new UIButton();
+        }
+        button->SetPosition(left, top);
+        button->Resize(width, height);
+        button->SetViewId(viewId);
+        button->SetStyle(STYLE_BACKGROUND_COLOR, backgroundColor);
+        button->SetStyleForState(STYLE_BACKGROUND_COLOR, pressedBackgroundColor, UIButton::PRESSED);
+        button->SetStyleForState(STYLE_BORDER_COLOR, pressedBorderColor, UIButton::PRESSED);
+        // 设置按钮的点击事件监听器为 TraingNomalPresenter 的实例
+        button->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingNomalPresenter::GetInstance()));
+        // 设置按钮可见
+        button->SetVisible(true);
+    }
+    /* InitView:初始化界面*/
+    void TraingNomalView ::InitView()
+    {
+        if (container_ == nullptr)
+        {
+            container_ = new UIViewGroup();
+            container_->SetPosition(0, 0, 466, 466);
+            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);
+        }
+
+        // 初始化Lable
+        InitLabel(label1_, 137, 52, 195, 35, "label1", "高空弹跳/蹦极", DEFAULT_VECTOR_FONT_FILENAME, 30);
+        container_->Add(label1_);
+        InitLabel(label2_, 160, 370, 146, 35, "label2", "设定目标 >", DEFAULT_VECTOR_FONT_FILENAME, 30);
+        container_->Add(label2_);
+        // 初始化Button
+        InitButton(button1_, 133, 133, 200, 200, BUTTONGO);
+        // Set additional property
+        char *button1defaultImgSrc = "/user/res/Training/Go.bin";
+        char *button1triggeredImgSrc = nullptr;
+        button1_->SetImageSrc(button1defaultImgSrc, button1triggeredImgSrc);
+
+        InitButton(button2_, 160, 370, 146, 35, BUTTONSET);
+        button2_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);//设置为透明按键
+        button2_->SetStyle(STYLE_BACKGROUND_OPA, 0x00);
+        button2_->SetStyleForState(STYLE_BACKGROUND_OPA, 0x80, UIButton::PRESSED); // 设置按下时的透明度为半透明
+
+        container_->Add(button1_);
+        container_->Add(button2_);
+    }
+    /* DeInit:删除组件*/
+    void TraingNomalView::DeInit()
+    {
+        if (label1_ != nullptr)
+        {
+            delete label1_;
+            label1_ = nullptr;
+        }
+        if (button1_ != nullptr)
+        {
+            delete button1_;
+            button1_ = nullptr;
+        }
+        if (button2_ != nullptr)
+        {
+            delete button2_;
+            button2_ = nullptr;
+        }
+        if (container_ != nullptr)
+        {
+            container_->RemoveAll();
+            delete container_;
+            container_ = nullptr;
+        }
+    }
+
+    void TraingNomalView::PreLoad(void)
+    {
+        if (!viewiInitStatus)
+        {
+            InitView();
+            viewiInitStatus = true;
+        }
+    }
+    void TraingNomalView::OnStart()
+    {
+        container_ = new UIViewGroup();
+        if (container_ == nullptr)
+        {
+            return;
+        }
+        container_->SetPosition(0, 0);
+        container_->SetWidth(Screen::GetInstance().GetWidth());
+        container_->SetHeight(Screen::GetInstance().GetHeight());
+
+        // 创建 draglistener 实例并设置为拖动监听器
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingNomalPresenter::GetInstance());
+        if (draglistener == nullptr)
+        {
+            return;
+        }
+        container_->SetOnDragListener(draglistener);
+
+        container_->SetTouchable(true);
+        container_->SetDraggable(true);
+
+        PreLoad();
+        RootView::GetInstance()->Add(container_);
+    }
+
+    void TraingNomalView::OnSetUpView()
+    {
+
+        View<TraingNomalPresenter>::OnSetUpView();
+        Draw();
+    }
+
+    void TraingNomalView::OnTearDownView()
+    {
+
+        View<TraingNomalPresenter>::OnTearDownView();
+        return;
+    }
+
+    void TraingNomalView::OnStop()
+    {
+        View<TraingNomalPresenter>::OnStop();
+        RootView::GetInstance()->RemoveAll();
+        return;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingPresenter.cpp
new file mode 100644 (file)
index 0000000..7a4bbc2
--- /dev/null
@@ -0,0 +1,84 @@
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+
+#include <iostream>
+#include <chrono>
+#include <thread>
+#include "traing/include/TraingPresenter.h"
+//#include "TraingView.h"
+
+namespace OHOS
+{
+
+    // 当前Presenter属性实例化的内存指针
+    static TraingPresenter *g_pTraingPresenter = nullptr;
+
+    TraingPresenter::TraingPresenter()
+    {
+
+        g_pTraingPresenter = this;
+    }
+
+    TraingPresenter::~TraingPresenter()
+    {
+
+        g_pTraingPresenter = nullptr;
+    }
+
+    TraingPresenter *TraingPresenter::GetInstance()
+    {
+
+        return g_pTraingPresenter;
+    }
+
+    void TraingPresenter::OnStart()
+    {
+
+        Presenter<TraingView>::OnStart();
+    }
+
+    void TraingPresenter::OnPause(void)
+    {
+
+        Presenter<TraingView>::OnPause();
+    }
+
+    void TraingPresenter::OnResume(void)
+    {
+
+        Presenter<TraingView>::OnResume();
+    }
+
+    void TraingPresenter::OnStop(void)
+    {
+
+        Presenter<TraingView>::OnStop();
+    }
+
+    bool TraingPresenter::OnDrag(UIView &view, const DragEvent &event)
+    {
+
+        if (event.GetDragDirection() == DragEvent::DIRECTION_RIGHT_TO_LEFT)
+        {
+            NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);
+        }
+        UNUSED(view);
+        return true;
+    }
+
+    bool TraingPresenter::OnClick(UIView &view, const ClickEvent &event)
+    {
+        // 根据控件id查找是哪个控件触发了点击回调
+        if (strcmp(view.GetViewId(), BUTTON1) == 0)
+        {
+            NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);
+        }
+        if (strcmp(view.GetViewId(), "Remind") == 0)
+        {
+            // 模拟心率监测,等待20秒
+            //std::this_thread::sleep_for(std::chrono::seconds(20));
+            //NativeAbility::GetInstance().ChangeSlice(VIEW_TraingREMIND);
+        }
+        return true;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetCaluliPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetCaluliPresenter.cpp
new file mode 100644 (file)
index 0000000..1d41ef5
--- /dev/null
@@ -0,0 +1,80 @@
+#include "AppViewIDs.h"\r
+#include "NativeAbility.h"\r
+\r
+#include <iostream>\r
+#include <chrono>\r
+#include <thread>\r
+#include "traing/include/TraingSetCaluliPresenter.h"\r
+// #include "TraingSetCaluliView.h"\r
+\r
+namespace OHOS\r
+{\r
+\r
+    // 当前Presenter属性实例化的内存指针\r
+    static TraingSetCaluliPresenter *g_pTraingSetCaluliPresenter = nullptr;\r
+\r
+    TraingSetCaluliPresenter::TraingSetCaluliPresenter()\r
+    {\r
+\r
+        g_pTraingSetCaluliPresenter = this;\r
+    }\r
+\r
+    TraingSetCaluliPresenter::~TraingSetCaluliPresenter()\r
+    {\r
+\r
+        g_pTraingSetCaluliPresenter = nullptr;\r
+    }\r
+\r
+    TraingSetCaluliPresenter *TraingSetCaluliPresenter::GetInstance()\r
+    {\r
+\r
+        return g_pTraingSetCaluliPresenter;\r
+    }\r
+\r
+    void TraingSetCaluliPresenter::OnStart()\r
+    {\r
+\r
+        Presenter<TraingSetCaluliView>::OnStart();\r
+    }\r
+\r
+    void TraingSetCaluliPresenter::OnPause(void)\r
+    {\r
+\r
+        Presenter<TraingSetCaluliView>::OnPause();\r
+    }\r
+\r
+    void TraingSetCaluliPresenter::OnResume(void)\r
+    {\r
+\r
+        Presenter<TraingSetCaluliView>::OnResume();\r
+    }\r
+\r
+    void TraingSetCaluliPresenter::OnStop(void)\r
+    {\r
+\r
+        Presenter<TraingSetCaluliView>::OnStop();\r
+    }\r
+\r
+    bool TraingSetCaluliPresenter::OnDrag(UIView &view, const DragEvent &event)\r
+    {\r
+\r
+        // if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&\r
+        //     (event.GetDeltaX() > 20) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))\r
+        // {\r
+        //     NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGSET);\r
+        // }\r
+        UNUSED(view);\r
+        return true;\r
+    }\r
+\r
+    bool TraingSetCaluliPresenter::OnClick(UIView &view, const ClickEvent &event)\r
+    {\r
+        // 根据控件id查找是哪个控件触发了点击回调\r
+        if (strcmp(view.GetViewId(), BUTTONOK) == 0)\r
+        {\r
+            uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();\r
+            NativeAbility::GetInstance().ChangeSlice(preSlice);\r
+        }\r
+        return true;\r
+    }\r
+}\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetCaluliView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetCaluliView.cpp
new file mode 100644 (file)
index 0000000..5d5ff2a
--- /dev/null
@@ -0,0 +1,280 @@
+\r
+#include "traing/include/TraingSetCaluliView.h"\r
+\r
+#include "common/image_cache_manager.h"\r
+#include "UiConfig.h"\r
+#include "ui_resource_image.h"\r
+#include <ui_scroll_view.h>\r
+#include "components/ui_button.h"\r
+#include "common/screen.h"\r
+#include <sstream>\r
+#include <string>\r
+#include <vector>\r
+\r
+namespace OHOS\r
+{\r
+\r
+    /***************************************************************************************/\r
+    // 动态生成包含指定卡路里区间内所有卡路里数的字符串数组\r
+    std::vector<std::string> GenerateCaluliValues(int minTime, int maxTime, int interval)\r
+    {\r
+        std::vector<std::string> values;\r
+        for (int i = minTime; i <= maxTime; i += interval)\r
+        {\r
+            values.push_back(std::to_string(i) + " 千卡");\r
+        }\r
+        return values;\r
+    }\r
+    /***************************************************************************************/\r
+    static TraingSetCaluliView *g_pTraingSetCaluliView{nullptr};\r
+\r
+    TraingSetCaluliView::TraingSetCaluliView()\r
+    {\r
+        g_pTraingSetCaluliView = this;\r
+    }\r
+\r
+    TraingSetCaluliView::~TraingSetCaluliView()\r
+    {\r
+        DeInit();\r
+        g_pTraingSetCaluliView = nullptr;\r
+    }\r
+\r
+    TraingSetCaluliView *TraingSetCaluliView::GetInstance()\r
+    {\r
+\r
+        return g_pTraingSetCaluliView;\r
+    }\r
+    /*\r
+    InitLabel:初始化标签\r
+    @param label 标签指针\r
+    @param left 标签左边位置\r
+    @param top 标签顶部位置\r
+    @param width 标签宽度\r
+    @param height 标签高度\r
+    @param viewId 标签的视图 ID\r
+    @param text 标签显示的文本\r
+    @param fontName 字体名称\r
+    @param fontSize 字体大小\r
+    */\r
+    void TraingSetCaluliView::InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize)\r
+    {\r
+        // 检查标签指针是否为空\r
+        if (label == nullptr)\r
+        {\r
+            label = new UILabel();\r
+        }\r
+        // 设置标签的位置和大小\r
+        label->SetPosition(left, top);\r
+        label->Resize(width, height);\r
+        // 设置标签的视图 ID\r
+        label->SetViewId(viewId);\r
+        // 设置标签的样式\r
+        label->SetStyle(STYLE_TEXT_FONT, fontSize);\r
+        label->SetFont(fontName, fontSize);\r
+        // 设置标签的文本和其他属性\r
+        label->SetText(text);\r
+        label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        label->SetRollSpeed(0);\r
+        // 设置标签可见\r
+        label->SetVisible(true);\r
+    }\r
+    /*\r
+    InitButton:初始化按钮\r
+    @param button 按钮指针\r
+    @param left 按钮左边位置\r
+    @param top 按钮顶部位置\r
+    @param width 按钮宽度\r
+    @param height 按钮高度\r
+    @param viewId 按钮的视图 ID\r
+    */\r
+    void TraingSetCaluliView::InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId)\r
+    {\r
+        // 设置按钮的背景颜色\r
+        uint32_t backgroundColor = 0xff191919;        // 默认背景颜色\r
+        uint32_t pressedBackgroundColor = 0xff249115; // 按下时的背景颜色\r
+        uint32_t pressedBorderColor = 0xff0b1928;     // 按下时的边框颜色\r
+        // 创建新按钮(如果当前按钮为空)\r
+        if (button == nullptr)\r
+        {\r
+            button = new UIButton();\r
+        }\r
+        button->SetPosition(left, top);\r
+        button->Resize(width, height);\r
+        button->SetViewId(viewId);\r
+        button->SetStyle(STYLE_BACKGROUND_COLOR, backgroundColor);\r
+        button->SetStyleForState(STYLE_BACKGROUND_COLOR, pressedBackgroundColor, UIButton::PRESSED);\r
+        button->SetStyleForState(STYLE_BORDER_COLOR, pressedBorderColor, UIButton::PRESSED);\r
+        // 设置按钮的点击事件监听器为 TraingSetCaluliPresenter 的实例\r
+        button->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingSetCaluliPresenter::GetInstance()));\r
+        // 设置按钮可见\r
+        button->SetVisible(true);\r
+    }\r
+    /*\r
+    InitUIPicker: 初始化UIPicker组件\r
+    @param picker: 指向UIPicker的指针\r
+    @param x: UIPicker的左边位置\r
+    @param y: UIPicker的顶部位置\r
+    @param width: UIPicker的宽度\r
+    @param height: UIPicker的高度\r
+    @param viewId: UIPicker的视图 ID\r
+    @param values: 选项数组\r
+    @param count: 选项数量\r
+    @param backgroundFontSize: 普通文本大小\r
+    @highlightFontSize: 高光文本大小\r
+    */\r
+    void TraingSetCaluliView::InitUIPicker(UIPicker *&picker, int x, int y, int width, int height, const char *viewId)\r
+    {\r
+        // 文本大小\r
+        constexpr uint8_t BACKGROUND_FONT = 40;\r
+        constexpr uint8_t HIGHTLIGHT_FONT = 60;\r
+        // 获取value数组\r
+        int minCaluli = 100;\r
+        int maxCaluli = 1000;\r
+        int interval = 100;\r
+        std::vector<std::string> caluliValues = GenerateCaluliValues(minCaluli, maxCaluli, interval);\r
+\r
+        const char **values = new const char *[caluliValues.size()];\r
+        for (size_t i = 0; i < caluliValues.size(); i++)\r
+        {\r
+            values[i] = caluliValues[i].c_str();\r
+        }\r
+        // 创建 UIPicker\r
+        if (picker == nullptr)\r
+        {\r
+            picker = new UIPicker();\r
+        }\r
+\r
+        // 设置 UIPicker 的位置和大小\r
+        picker->SetPosition(x, y);\r
+        picker->Resize(width, height);\r
+        // 设置 UIPicker 的 ViewId\r
+        picker->SetViewId(viewId);\r
+        // 设置 UIPicker 的属性\r
+        picker->SetItemHeight(70);\r
+        picker->SetLoopState(true);\r
+        picker->SetTextColor(Color::GetColorFromRGBA(0x66, 0x66, 0x66, 0xff), Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff));\r
+        picker->SetBackgroundFont(DEFAULT_VECTOR_FONT_FILENAME, BACKGROUND_FONT); // 设置普通文本大小\r
+        picker->SetHighlightFont(DEFAULT_VECTOR_FONT_FILENAME, HIGHTLIGHT_FONT);  // 设置高光文本大小\r
+        picker->SetValues(values, caluliValues.size());\r
+        // 将 UIPicker 设置为显示\r
+        picker->SetVisible(true);\r
+    }\r
+\r
+    /* InitView:初始化界面*/\r
+    void TraingSetCaluliView ::InitView()\r
+    {\r
+        if (container_ == nullptr)\r
+        {\r
+            container_ = new UIViewGroup();\r
+            container_->SetPosition(0, 0, 466, 466);\r
+            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
+        }\r
+        // 初始化Lable\r
+        InitLabel(label1_, 173, 52, 120, 35, "label1", "卡路里设定", DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        container_->Add(label1_);\r
+\r
+        // 初始化UIPicker\r
+        InitUIPicker(uiPicker1_, 43, 106, 380, 240, "uiPicker1");\r
+        container_->Add(uiPicker1_);\r
+        //  初始化Button\r
+        InitButton(button1_, 0, 366, 466, 100, BUTTONOK);\r
+        // Set additional property\r
+        char *button1defaultImgSrc = "/user/res/Training/buttonok.bin";\r
+        char *button1triggeredImgSrc = nullptr;\r
+        button1_->SetImageSrc(button1defaultImgSrc, button1triggeredImgSrc);\r
+        container_->Add(button1_);\r
+    }\r
+    /* DeInit:删除组件 */\r
+    void TraingSetCaluliView::DeInit()\r
+    {\r
+        // 删除Label\r
+        if (label1_ != nullptr)\r
+        {\r
+            container_->Remove(label1_);\r
+            delete label1_;\r
+            label1_ = nullptr;\r
+        }\r
+        // 删除Button\r
+        if (button1_ != nullptr)\r
+        {\r
+            container_->Remove(button1_);\r
+            delete button1_;\r
+            button1_ = nullptr;\r
+        }\r
+\r
+        // 删除Image\r
+\r
+        // 删除滚动选择器\r
+        if (uiPicker1_ != nullptr)\r
+        {\r
+            container_->Remove(uiPicker1_);\r
+            delete uiPicker1_;\r
+            uiPicker1_ = nullptr;\r
+        }\r
+\r
+        // 删除容器\r
+        if (container_ != nullptr)\r
+        {\r
+            container_->RemoveAll(); // 移除容器中的所有组件\r
+            delete container_;\r
+            container_ = nullptr;\r
+        }\r
+    }\r
+\r
+    void TraingSetCaluliView::PreLoad(void)\r
+    {\r
+        if (!viewiInitStatus)\r
+        {\r
+            //printf("init traingsetcaluliview\n");\r
+            InitView();\r
+            viewiInitStatus = true;\r
+        }\r
+    }\r
+    void TraingSetCaluliView::OnStart()\r
+    {\r
+        container_ = new UIViewGroup();\r
+        if (container_ == nullptr)\r
+        {\r
+            return;\r
+        }\r
+        container_->SetPosition(0, 0);\r
+        container_->SetWidth(Screen::GetInstance().GetWidth());\r
+        container_->SetHeight(Screen::GetInstance().GetHeight());\r
+\r
+        // 创建 draglistener 实例并设置为拖动监听器\r
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingSetCaluliPresenter::GetInstance());\r
+        if (draglistener == nullptr)\r
+        {\r
+            return;\r
+        }\r
+        container_->SetOnDragListener(draglistener);\r
+\r
+        container_->SetTouchable(true);\r
+        container_->SetDraggable(true);\r
+\r
+        PreLoad();\r
+        RootView::GetInstance()->Add(container_);\r
+    }\r
+\r
+    void TraingSetCaluliView::OnSetUpView()\r
+    {\r
+\r
+        View<TraingSetCaluliPresenter>::OnSetUpView();\r
+        Draw();\r
+    }\r
+\r
+    void TraingSetCaluliView::OnTearDownView()\r
+    {\r
+\r
+        View<TraingSetCaluliPresenter>::OnTearDownView();\r
+        return;\r
+    }\r
+\r
+    void TraingSetCaluliView::OnStop()\r
+    {\r
+        View<TraingSetCaluliPresenter>::OnStop();\r
+        RootView::GetInstance()->RemoveAll();\r
+        return;\r
+    }\r
+}\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetDistPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetDistPresenter.cpp
new file mode 100644 (file)
index 0000000..0fb5cf8
--- /dev/null
@@ -0,0 +1,80 @@
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+
+#include <iostream>
+#include <chrono>
+#include <thread>
+#include "traing/include/TraingSetDistPresenter.h"
+// #include "TraingSetDistView.h"
+
+namespace OHOS
+{
+
+    // 当前Presenter属性实例化的内存指针
+    static TraingSetDistPresenter *g_pTraingSetDistPresenter = nullptr;
+
+    TraingSetDistPresenter::TraingSetDistPresenter()
+    {
+
+        g_pTraingSetDistPresenter = this;
+    }
+
+    TraingSetDistPresenter::~TraingSetDistPresenter()
+    {
+
+        g_pTraingSetDistPresenter = nullptr;
+    }
+
+    TraingSetDistPresenter *TraingSetDistPresenter::GetInstance()
+    {
+
+        return g_pTraingSetDistPresenter;
+    }
+
+    void TraingSetDistPresenter::OnStart()
+    {
+
+        Presenter<TraingSetDistView>::OnStart();
+    }
+
+    void TraingSetDistPresenter::OnPause(void)
+    {
+
+        Presenter<TraingSetDistView>::OnPause();
+    }
+
+    void TraingSetDistPresenter::OnResume(void)
+    {
+
+        Presenter<TraingSetDistView>::OnResume();
+    }
+
+    void TraingSetDistPresenter::OnStop(void)
+    {
+
+        Presenter<TraingSetDistView>::OnStop();
+    }
+
+    bool TraingSetDistPresenter::OnDrag(UIView &view, const DragEvent &event)
+    {
+
+        // if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&
+        //     (event.GetDeltaX() > 20) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))
+        // {
+        //     NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGSET);
+        // }
+        UNUSED(view);
+        return true;
+    }
+
+    bool TraingSetDistPresenter::OnClick(UIView &view, const ClickEvent &event)
+    {
+        // 根据控件id查找是哪个控件触发了点击回调
+        if (strcmp(view.GetViewId(), BUTTONOK) == 0)
+        {
+            uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGGPSSET);
+        }
+        return true;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetDistView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetDistView.cpp
new file mode 100644 (file)
index 0000000..634ea19
--- /dev/null
@@ -0,0 +1,280 @@
+
+#include "traing/include/TraingSetDistView.h"
+
+#include "common/image_cache_manager.h"
+#include "UiConfig.h"
+#include "ui_resource_image.h"
+#include <ui_scroll_view.h>
+#include "components/ui_button.h"
+#include "common/screen.h"
+#include <sstream>
+#include <string>
+#include <vector>
+
+namespace OHOS
+{
+
+    /***************************************************************************************/
+    // 动态生成包含指定公里区间内所有公里的字符串数组
+    std::vector<std::string> GenerateDistValues(int minDist, int maxDist, int interval)
+    {
+        std::vector<std::string> values;
+        for (int i = minDist; i <= maxDist; i += interval)
+        {
+            values.push_back(std::to_string(i) + " 公里");
+        }
+        return values;
+    }
+    /***************************************************************************************/
+    static TraingSetDistView *g_pTraingSetDistView{nullptr};
+
+    TraingSetDistView::TraingSetDistView()
+    {
+        g_pTraingSetDistView = this;
+    }
+
+    TraingSetDistView::~TraingSetDistView()
+    {
+        DeInit();
+        g_pTraingSetDistView = nullptr;
+    }
+
+    TraingSetDistView *TraingSetDistView::GetInstance()
+    {
+
+        return g_pTraingSetDistView;
+    }
+    /*
+    InitLabel:初始化标签
+    @param label 标签指针
+    @param left 标签左边位置
+    @param top 标签顶部位置
+    @param width 标签宽度
+    @param height 标签高度
+    @param viewId 标签的视图 ID
+    @param text 标签显示的文本
+    @param fontName 字体名称
+    @param fontSize 字体大小
+    */
+    void TraingSetDistView::InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize)
+    {
+        // 检查标签指针是否为空
+        if (label == nullptr)
+        {
+            label = new UILabel();
+        }
+        // 设置标签的位置和大小
+        label->SetPosition(left, top);
+        label->Resize(width, height);
+        // 设置标签的视图 ID
+        label->SetViewId(viewId);
+        // 设置标签的样式
+        label->SetStyle(STYLE_TEXT_FONT, fontSize);
+        label->SetFont(fontName, fontSize);
+        // 设置标签的文本和其他属性
+        label->SetText(text);
+        label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        label->SetRollSpeed(0);
+        // 设置标签可见
+        label->SetVisible(true);
+    }
+    /*
+    InitButton:初始化按钮
+    @param button 按钮指针
+    @param left 按钮左边位置
+    @param top 按钮顶部位置
+    @param width 按钮宽度
+    @param height 按钮高度
+    @param viewId 按钮的视图 ID
+    */
+    void TraingSetDistView::InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId)
+    {
+        // 设置按钮的背景颜色
+        uint32_t backgroundColor = 0xff191919;        // 默认背景颜色
+        uint32_t pressedBackgroundColor = 0xff249115; // 按下时的背景颜色
+        uint32_t pressedBorderColor = 0xff0b1928;     // 按下时的边框颜色
+        // 创建新按钮(如果当前按钮为空)
+        if (button == nullptr)
+        {
+            button = new UIButton();
+        }
+        button->SetPosition(left, top);
+        button->Resize(width, height);
+        button->SetViewId(viewId);
+        button->SetStyle(STYLE_BACKGROUND_COLOR, backgroundColor);
+        button->SetStyleForState(STYLE_BACKGROUND_COLOR, pressedBackgroundColor, UIButton::PRESSED);
+        button->SetStyleForState(STYLE_BORDER_COLOR, pressedBorderColor, UIButton::PRESSED);
+        // 设置按钮的点击事件监听器为 TraingSetDistPresenter 的实例
+        button->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingSetDistPresenter::GetInstance()));
+        // 设置按钮可见
+        button->SetVisible(true);
+    }
+    /*
+    InitUIPicker: 初始化UIPicker组件
+    @param picker: 指向UIPicker的指针
+    @param x: UIPicker的左边位置
+    @param y: UIPicker的顶部位置
+    @param width: UIPicker的宽度
+    @param height: UIPicker的高度
+    @param viewId: UIPicker的视图 ID
+    @param values: 选项数组
+    @param count: 选项数量
+    @param backgroundFontSize: 普通文本大小
+    @highlightFontSize: 高光文本大小
+    */
+    void TraingSetDistView::InitUIPicker(UIPicker *&picker, int x, int y, int width, int height, const char *viewId)
+    {
+        // 文本大小
+        constexpr uint8_t BACKGROUND_FONT = 40;
+        constexpr uint8_t HIGHTLIGHT_FONT = 60;
+        // 获取value数组
+        int minDist = 1;
+        int maxDist = 20;
+        int interval = 1;
+        std::vector<std::string> DistValues = GenerateDistValues(minDist, maxDist, interval);
+
+        const char **values = new const char *[DistValues.size()];
+        for (size_t i = 0; i < DistValues.size(); i++)
+        {
+            values[i] = DistValues[i].c_str();
+        }
+        // 创建 UIPicker
+        if (picker == nullptr)
+        {
+            picker = new UIPicker();
+        }
+
+        // 设置 UIPicker 的位置和大小
+        picker->SetPosition(x, y);
+        picker->Resize(width, height);
+        // 设置 UIPicker 的 ViewId
+        picker->SetViewId(viewId);
+        // 设置 UIPicker 的属性
+        picker->SetItemHeight(70);
+        picker->SetLoopState(true);
+        picker->SetTextColor(Color::GetColorFromRGBA(0x66, 0x66, 0x66, 0xff), Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff));
+        picker->SetBackgroundFont(DEFAULT_VECTOR_FONT_FILENAME, BACKGROUND_FONT); // 设置普通文本大小
+        picker->SetHighlightFont(DEFAULT_VECTOR_FONT_FILENAME, HIGHTLIGHT_FONT);  // 设置高光文本大小
+        picker->SetValues(values, DistValues.size());
+        // 将 UIPicker 设置为显示
+        picker->SetVisible(true);
+    }
+
+    /* InitView:初始化界面*/
+    void TraingSetDistView ::InitView()
+    {
+        if (container_ == nullptr)
+        {
+            container_ = new UIViewGroup();
+            container_->SetPosition(0, 0, 466, 466);
+            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);
+        }
+        // 初始化Lable
+        InitLabel(label1_, 173, 52, 120, 35, "label1", "步数设定", DEFAULT_VECTOR_FONT_FILENAME, 30);
+        container_->Add(label1_);
+
+        // 初始化UIPicker
+        InitUIPicker(uiPicker1_, 43, 106, 380, 240, "uiPicker1");
+        container_->Add(uiPicker1_);
+        //  初始化Button
+        InitButton(button1_, 0, 366, 466, 100, BUTTONOK);
+        // Set additional property
+        char *button1defaultImgSrc = "/user/res/Training/buttonok.bin";
+        char *button1triggeredImgSrc = nullptr;
+        button1_->SetImageSrc(button1defaultImgSrc, button1triggeredImgSrc);
+        container_->Add(button1_);
+    }
+    /* DeInit:删除组件 */
+    void TraingSetDistView::DeInit()
+    {
+        // 删除Label
+        if (label1_ != nullptr)
+        {
+            container_->Remove(label1_);
+            delete label1_;
+            label1_ = nullptr;
+        }
+        // 删除Button
+        if (button1_ != nullptr)
+        {
+            container_->Remove(button1_);
+            delete button1_;
+            button1_ = nullptr;
+        }
+
+        // 删除Image
+
+        // 删除滚动选择器
+        if (uiPicker1_ != nullptr)
+        {
+            container_->Remove(uiPicker1_);
+            delete uiPicker1_;
+            uiPicker1_ = nullptr;
+        }
+
+        // 删除容器
+        if (container_ != nullptr)
+        {
+            container_->RemoveAll(); // 移除容器中的所有组件
+            delete container_;
+            container_ = nullptr;
+        }
+    }
+
+    void TraingSetDistView::PreLoad(void)
+    {
+        if (!viewiInitStatus)
+        {
+            //printf("init TraingSetDistview\n");
+            InitView();
+            viewiInitStatus = true;
+        }
+    }
+    void TraingSetDistView::OnStart()
+    {
+        container_ = new UIViewGroup();
+        if (container_ == nullptr)
+        {
+            return;
+        }
+        container_->SetPosition(0, 0);
+        container_->SetWidth(Screen::GetInstance().GetWidth());
+        container_->SetHeight(Screen::GetInstance().GetHeight());
+
+        // 创建 draglistener 实例并设置为拖动监听器
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingSetDistPresenter::GetInstance());
+        if (draglistener == nullptr)
+        {
+            return;
+        }
+        container_->SetOnDragListener(draglistener);
+
+        container_->SetTouchable(true);
+        container_->SetDraggable(true);
+
+        PreLoad();
+        RootView::GetInstance()->Add(container_);
+    }
+
+    void TraingSetDistView::OnSetUpView()
+    {
+
+        View<TraingSetDistPresenter>::OnSetUpView();
+        Draw();
+    }
+
+    void TraingSetDistView::OnTearDownView()
+    {
+
+        View<TraingSetDistPresenter>::OnTearDownView();
+        return;
+    }
+
+    void TraingSetDistView::OnStop()
+    {
+        View<TraingSetDistPresenter>::OnStop();
+        RootView::GetInstance()->RemoveAll();
+        return;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetPresenter.cpp
new file mode 100644 (file)
index 0000000..79af641
--- /dev/null
@@ -0,0 +1,84 @@
+#include "AppViewIDs.h"\r
+#include "NativeAbility.h"\r
+\r
+#include <iostream>\r
+#include <chrono>\r
+#include <thread>\r
+#include "traing/include/TraingSetPresenter.h"\r
+// #include "TraingSetView.h"\r
+\r
+namespace OHOS\r
+{\r
+\r
+    // 当前Presenter属性实例化的内存指针\r
+    static TraingSetPresenter *g_pTraingSetPresenter = nullptr;\r
+\r
+    TraingSetPresenter::TraingSetPresenter()\r
+    {\r
+\r
+        g_pTraingSetPresenter = this;\r
+    }\r
+\r
+    TraingSetPresenter::~TraingSetPresenter()\r
+    {\r
+\r
+        g_pTraingSetPresenter = nullptr;\r
+    }\r
+\r
+    TraingSetPresenter *TraingSetPresenter::GetInstance()\r
+    {\r
+\r
+        return g_pTraingSetPresenter;\r
+    }\r
+\r
+    void TraingSetPresenter::OnStart()\r
+    {\r
+\r
+        Presenter<TraingSetView>::OnStart();\r
+    }\r
+\r
+    void TraingSetPresenter::OnPause(void)\r
+    {\r
+\r
+        Presenter<TraingSetView>::OnPause();\r
+    }\r
+\r
+    void TraingSetPresenter::OnResume(void)\r
+    {\r
+\r
+        Presenter<TraingSetView>::OnResume();\r
+    }\r
+\r
+    void TraingSetPresenter::OnStop(void)\r
+    {\r
+\r
+        Presenter<TraingSetView>::OnStop();\r
+    }\r
+\r
+    bool TraingSetPresenter::OnDrag(UIView &view, const DragEvent &event)\r
+    {\r
+\r
+        if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&\r
+            (event.GetDeltaX() > 40) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))\r
+        {\r
+            //uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGNOMAL);\r
+        }\r
+        UNUSED(view);\r
+        return true;\r
+    }\r
+\r
+    bool TraingSetPresenter::OnClick(UIView &view, const ClickEvent &event)\r
+    {\r
+        // 根据控件id查找是哪个控件触发了点击回调\r
+        if (strcmp(view.GetViewId(), BUTTONTIME) == 0)\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGSETTIME);\r
+        }\r
+        if (strcmp(view.GetViewId(), BUTTONCALULI) == 0)\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGSETCALULI);\r
+        }\r
+        return true;\r
+    }\r
+}\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetSeptPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetSeptPresenter.cpp
new file mode 100644 (file)
index 0000000..5841d3d
--- /dev/null
@@ -0,0 +1,80 @@
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+
+#include <iostream>
+#include <chrono>
+#include <thread>
+#include "traing/include/TraingSetSeptPresenter.h"
+// #include "TraingSetSeptView.h"
+
+namespace OHOS
+{
+
+    // 当前Presenter属性实例化的内存指针
+    static TraingSetSeptPresenter *g_pTraingSetSeptPresenter = nullptr;
+
+    TraingSetSeptPresenter::TraingSetSeptPresenter()
+    {
+
+        g_pTraingSetSeptPresenter = this;
+    }
+
+    TraingSetSeptPresenter::~TraingSetSeptPresenter()
+    {
+
+        g_pTraingSetSeptPresenter = nullptr;
+    }
+
+    TraingSetSeptPresenter *TraingSetSeptPresenter::GetInstance()
+    {
+
+        return g_pTraingSetSeptPresenter;
+    }
+
+    void TraingSetSeptPresenter::OnStart()
+    {
+
+        Presenter<TraingSetSeptView>::OnStart();
+    }
+
+    void TraingSetSeptPresenter::OnPause(void)
+    {
+
+        Presenter<TraingSetSeptView>::OnPause();
+    }
+
+    void TraingSetSeptPresenter::OnResume(void)
+    {
+
+        Presenter<TraingSetSeptView>::OnResume();
+    }
+
+    void TraingSetSeptPresenter::OnStop(void)
+    {
+
+        Presenter<TraingSetSeptView>::OnStop();
+    }
+
+    bool TraingSetSeptPresenter::OnDrag(UIView &view, const DragEvent &event)
+    {
+
+        // if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&
+        //     (event.GetDeltaX() > 20) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))
+        // {
+        //     NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGSET);
+        // }
+        UNUSED(view);
+        return true;
+    }
+
+    bool TraingSetSeptPresenter::OnClick(UIView &view, const ClickEvent &event)
+    {
+        // 根据控件id查找是哪个控件触发了点击回调
+        if (strcmp(view.GetViewId(), BUTTONOK) == 0)
+        {
+            uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGGPSSET);
+        }
+        return true;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetSeptView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetSeptView.cpp
new file mode 100644 (file)
index 0000000..8bd73c1
--- /dev/null
@@ -0,0 +1,280 @@
+
+#include "traing/include/TraingSetSeptView.h"
+
+#include "common/image_cache_manager.h"
+#include "UiConfig.h"
+#include "ui_resource_image.h"
+#include <ui_scroll_view.h>
+#include "components/ui_button.h"
+#include "common/screen.h"
+#include <sstream>
+#include <string>
+#include <vector>
+
+namespace OHOS
+{
+
+    /***************************************************************************************/
+    // 动态生成包含指定步数区间内所有步数的字符串数组
+    std::vector<std::string> GenerateSeptValues(int minSept, int maxSept, int interval)
+    {
+        std::vector<std::string> values;
+        for (int i = minSept; i <= maxSept; i += interval)
+        {
+            values.push_back(std::to_string(i) + " 步");
+        }
+        return values;
+    }
+    /***************************************************************************************/
+    static TraingSetSeptView *g_pTraingSetSeptView{nullptr};
+
+    TraingSetSeptView::TraingSetSeptView()
+    {
+        g_pTraingSetSeptView = this;
+    }
+
+    TraingSetSeptView::~TraingSetSeptView()
+    {
+        DeInit();
+        g_pTraingSetSeptView = nullptr;
+    }
+
+    TraingSetSeptView *TraingSetSeptView::GetInstance()
+    {
+
+        return g_pTraingSetSeptView;
+    }
+    /*
+    InitLabel:初始化标签
+    @param label 标签指针
+    @param left 标签左边位置
+    @param top 标签顶部位置
+    @param width 标签宽度
+    @param height 标签高度
+    @param viewId 标签的视图 ID
+    @param text 标签显示的文本
+    @param fontName 字体名称
+    @param fontSize 字体大小
+    */
+    void TraingSetSeptView::InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize)
+    {
+        // 检查标签指针是否为空
+        if (label == nullptr)
+        {
+            label = new UILabel();
+        }
+        // 设置标签的位置和大小
+        label->SetPosition(left, top);
+        label->Resize(width, height);
+        // 设置标签的视图 ID
+        label->SetViewId(viewId);
+        // 设置标签的样式
+        label->SetStyle(STYLE_TEXT_FONT, fontSize);
+        label->SetFont(fontName, fontSize);
+        // 设置标签的文本和其他属性
+        label->SetText(text);
+        label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        label->SetRollSpeed(0);
+        // 设置标签可见
+        label->SetVisible(true);
+    }
+    /*
+    InitButton:初始化按钮
+    @param button 按钮指针
+    @param left 按钮左边位置
+    @param top 按钮顶部位置
+    @param width 按钮宽度
+    @param height 按钮高度
+    @param viewId 按钮的视图 ID
+    */
+    void TraingSetSeptView::InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId)
+    {
+        // 设置按钮的背景颜色
+        uint32_t backgroundColor = 0xff191919;        // 默认背景颜色
+        uint32_t pressedBackgroundColor = 0xff249115; // 按下时的背景颜色
+        uint32_t pressedBorderColor = 0xff0b1928;     // 按下时的边框颜色
+        // 创建新按钮(如果当前按钮为空)
+        if (button == nullptr)
+        {
+            button = new UIButton();
+        }
+        button->SetPosition(left, top);
+        button->Resize(width, height);
+        button->SetViewId(viewId);
+        button->SetStyle(STYLE_BACKGROUND_COLOR, backgroundColor);
+        button->SetStyleForState(STYLE_BACKGROUND_COLOR, pressedBackgroundColor, UIButton::PRESSED);
+        button->SetStyleForState(STYLE_BORDER_COLOR, pressedBorderColor, UIButton::PRESSED);
+        // 设置按钮的点击事件监听器为 TraingSetSeptPresenter 的实例
+        button->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingSetSeptPresenter::GetInstance()));
+        // 设置按钮可见
+        button->SetVisible(true);
+    }
+    /*
+    InitUIPicker: 初始化UIPicker组件
+    @param picker: 指向UIPicker的指针
+    @param x: UIPicker的左边位置
+    @param y: UIPicker的顶部位置
+    @param width: UIPicker的宽度
+    @param height: UIPicker的高度
+    @param viewId: UIPicker的视图 ID
+    @param values: 选项数组
+    @param count: 选项数量
+    @param backgroundFontSize: 普通文本大小
+    @highlightFontSize: 高光文本大小
+    */
+    void TraingSetSeptView::InitUIPicker(UIPicker *&picker, int x, int y, int width, int height, const char *viewId)
+    {
+        // 文本大小
+        constexpr uint8_t BACKGROUND_FONT = 40;
+        constexpr uint8_t HIGHTLIGHT_FONT = 60;
+        // 获取value数组
+        int minSept = 500;
+        int maxSept = 50000;
+        int interval = 500;
+        std::vector<std::string> SeptValues = GenerateSeptValues(minSept, maxSept, interval);
+
+        const char **values = new const char *[SeptValues.size()];
+        for (size_t i = 0; i < SeptValues.size(); i++)
+        {
+            values[i] = SeptValues[i].c_str();
+        }
+        // 创建 UIPicker
+        if (picker == nullptr)
+        {
+            picker = new UIPicker();
+        }
+
+        // 设置 UIPicker 的位置和大小
+        picker->SetPosition(x, y);
+        picker->Resize(width, height);
+        // 设置 UIPicker 的 ViewId
+        picker->SetViewId(viewId);
+        // 设置 UIPicker 的属性
+        picker->SetItemHeight(70);
+        picker->SetLoopState(true);
+        picker->SetTextColor(Color::GetColorFromRGBA(0x66, 0x66, 0x66, 0xff), Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff));
+        picker->SetBackgroundFont(DEFAULT_VECTOR_FONT_FILENAME, BACKGROUND_FONT); // 设置普通文本大小
+        picker->SetHighlightFont(DEFAULT_VECTOR_FONT_FILENAME, HIGHTLIGHT_FONT);  // 设置高光文本大小
+        picker->SetValues(values, SeptValues.size());
+        // 将 UIPicker 设置为显示
+        picker->SetVisible(true);
+    }
+
+    /* InitView:初始化界面*/
+    void TraingSetSeptView ::InitView()
+    {
+        if (container_ == nullptr)
+        {
+            container_ = new UIViewGroup();
+            container_->SetPosition(0, 0, 466, 466);
+            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);
+        }
+        // 初始化Lable
+        InitLabel(label1_, 173, 52, 120, 35, "label1", "步数设定", DEFAULT_VECTOR_FONT_FILENAME, 30);
+        container_->Add(label1_);
+
+        // 初始化UIPicker
+        InitUIPicker(uiPicker1_, 43, 106, 380, 240, "uiPicker1");
+        container_->Add(uiPicker1_);
+        //  初始化Button
+        InitButton(button1_, 0, 366, 466, 100, BUTTONOK);
+        // Set additional property
+        char *button1defaultImgSrc = "/user/res/Training/buttonok.bin";
+        char *button1triggeredImgSrc = nullptr;
+        button1_->SetImageSrc(button1defaultImgSrc, button1triggeredImgSrc);
+        container_->Add(button1_);
+    }
+    /* DeInit:删除组件 */
+    void TraingSetSeptView::DeInit()
+    {
+        // 删除Label
+        if (label1_ != nullptr)
+        {
+            container_->Remove(label1_);
+            delete label1_;
+            label1_ = nullptr;
+        }
+        // 删除Button
+        if (button1_ != nullptr)
+        {
+            container_->Remove(button1_);
+            delete button1_;
+            button1_ = nullptr;
+        }
+
+        // 删除Image
+
+        // 删除滚动选择器
+        if (uiPicker1_ != nullptr)
+        {
+            container_->Remove(uiPicker1_);
+            delete uiPicker1_;
+            uiPicker1_ = nullptr;
+        }
+
+        // 删除容器
+        if (container_ != nullptr)
+        {
+            container_->RemoveAll(); // 移除容器中的所有组件
+            delete container_;
+            container_ = nullptr;
+        }
+    }
+
+    void TraingSetSeptView::PreLoad(void)
+    {
+        if (!viewiInitStatus)
+        {
+            //printf("init TraingSetSeptview\n");
+            InitView();
+            viewiInitStatus = true;
+        }
+    }
+    void TraingSetSeptView::OnStart()
+    {
+        container_ = new UIViewGroup();
+        if (container_ == nullptr)
+        {
+            return;
+        }
+        container_->SetPosition(0, 0);
+        container_->SetWidth(Screen::GetInstance().GetWidth());
+        container_->SetHeight(Screen::GetInstance().GetHeight());
+
+        // 创建 draglistener 实例并设置为拖动监听器
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingSetSeptPresenter::GetInstance());
+        if (draglistener == nullptr)
+        {
+            return;
+        }
+        container_->SetOnDragListener(draglistener);
+
+        container_->SetTouchable(true);
+        container_->SetDraggable(true);
+
+        PreLoad();
+        RootView::GetInstance()->Add(container_);
+    }
+
+    void TraingSetSeptView::OnSetUpView()
+    {
+
+        View<TraingSetSeptPresenter>::OnSetUpView();
+        Draw();
+    }
+
+    void TraingSetSeptView::OnTearDownView()
+    {
+
+        View<TraingSetSeptPresenter>::OnTearDownView();
+        return;
+    }
+
+    void TraingSetSeptView::OnStop()
+    {
+        View<TraingSetSeptPresenter>::OnStop();
+        RootView::GetInstance()->RemoveAll();
+        return;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetTimePresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetTimePresenter.cpp
new file mode 100644 (file)
index 0000000..124473c
--- /dev/null
@@ -0,0 +1,86 @@
+#include "AppViewIDs.h"\r
+#include "NativeAbility.h"\r
+\r
+#include <iostream>\r
+#include <chrono>\r
+#include <thread>\r
+#include "traing/include/TraingSetTimePresenter.h"\r
+// #include "TraingSetTimeView.h"\r
+\r
+namespace OHOS\r
+{\r
+\r
+    // 当前Presenter属性实例化的内存指针\r
+    static TraingSetTimePresenter *g_pTraingSetTimePresenter = nullptr;\r
+\r
+    TraingSetTimePresenter::TraingSetTimePresenter()\r
+    {\r
+\r
+        g_pTraingSetTimePresenter = this;\r
+    }\r
+\r
+    TraingSetTimePresenter::~TraingSetTimePresenter()\r
+    {\r
+\r
+        g_pTraingSetTimePresenter = nullptr;\r
+    }\r
+\r
+    TraingSetTimePresenter *TraingSetTimePresenter::GetInstance()\r
+    {\r
+\r
+        return g_pTraingSetTimePresenter;\r
+    }\r
+\r
+    void TraingSetTimePresenter::OnStart()\r
+    {\r
+\r
+        Presenter<TraingSetTimeView>::OnStart();\r
+    }\r
+\r
+    void TraingSetTimePresenter::OnPause(void)\r
+    {\r
+\r
+        Presenter<TraingSetTimeView>::OnPause();\r
+    }\r
+\r
+    void TraingSetTimePresenter::OnResume(void)\r
+    {\r
+\r
+        Presenter<TraingSetTimeView>::OnResume();\r
+    }\r
+\r
+    void TraingSetTimePresenter::OnStop(void)\r
+    {\r
+\r
+        Presenter<TraingSetTimeView>::OnStop();\r
+    }\r
+\r
+    bool TraingSetTimePresenter::OnDrag(UIView &view, const DragEvent &event)\r
+    {\r
+\r
+        // if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&\r
+        //     (event.GetDeltaX() > 20) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))\r
+        // {\r
+        //     NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGSET);\r
+        // }\r
+        UNUSED(view);\r
+        return true;\r
+    }\r
+\r
+    bool TraingSetTimePresenter::OnClick(UIView &view, const ClickEvent &event)\r
+    {\r
+        // 根据控件id查找是哪个控件触发了点击回调\r
+        if (strcmp(view.GetViewId(), BUTTONOK) == 0)\r
+        {\r
+            uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();\r
+            NativeAbility::GetInstance().ChangeSlice(preSlice);\r
+        }\r
+        if (strcmp(view.GetViewId(), "Remind") == 0)\r
+        {\r
+            // 模拟心率监测,等待20秒\r
+            // std::this_thread::sleep_for(std::chrono::seconds(20));\r
+            // NativeAbility::GetInstance().ChangeSlice(VIEW_TraingSetTimeREMIND);\r
+        }\r
+        return true;\r
+    }\r
+}\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetTimeView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetTimeView.cpp
new file mode 100644 (file)
index 0000000..e123b4e
--- /dev/null
@@ -0,0 +1,279 @@
+\r
+#include "traing/include/TraingSetTimeView.h"\r
+\r
+#include "common/image_cache_manager.h"\r
+#include "UiConfig.h"\r
+#include "ui_resource_image.h"\r
+#include <ui_scroll_view.h>\r
+#include "components/ui_button.h"\r
+#include "common/screen.h"\r
+#include <sstream>\r
+#include <string>\r
+#include <vector>\r
+\r
+namespace OHOS\r
+{\r
+\r
+    /***************************************************************************************/\r
+    // 动态生成包含指定时间区间内所有分钟数的字符串数组\r
+    std::vector<std::string> GenerateTimeValues(int minTime, int maxTime, int interval)\r
+    {\r
+        std::vector<std::string> values;\r
+        for (int i = minTime; i <= maxTime; i += interval)\r
+        {\r
+            values.push_back(std::to_string(i) + " 分钟");\r
+        }\r
+        return values;\r
+    }\r
+    /***************************************************************************************/\r
+    static TraingSetTimeView *g_pTraingSetTimeView{nullptr};\r
+\r
+    TraingSetTimeView::TraingSetTimeView()\r
+    {\r
+        g_pTraingSetTimeView = this;\r
+    }\r
+\r
+    TraingSetTimeView::~TraingSetTimeView()\r
+    {\r
+        DeInit();\r
+        g_pTraingSetTimeView = nullptr;\r
+    }\r
+\r
+    TraingSetTimeView *TraingSetTimeView::GetInstance()\r
+    {\r
+\r
+        return g_pTraingSetTimeView;\r
+    }\r
+    /*\r
+    InitLabel:初始化标签\r
+    @param label 标签指针\r
+    @param left 标签左边位置\r
+    @param top 标签顶部位置\r
+    @param width 标签宽度\r
+    @param height 标签高度\r
+    @param viewId 标签的视图 ID\r
+    @param text 标签显示的文本\r
+    @param fontName 字体名称\r
+    @param fontSize 字体大小\r
+    */\r
+    void TraingSetTimeView::InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize)\r
+    {\r
+        // 检查标签指针是否为空\r
+        if (label == nullptr)\r
+        {\r
+            label = new UILabel();\r
+        }\r
+        // 设置标签的位置和大小\r
+        label->SetPosition(left, top);\r
+        label->Resize(width, height);\r
+        // 设置标签的视图 ID\r
+        label->SetViewId(viewId);\r
+        // 设置标签的样式\r
+        label->SetStyle(STYLE_TEXT_FONT, fontSize);\r
+        label->SetFont(fontName, fontSize);\r
+        // 设置标签的文本和其他属性\r
+        label->SetText(text);\r
+        label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        label->SetRollSpeed(0);\r
+        // 设置标签可见\r
+        label->SetVisible(true);\r
+    }\r
+    /*\r
+    InitButton:初始化按钮\r
+    @param button 按钮指针\r
+    @param left 按钮左边位置\r
+    @param top 按钮顶部位置\r
+    @param width 按钮宽度\r
+    @param height 按钮高度\r
+    @param viewId 按钮的视图 ID\r
+    */\r
+    void TraingSetTimeView::InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId)\r
+    {\r
+        // 设置按钮的背景颜色\r
+        uint32_t backgroundColor = 0xff191919;        // 默认背景颜色\r
+        uint32_t pressedBackgroundColor = 0xff249115; // 按下时的背景颜色\r
+        uint32_t pressedBorderColor = 0xff0b1928;     // 按下时的边框颜色\r
+        // 创建新按钮(如果当前按钮为空)\r
+        if (button == nullptr)\r
+        {\r
+            button = new UIButton();\r
+        }\r
+        button->SetPosition(left, top);\r
+        button->Resize(width, height);\r
+        button->SetViewId(viewId);\r
+        button->SetStyle(STYLE_BACKGROUND_COLOR, backgroundColor);\r
+        button->SetStyleForState(STYLE_BACKGROUND_COLOR, pressedBackgroundColor, UIButton::PRESSED);\r
+        button->SetStyleForState(STYLE_BORDER_COLOR, pressedBorderColor, UIButton::PRESSED);\r
+        // 设置按钮的点击事件监听器为 TraingSetTimePresenter 的实例\r
+        button->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingSetTimePresenter::GetInstance()));\r
+        // 设置按钮可见\r
+        button->SetVisible(true);\r
+    }\r
+    /*\r
+    InitUIPicker: 初始化UIPicker组件\r
+    @param picker: 指向UIPicker的指针\r
+    @param x: UIPicker的左边位置\r
+    @param y: UIPicker的顶部位置\r
+    @param width: UIPicker的宽度\r
+    @param height: UIPicker的高度\r
+    @param viewId: UIPicker的视图 ID\r
+    @param values: 选项数组\r
+    @param count: 选项数量\r
+    @param backgroundFontSize: 普通文本大小\r
+    @highlightFontSize: 高光文本大小\r
+    */\r
+    void TraingSetTimeView::InitUIPicker(UIPicker *&picker, int x, int y, int width, int height, const char *viewId)\r
+    {\r
+        // 文本大小\r
+        constexpr uint8_t BACKGROUND_FONT = 40;\r
+        constexpr uint8_t HIGHTLIGHT_FONT = 60;\r
+        // 获取value数组\r
+        int minTime = 10;\r
+        int maxTime = 600;\r
+        int interval = 10;\r
+        std::vector<std::string> timeValues = GenerateTimeValues(minTime, maxTime, interval);\r
+\r
+        const char **values = new const char *[timeValues.size()];\r
+        for (size_t i = 0; i < timeValues.size(); i++)\r
+        {\r
+            values[i] = timeValues[i].c_str();\r
+        }\r
+        // 创建 UIPicker\r
+        if (picker == nullptr)\r
+        {\r
+            picker = new UIPicker();\r
+        }\r
+\r
+        // 设置 UIPicker 的位置和大小\r
+        picker->SetPosition(x, y);\r
+        picker->Resize(width, height);\r
+        // 设置 UIPicker 的 ViewId\r
+        picker->SetViewId(viewId);\r
+        // 设置 UIPicker 的属性\r
+        picker->SetItemHeight(70);\r
+        picker->SetLoopState(true);\r
+        picker->SetTextColor(Color::GetColorFromRGBA(0x66, 0x66, 0x66, 0xff), Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff));\r
+        picker->SetBackgroundFont(DEFAULT_VECTOR_FONT_FILENAME, BACKGROUND_FONT); // 设置普通文本大小\r
+        picker->SetHighlightFont(DEFAULT_VECTOR_FONT_FILENAME, HIGHTLIGHT_FONT);  // 设置高光文本大小\r
+        picker->SetValues(values, timeValues.size());\r
+        // 将 UIPicker 设置为显示\r
+        picker->SetVisible(true);\r
+    }\r
+\r
+    /* InitView:初始化界面*/\r
+    void TraingSetTimeView ::InitView()\r
+    {\r
+        if (container_ == nullptr)\r
+        {\r
+            container_ = new UIViewGroup();\r
+            container_->SetPosition(0, 0, 466, 466);\r
+            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
+        }\r
+        // 初始化Lable\r
+        InitLabel(label1_, 173, 52, 120, 35, "label1", "时长设定", DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        container_->Add(label1_);\r
+\r
+        // 初始化UIPicker\r
+        InitUIPicker(uiPicker1_, 43, 106, 380, 240, "uiPicker1");\r
+        container_->Add(uiPicker1_);\r
+        //  初始化Button\r
+        InitButton(button1_, 0, 366, 466, 100, BUTTONOK);\r
+        // Set additional property\r
+        char *button1defaultImgSrc = "/user/res/Training/buttonok.bin";\r
+        char *button1triggeredImgSrc = nullptr;\r
+        button1_->SetImageSrc(button1defaultImgSrc, button1triggeredImgSrc);\r
+        container_->Add(button1_);\r
+    }\r
+    /* DeInit:删除组件 */\r
+    void TraingSetTimeView::DeInit()\r
+    {\r
+        // 删除Label\r
+        if (label1_ != nullptr)\r
+        {\r
+            container_->Remove(label1_);\r
+            delete label1_;\r
+            label1_ = nullptr;\r
+        }\r
+        // 删除Button\r
+        if (button1_ != nullptr)\r
+        {\r
+            container_->Remove(button1_);\r
+            delete button1_;\r
+            button1_ = nullptr;\r
+        }\r
+\r
+        // 删除Image\r
+\r
+        // 删除滚动选择器\r
+        if (uiPicker1_ != nullptr)\r
+        {\r
+            container_->Remove(uiPicker1_);\r
+            delete uiPicker1_;\r
+            uiPicker1_ = nullptr;\r
+        }\r
+\r
+        // 删除容器\r
+        if (container_ != nullptr)\r
+        {\r
+            container_->RemoveAll(); // 移除容器中的所有组件\r
+            delete container_;\r
+            container_ = nullptr;\r
+        }\r
+    }\r
+\r
+    void TraingSetTimeView::PreLoad(void)\r
+    {\r
+        if (!viewiInitStatus)\r
+        {\r
+            InitView();\r
+            viewiInitStatus = true;\r
+        }\r
+    }\r
+    void TraingSetTimeView::OnStart()\r
+    {\r
+        container_ = new UIViewGroup();\r
+        if (container_ == nullptr)\r
+        {\r
+            return;\r
+        }\r
+        container_->SetPosition(0, 0);\r
+        container_->SetWidth(Screen::GetInstance().GetWidth());\r
+        container_->SetHeight(Screen::GetInstance().GetHeight());\r
+\r
+        // 创建 draglistener 实例并设置为拖动监听器\r
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingSetTimePresenter::GetInstance());\r
+        if (draglistener == nullptr)\r
+        {\r
+            return;\r
+        }\r
+        container_->SetOnDragListener(draglistener);\r
+\r
+        container_->SetTouchable(true);\r
+        container_->SetDraggable(true);\r
+\r
+        PreLoad();\r
+        RootView::GetInstance()->Add(container_);\r
+    }\r
+\r
+    void TraingSetTimeView::OnSetUpView()\r
+    {\r
+\r
+        View<TraingSetTimePresenter>::OnSetUpView();\r
+        Draw();\r
+    }\r
+\r
+    void TraingSetTimeView::OnTearDownView()\r
+    {\r
+\r
+        View<TraingSetTimePresenter>::OnTearDownView();\r
+        return;\r
+    }\r
+\r
+    void TraingSetTimeView::OnStop()\r
+    {\r
+        View<TraingSetTimePresenter>::OnStop();\r
+        RootView::GetInstance()->RemoveAll();\r
+        return;\r
+    }\r
+}\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetView.cpp
new file mode 100644 (file)
index 0000000..02a1114
--- /dev/null
@@ -0,0 +1,297 @@
+\r
+#include "traing/include/TraingSetView.h"\r
+\r
+#include "common/image_cache_manager.h"\r
+#include "UiConfig.h"\r
+#include "ui_resource_image.h"\r
+#include <ui_scroll_view.h>\r
+#include "components/ui_button.h"\r
+namespace OHOS\r
+{\r
+    static const char *imagePath_iocn = "/user/res/Training/icon.bin";\r
+    static const char *imagePath_time = "/user/res/Training/time.bin";\r
+    static const char *imagePath_calories = "/user/res/Training/calories.bin";\r
+\r
+    static TraingSetView *g_pTraingSetView{nullptr};\r
+\r
+    TraingSetView::TraingSetView()\r
+    {\r
+        g_pTraingSetView = this;\r
+    }\r
+\r
+    TraingSetView::~TraingSetView()\r
+    {\r
+        DeInit();\r
+        g_pTraingSetView = nullptr;\r
+    }\r
+\r
+    TraingSetView *TraingSetView::GetInstance()\r
+    {\r
+\r
+        return g_pTraingSetView;\r
+    }\r
+    /*\r
+    InitLabel:初始化标签\r
+    @param label 标签指针\r
+    @param left 标签左边位置\r
+    @param top 标签顶部位置\r
+    @param width 标签宽度\r
+    @param height 标签高度\r
+    @param viewId 标签的视图 ID\r
+    @param text 标签显示的文本\r
+    @param fontName 字体名称\r
+    @param fontSize 字体大小\r
+    */\r
+    void TraingSetView::InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize)\r
+    {\r
+        // 检查标签指针是否为空\r
+        if (label == nullptr)\r
+        {\r
+            label = new UILabel();\r
+        }\r
+        // 设置标签的位置和大小\r
+        label->SetPosition(left, top);\r
+        label->Resize(width, height);\r
+        // 设置标签的视图 ID\r
+        label->SetViewId(viewId);\r
+        // 设置标签的样式\r
+        label->SetStyle(STYLE_TEXT_FONT, fontSize);\r
+        label->SetFont(fontName, fontSize);\r
+        // 设置标签的文本和其他属性\r
+        label->SetText(text);\r
+        label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        label->SetRollSpeed(0);\r
+        // 设置标签可见\r
+        label->SetVisible(true);\r
+    }\r
+    /*\r
+    InitButton:初始化按钮\r
+    @param button 按钮指针\r
+    @param left 按钮左边位置\r
+    @param top 按钮顶部位置\r
+    @param width 按钮宽度\r
+    @param height 按钮高度\r
+    @param viewId 按钮的视图 ID\r
+    */\r
+    void TraingSetView::InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId)\r
+    {\r
+        // 设置按钮的背景颜色\r
+        uint32_t backgroundColor = 0xff191919;        // 默认背景颜色\r
+        uint32_t pressedBackgroundColor = 0xff249115; // 按下时的背景颜色\r
+        uint32_t pressedBorderColor = 0xff0b1928;     // 按下时的边框颜色\r
+        // 创建新按钮(如果当前按钮为空)\r
+        if (button == nullptr)\r
+        {\r
+            button = new UIButton();\r
+        }\r
+        button->SetPosition(left, top);\r
+        button->Resize(width, height);\r
+        button->SetViewId(viewId);\r
+        button->SetStyle(STYLE_BACKGROUND_COLOR, backgroundColor);\r
+        button->SetStyleForState(STYLE_BACKGROUND_COLOR, pressedBackgroundColor, UIButton::PRESSED);\r
+        button->SetStyleForState(STYLE_BORDER_COLOR, pressedBorderColor, UIButton::PRESSED);\r
+        // 设置按钮的点击事件监听器为 TraingSetPresenter 的实例\r
+        button->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingSetPresenter::GetInstance()));\r
+        // 设置按钮可见\r
+        button->SetVisible(true);\r
+    }\r
+    /*\r
+   InitImageView:初始化图片\r
+   @param imageView 图片指针\r
+   @param left 图片左边位置\r
+   @param top 图片顶部位置\r
+   @param width 图片宽度\r
+   @param height 图片高度\r
+   @param viewId 图片的视图 ID\r
+   @param imagePath 图片路径\r
+   */\r
+    void TraingSetView::InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath)\r
+    {\r
+        if (imageView == nullptr)\r
+        {\r
+            imageView = new UIImageView();\r
+        }\r
+        imageView->SetPosition(left, top);\r
+        imageView->Resize(width, height);\r
+        imageView->SetViewId(viewId);\r
+        imageView->SetSrc(imagePath);\r
+        imageView->SetVisible(true);\r
+    }\r
+    /* InitView:初始化界面*/\r
+    void TraingSetView ::InitView()\r
+    {\r
+        if (container_ == nullptr)\r
+        {\r
+            container_ = new UIViewGroup();\r
+            container_->SetPosition(0, 0, 466, 466);\r
+            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
+        }\r
+\r
+        //  初始化Button\r
+        InitButton(button1_, 43, 120, 380, 100, BUTTONTIME);\r
+        InitButton(button2_, 43, 240, 380, 100, BUTTONCALULI);\r
+        container_->Add(button1_);\r
+        container_->Add(button2_);\r
+\r
+        // 初始化Lable\r
+        InitLabel(label1_, 173, 52, 120, 35, "label1", "极限运动", DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        InitLabel(label2_, 130, 150, 60, 35, "label2", "时长", DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        InitLabel(label3_, 270, 155, 69, 23, "label3", "30 分钟", DEFAULT_VECTOR_FONT_FILENAME, 20);\r
+        InitLabel(label4_, 130, 270, 60, 35, "label4", "卡路里", DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        InitLabel(label5_, 270, 275, 60, 35, "label5", "1000 千卡", DEFAULT_VECTOR_FONT_FILENAME, 20);\r
+        container_->Add(label1_);\r
+        container_->Add(label2_);\r
+        container_->Add(label3_);\r
+        container_->Add(label4_);\r
+        container_->Add(label5_);\r
+\r
+        // 初始化Image\r
+        InitImageView(image1_, 70, 150, 100, 100, "image1", imagePath_time);\r
+        InitImageView(image2_, 70, 270, 100, 100, "image2", imagePath_calories);\r
+        InitImageView(image3_, 380, 160, 100, 100, "image3", imagePath_iocn);\r
+        InitImageView(image4_, 380, 280, 100, 100, "image4", imagePath_iocn);\r
+        container_->Add(image1_);\r
+        container_->Add(image2_);\r
+        container_->Add(image3_);\r
+        container_->Add(image4_);\r
+    }\r
+    /* DeInit:删除组件 */\r
+    void TraingSetView::DeInit()\r
+    {\r
+        // 删除Label\r
+        if (label1_ != nullptr)\r
+        {\r
+            container_->Remove(label1_);\r
+            delete label1_;\r
+            label1_ = nullptr;\r
+        }\r
+        if (label2_ != nullptr)\r
+        {\r
+            container_->Remove(label2_);\r
+            delete label2_;\r
+            label2_ = nullptr;\r
+        }\r
+        if (label3_ != nullptr)\r
+        {\r
+            container_->Remove(label3_);\r
+            delete label3_;\r
+            label3_ = nullptr;\r
+        }\r
+        if (label4_ != nullptr)\r
+        {\r
+            container_->Remove(label4_);\r
+            delete label4_;\r
+            label4_ = nullptr;\r
+        }\r
+        if (label5_ != nullptr)\r
+        {\r
+            container_->Remove(label5_);\r
+            delete label5_;\r
+            label5_ = nullptr;\r
+        }\r
+\r
+        // 删除Button\r
+        if (button1_ != nullptr)\r
+        {\r
+            container_->Remove(button1_);\r
+            delete button1_;\r
+            button1_ = nullptr;\r
+        }\r
+        if (button2_ != nullptr)\r
+        {\r
+            container_->Remove(button2_);\r
+            delete button2_;\r
+            button2_ = nullptr;\r
+        }\r
+\r
+        // 删除Image\r
+        if (image1_ != nullptr)\r
+        {\r
+            container_->Remove(image1_);\r
+            delete image1_;\r
+            image1_ = nullptr;\r
+        }\r
+        if (image2_ != nullptr)\r
+        {\r
+            container_->Remove(image2_);\r
+            delete image2_;\r
+            image2_ = nullptr;\r
+        }\r
+        if (image3_ != nullptr)\r
+        {\r
+            container_->Remove(image3_);\r
+            delete image3_;\r
+            image3_ = nullptr;\r
+        }\r
+        if (image4_ != nullptr)\r
+        {\r
+            container_->Remove(image4_);\r
+            delete image4_;\r
+            image4_ = nullptr;\r
+        }\r
+\r
+        // 删除容器\r
+        if (container_ != nullptr)\r
+        {\r
+            container_->RemoveAll(); // 移除容器中的所有组件\r
+            delete container_;\r
+            container_ = nullptr;\r
+        }\r
+    }\r
+\r
+    void TraingSetView::PreLoad(void)\r
+    {\r
+        if (!viewiInitStatus)\r
+        {\r
+            InitView();\r
+            viewiInitStatus = true;\r
+        }\r
+    }\r
+    void TraingSetView::OnStart()\r
+    {\r
+        container_ = new UIViewGroup();\r
+        if (container_ == nullptr)\r
+        {\r
+            return;\r
+        }\r
+        container_->SetPosition(0, 0);\r
+        container_->SetWidth(Screen::GetInstance().GetWidth());\r
+        container_->SetHeight(Screen::GetInstance().GetHeight());\r
+\r
+        // 创建 draglistener 实例并设置为拖动监听器\r
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingSetPresenter::GetInstance());\r
+        if (draglistener == nullptr)\r
+        {\r
+            return;\r
+        }\r
+        container_->SetOnDragListener(draglistener);\r
+\r
+        container_->SetTouchable(true);\r
+        container_->SetDraggable(true);\r
+\r
+        PreLoad();\r
+        RootView::GetInstance()->Add(container_);\r
+    }\r
+\r
+    void TraingSetView::OnSetUpView()\r
+    {\r
+\r
+        View<TraingSetPresenter>::OnSetUpView();\r
+        Draw();\r
+    }\r
+\r
+    void TraingSetView::OnTearDownView()\r
+    {\r
+\r
+        View<TraingSetPresenter>::OnTearDownView();\r
+        return;\r
+    }\r
+\r
+    void TraingSetView::OnStop()\r
+    {\r
+        View<TraingSetPresenter>::OnStop();\r
+        RootView::GetInstance()->RemoveAll();\r
+        return;\r
+    }\r
+}\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingStrongPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingStrongPresenter.cpp
new file mode 100644 (file)
index 0000000..f0fb44b
--- /dev/null
@@ -0,0 +1,81 @@
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+
+#include <iostream>
+#include <chrono>
+#include <thread>
+#include "traing/include/TraingStrongPresenter.h"
+// #include "TraingStrongView.h"
+
+namespace OHOS
+{
+
+    // 当前Presenter属性实例化的内存指针
+    static TraingStrongPresenter *g_pTraingStrongPresenter = nullptr;
+
+    TraingStrongPresenter::TraingStrongPresenter()
+    {
+
+        g_pTraingStrongPresenter = this;
+    }
+
+    TraingStrongPresenter::~TraingStrongPresenter()
+    {
+
+        g_pTraingStrongPresenter = nullptr;
+    }
+
+    TraingStrongPresenter *TraingStrongPresenter::GetInstance()
+    {
+
+        return g_pTraingStrongPresenter;
+    }
+
+    void TraingStrongPresenter::OnStart()
+    {
+
+        Presenter<TraingStrongView>::OnStart();
+    }
+
+    void TraingStrongPresenter::OnPause(void)
+    {
+
+        Presenter<TraingStrongView>::OnPause();
+    }
+
+    void TraingStrongPresenter::OnResume(void)
+    {
+
+        Presenter<TraingStrongView>::OnResume();
+    }
+
+    void TraingStrongPresenter::OnStop(void)
+    {
+
+        Presenter<TraingStrongView>::OnStop();
+    }
+
+    bool TraingStrongPresenter::OnDrag(UIView &view, const DragEvent &event)
+    {
+
+        if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&
+            (event.GetDeltaX() > 20) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))
+        {
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGDATA);
+        }
+        UNUSED(view);
+        return true;
+    }
+
+    bool TraingStrongPresenter::OnClick(UIView &view, const ClickEvent &event)
+    {
+        // 根据控件id查找是哪个控件触发了点击回调
+        if (strcmp(view.GetViewId(), "Remind") == 0)
+        {
+            // 模拟心率监测,等待20秒
+            // std::this_thread::sleep_for(std::chrono::seconds(20));
+            // NativeAbility::GetInstance().ChangeSlice(VIEW_TraingStrongREMIND);
+        }
+        return true;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingStrongView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingStrongView.cpp
new file mode 100644 (file)
index 0000000..e9b58b8
--- /dev/null
@@ -0,0 +1,260 @@
+
+#include "traing/include/TraingStrongView.h"
+
+#include "common/image_cache_manager.h"
+#include "UiConfig.h"
+#include "ui_resource_image.h"
+#include <ui_scroll_view.h>
+#include "components/ui_button.h"
+namespace OHOS
+{
+    static const char *imagePath_blue = "/user/res/Training/bule.bin";
+    static const char *imagePath_yellow = "/user/res/Training/yellow.bin";
+    static const char *imagePath_orange = "/user/res/Training/orange.bin";
+    static const char *imagePath_green = "/user/res/Training/green.bin";
+
+    static TraingStrongView *g_pTraingStrongView{nullptr};
+
+    TraingStrongView::TraingStrongView()
+    {
+        g_pTraingStrongView = this;
+    }
+
+    TraingStrongView::~TraingStrongView()
+    {
+        DeInit();
+        g_pTraingStrongView = nullptr;
+    }
+
+    TraingStrongView *TraingStrongView::GetInstance()
+    {
+
+        return g_pTraingStrongView;
+    }
+    /*
+    InitLabel:初始化标签
+    @param label 标签指针
+    @param left 标签左边位置
+    @param top 标签顶部位置
+    @param width 标签宽度
+    @param height 标签高度
+    @param viewId 标签的视图 ID
+    @param text 标签显示的文本
+    @param fontName 字体名称
+    @param fontSize 字体大小
+    */
+    void TraingStrongView::InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize)
+    {
+        // 检查标签指针是否为空
+        if (label == nullptr)
+        {
+            label = new UILabel();
+        }
+        // 设置标签的位置和大小
+        label->SetPosition(top, left);
+        label->Resize(width, height);
+        // 设置标签的视图 ID
+        label->SetViewId(viewId);
+        // 设置标签的样式
+        label->SetStyle(STYLE_LINE_HEIGHT, 40);
+        label->SetStyle(STYLE_TEXT_FONT, fontSize);
+        label->SetFont(fontName, fontSize);
+        // 设置标签的文本和其他属性
+        label->SetText(text);
+        label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+        // 设置中心对齐,这里先屏蔽一下
+        // label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        label->SetRollSpeed(0);
+        // 设置标签可见
+        label->SetVisible(true);
+    }
+    /*
+    InitButton:初始化按钮
+    @param button 按钮指针
+    @param left 按钮左边位置
+    @param top 按钮顶部位置
+    @param width 按钮宽度
+    @param height 按钮高度
+    @param viewId 按钮的视图 ID
+    */
+    void TraingStrongView::InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId)
+    {
+        // 设置按钮的背景颜色
+        uint32_t backgroundColor = 0xff191919;        // 默认背景颜色
+        uint32_t pressedBackgroundColor = 0xff249115; // 按下时的背景颜色
+        uint32_t pressedBorderColor = 0xff0b1928;     // 按下时的边框颜色
+        // 创建新按钮(如果当前按钮为空)
+        if (button == nullptr)
+        {
+            button = new UIButton();
+        }
+        button->SetPosition(left, top);
+        button->Resize(width, height);
+        button->SetViewId(viewId);
+        button->SetStyle(STYLE_BACKGROUND_COLOR, backgroundColor);
+        button->SetStyleForState(STYLE_BACKGROUND_COLOR, pressedBackgroundColor, UIButton::PRESSED);
+        button->SetStyleForState(STYLE_BORDER_COLOR, pressedBorderColor, UIButton::PRESSED);
+        // 设置按钮的点击事件监听器为 TraingStrongPresenter 的实例
+        button->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingStrongPresenter::GetInstance()));
+        // 设置按钮可见
+        button->SetVisible(true);
+    }
+    /*
+   InitImageView:初始化图片
+   @param imageView 图片指针
+   @param left 图片左边位置
+   @param top 图片顶部位置
+   @param width 图片宽度
+   @param height 图片高度
+   @param viewId 图片的视图 ID
+   @param imagePath 图片路径
+   */
+    void TraingStrongView::InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath)
+    {
+        if (imageView == nullptr)
+        {
+            imageView = new UIImageView();
+        }
+        imageView->SetPosition(top, left);
+        imageView->Resize(width, height);
+        imageView->SetViewId(viewId);
+        imageView->SetSrc(imagePath);
+        imageView->SetVisible(true);
+    }
+    /* InitView:初始化界面*/
+    void TraingStrongView ::InitView()
+    {
+        if (container_ == nullptr)
+        {
+            container_ = new UIViewGroup();
+            container_->SetPosition(0, 0, 466, 466);
+            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);
+        }
+        // Add ScrollView to App
+        if (scrollView1_ == nullptr)
+        {
+            scrollView1_ = new UIScrollView();
+        }
+        scrollView1_->SetPosition(0, 0);        // widget's left position and top position
+        scrollView1_->Resize(466, 466);         // widget's width and height
+        scrollView1_->SetViewId("scrollView1"); // Set style
+        scrollView1_->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+        scrollView1_->SetReboundSize(100);
+        scrollView1_->SetScrollBlankSize(52);
+        scrollView1_->SetHorizontalScrollState(false);
+        // Set additional property
+        // Add to rootView
+        container_->Add(scrollView1_);
+        scrollView1_->SetVisible(true);
+
+        // 初始化Lable
+        InitLabel(label1_, 52, 173, 120, 35, "label1", "训练强度", DEFAULT_VECTOR_FONT_FILENAME, 30);
+        InitLabel(label2_, 133, 33, 60, 35, "label2", "训练强度用于判断是否训练不足或\n者训练太过,到底使心率增加多少\n的运动强度才是最合适的。", DEFAULT_VECTOR_FONT_FILENAME, 26);
+        InitLabel(label3_, 305, 33, 69, 23, "label3", "该强度区间是对应靶心率(由个人\n基本资料计算得出)强弱的实时状\n态显示,有助于提高训练质量。", DEFAULT_VECTOR_FONT_FILENAME, 26);
+        InitLabel(label4_, 465, 33, 60, 35, "label4", "训练状态代表的意义:", DEFAULT_VECTOR_FONT_FILENAME, 26);
+        InitLabel(label5_, 505, 97, 60, 35, "label5", "较低强度-热身运动\n中等强度-燃脂区\n高等强度-提升心肺机能\n超高强度-专业运动员", DEFAULT_VECTOR_FONT_FILENAME, 26);
+        InitLabel(label6_, 740, 51, 60, 35, "label5", "注:该训练强度并非专业运动评\n估,数据仅供参考。", DEFAULT_VECTOR_FONT_FILENAME, 26);
+        label6_->SetTextColor(Color::GetColorFromRGBA(0xff, 0x8a, 0x36, 0xff));
+        scrollView1_->Add(label1_);
+        scrollView1_->Add(label2_);
+        scrollView1_->Add(label3_);
+        scrollView1_->Add(label4_);
+        scrollView1_->Add(label5_);
+        scrollView1_->Add(label6_);
+
+        // 初始化Image
+        InitImageView(image1_, 510, 60, 100, 100, "image1", imagePath_blue);
+        InitImageView(image2_, 550, 60, 100, 100, "image2", imagePath_green);
+        InitImageView(image3_, 590, 60, 100, 100, "image3", imagePath_orange);
+        InitImageView(image4_, 630, 60, 100, 100, "image4", imagePath_yellow);
+        scrollView1_->Add(image1_);
+        scrollView1_->Add(image2_);
+        scrollView1_->Add(image3_);
+        scrollView1_->Add(image4_);
+
+        // Add ImageView to App
+        if (image5_ == nullptr)
+        {
+            image5_ = new UIImageView();
+        }
+        image5_->SetPosition(183, 813); // widget's left position and top position
+        image5_->Resize(100, 100);      // widget's width and height
+        image5_->SetViewId("image3");   // Set style
+        // Set additional property
+        // Add to scrollView2
+        scrollView1_->Add(image5_);
+        image5_->SetVisible(true);
+    }
+    /* DeInit:删除组件 */
+    void TraingStrongView::DeInit()
+    {
+        UIView *view = static_cast<UIViewGroup *>(container_)->GetChildrenHead();
+        while (view != nullptr)
+        {
+            UIView *tempView = view;
+            view = view->GetNextSibling();
+            if (tempView->GetParent())
+            {
+                static_cast<UIViewGroup *>(tempView->GetParent())->Remove(tempView);
+            }
+            delete tempView;
+        }
+        delete container_;
+        container_ = nullptr;
+    }
+
+    void TraingStrongView::PreLoad(void)
+    {
+        if (!viewiInitStatus)
+        {
+            InitView();
+            viewiInitStatus = true;
+        }
+    }
+    void TraingStrongView::OnStart()
+    {
+        container_ = new UIViewGroup();
+        if (container_ == nullptr)
+        {
+            return;
+        }
+        container_->SetPosition(0, 0);
+        container_->SetWidth(Screen::GetInstance().GetWidth());
+        container_->SetHeight(Screen::GetInstance().GetHeight());
+
+        // 创建 draglistener 实例并设置为拖动监听器
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingStrongPresenter::GetInstance());
+        if (draglistener == nullptr)
+        {
+            return;
+        }
+        container_->SetOnDragListener(draglistener);
+
+        container_->SetTouchable(true);
+        container_->SetDraggable(true);
+
+        PreLoad();
+        RootView::GetInstance()->Add(container_);
+    }
+
+    void TraingStrongView::OnSetUpView()
+    {
+
+        View<TraingStrongPresenter>::OnSetUpView();
+        Draw();
+    }
+
+    void TraingStrongView::OnTearDownView()
+    {
+
+        View<TraingStrongPresenter>::OnTearDownView();
+        return;
+    }
+
+    void TraingStrongView::OnStop()
+    {
+        View<TraingStrongPresenter>::OnStop();
+        RootView::GetInstance()->RemoveAll();
+        return;
+    }
+}
index f447c9d..3000686 100644 (file)
 #include "ui_resource_image.h"\r
 #include <ui_scroll_view.h>\r
 #include "components/ui_button.h"\r
-#include "components/ui_view_group.h"\r
-#include "common/image_cache_manager.h"\r
-\r
 namespace OHOS\r
 {\r
     static TraingView *g_pTraingView{nullptr};\r
 \r
     TraingView::TraingView()\r
     {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingView::TraingView");\r
-        SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);\r
+\r
         g_pTraingView = this;\r
     }\r
 \r
     TraingView::~TraingView()\r
     {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingView::~TraingView");\r
-        RemoveAll();\r
         DeInit();\r
         g_pTraingView = nullptr;\r
     }\r
 \r
     TraingView *TraingView::GetInstance()\r
     {\r
+\r
         return g_pTraingView;\r
     }\r
-    bool TraingView::InitLable()\r
-    {\r
-        // 检查标签指针是否为空\r
-        if (titleLabel == nullptr)\r
-        {\r
-            titleLabel = new UILabel();\r
-        }\r
-        // 设置标签的位置和大小\r
-        titleLabel->SetPosition(173, 52);\r
-        titleLabel->Resize(200, 60);\r
-        // 设置标签的视图 ID\r
-        titleLabel->SetViewId("titleLabel");\r
-        // 设置标签的样式\r
-        titleLabel->SetStyle(STYLE_TEXT_FONT, 30);\r
-        titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
-        // 设置标签的文本和其他属性\r
-        titleLabel->SetText("快速训练");\r
-        titleLabel->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
-        titleLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
-        titleLabel->SetRollSpeed(0);\r
-        Add(titleLabel);\r
-\r
-        return true;\r
-    }\r
-    /* -------------------------------------------------------------------------- */\r
-    // 加载图片函数(针对UILabelButtonExt)\r
-    bool TraingView::LoadImage(UILabelButtonExt *view, uint32_t resId)\r
+\r
+    void TraingView::Init()\r
     {\r
-        std::string file = TRAINING_IAMGES;\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TrainingView LoadImage: %s, resID=0x%x", TRAINING_IAMGES, resId);\r
-        ImageInfo *image = ImageCacheManager::GetInstance().LoadOneInMultiRes(resId, file);\r
-        if (image == nullptr)\r
+        if (container_ == nullptr)\r
         {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingView::LoadImage %x fail", resId);\r
-            return false;\r
+            container_ = new UIViewGroup();\r
+            container_->SetPosition(0, 0, 466, 466);\r
+            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
         }\r
-        // Assuming SetImageSrc is the correct function for UILabelButtonExt\r
-        view->SetImageSrc(image, nullptr);\r
-        return true;\r
-    }\r
 \r
-    // 加载图片函数(针对UIImageView)\r
-    bool TraingView::LoadImage(UIImageView *view, uint32_t resId)\r
-    {\r
-        std::string file = TRAINING_IAMGES;\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TrainingView LoadImage: %s, resID=0x%x", TRAINING_IAMGES, resId);\r
-        ImageInfo *image = ImageCacheManager::GetInstance().LoadOneInMultiRes(resId, file);\r
-        if (image == nullptr)\r
+        // Add Label to App\r
+        if (label1_ == nullptr)\r
         {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingView::LoadImage %x fail", resId);\r
-            return false;\r
+            label1_ = new UILabel();\r
         }\r
-        view->SetSrc(image); // Assuming SetSrc is the correct function for UIImageView\r
-        return true;\r
-    }\r
+        label1_->SetPosition(173, 52); // widget's left position and top position\r
+        label1_->Resize(200, 60);      // widget's width and height\r
+        label1_->SetViewId("label1");  // Set style\r
+        label1_->SetStyle(STYLE_TEXT_FONT, 30);\r
 \r
-    bool TraingView::AddButton()\r
-    {\r
-        struct ButtonInfo\r
-        {\r
-            std::string text;\r
-            uint32_t defaultImgSrc;\r
-            UILabelButtonExt *button;\r
-            uint16_t posX;\r
-            uint16_t posY;\r
-        };\r
-\r
-        ButtonInfo buttons[] = {\r
-            {"健走", TRAINING_BUTTONGROUND2, Button1, 86, 118},\r
-            {"骑行", TRAINING_BOUTTONGROUND, Button2, 236, 118},\r
-            {"跑步", TRAINING_BOUTTONGROUND, Button3, 86, 268},\r
-            {"更多", TRAINING_MORE, ButtonMore, 236, 268}};\r
-\r
-        for (auto &buttonInfo : buttons)\r
-        {\r
-            if (buttonInfo.button == nullptr)\r
-            {\r
-                buttonInfo.button = new UILabelButtonExt();\r
-            }\r
-\r
-            if (!LoadImage(buttonInfo.button, buttonInfo.defaultImgSrc))\r
-            {\r
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d], triangulation load fail", __LINE__);\r
-                return false;\r
-            }\r
-\r
-            buttonInfo.button->SetPosition(buttonInfo.posX, buttonInfo.posY);\r
-            buttonInfo.button->Resize(140, 140);\r
-            buttonInfo.button->SetText(buttonInfo.text.c_str());\r
-            buttonInfo.button->SetLabelPosition(0, 70);\r
-            buttonInfo.button->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 20);\r
-            buttonInfo.button->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff19ff41, UIButton::PRESSED);\r
-            buttonInfo.button->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);\r
-\r
-            Add(buttonInfo.button);\r
-        }\r
-\r
-        return true;\r
-    }\r
+        // Set additional property\r
+        label1_->SetText("快速训练");\r
+        label1_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+        label1_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        label1_->SetRollSpeed(0);\r
+        label1_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
 \r
-    bool TraingView::InitImage()\r
-    {\r
-        struct ImageInfo\r
-        {\r
-            UIImageView *image;\r
-            const int imagePath;\r
-            uint16_t posX;\r
-            uint16_t posY;\r
-            const char *viewId;\r
-        };\r
-\r
-        ImageInfo images[] = {\r
-            {image1, TRAINING_WALKING_BIG, 126, 298, "image3"},\r
-            {image2, TRAINING_RIDING_BIG2, 276, 148, "image2"},\r
-            {image3, TRAINING_RUNNING_BIG, 126, 148, "image1"}};\r
-\r
-        for (auto &imageInfo : images)\r
-        {\r
-            if (imageInfo.image == nullptr)\r
-            {\r
-                imageInfo.image = new UIImageView();\r
-            }\r
-            imageInfo.image->SetPosition(imageInfo.posX, imageInfo.posY);\r
-            imageInfo.image->Resize(100, 100);\r
-            if (!LoadImage(imageInfo.image, imageInfo.imagePath))\r
-            {\r
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d], triangulation load fail", __LINE__);\r
-                return false;\r
-            }\r
-            imageInfo.image->SetViewId(imageInfo.viewId);\r
-            Add(imageInfo.image);\r
-        }\r
-\r
-        return true;\r
-    }\r
-    /* -------------------------------------------------------------------------- */\r
-    bool TraingView::InitView()\r
-    {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingView::InitView()");\r
-        if (!InitLable())\r
+        // Add to rootView\r
+        container_->Add(label1_);\r
+        label1_->SetVisible(true);\r
+\r
+        // Add Button to App\r
+        if (button3_ == nullptr)\r
         {\r
-            printf("InitLable error!\n");\r
-        };\r
-        if (!AddButton())\r
+            button3_ = new UIButton();\r
+        }\r
+        button3_->SetPosition(236, 268); // widget's left position and top position\r
+        button3_->Resize(140, 140);      // widget's width and height\r
+        button3_->SetViewId(BUTTONMORE); // Set style\r
+        button3_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);\r
+        button3_->SetStyle(STYLE_BACKGROUND_OPA, 0x00);\r
+\r
+        // Set additional property\r
+#ifdef _WIN32\r
+        char *button3defaultImgSrc = "c:/Users/caiking/project/image_converter_tool/output/Training/More.bin";\r
+#else\r
+        const char *button3defaultImgSrc = PNG_TRAING_BOUTTONMORE_IMAGE;\r
+#endif\r
+        char *button3triggeredImgSrc = nullptr;\r
+        button3_->SetImageSrc(button3defaultImgSrc, button3triggeredImgSrc);\r
+        button3_->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff33df1c, UIButton::PRESSED);\r
+        button3_->SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED);\r
+        button3_->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);\r
+\r
+        // Add the CallBack about events\r
+        UIView::OnClickListener *button3Click = static_cast<UIView::OnClickListener *>(TraingPresenter::GetInstance());\r
+        button3_->SetOnClickListener(button3Click);\r
+        // Add to rootView\r
+        container_->Add(button3_);\r
+        button3_->SetVisible(true);\r
+\r
+        // Add Button to App\r
+        if (button4_ == nullptr)\r
         {\r
-            printf("AddButton error!\n");\r
-        };\r
-        if (!InitImage())\r
+            button4_ = new UIButton();\r
+        }\r
+        button4_->SetPosition(86, 118); // widget's left position and top position\r
+        button4_->Resize(140, 140);     // widget's width and height\r
+        button4_->SetViewId(BUTTON2);   // Set style\r
+        button4_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);\r
+        button4_->SetStyle(STYLE_BACKGROUND_OPA, 0x00);\r
+\r
+        // Set additional property\r
+#ifdef _WIN32\r
+        char *button4defaultImgSrc = "c:/Users/caiking/project/image_converter_tool/output/Training/Buttonground2.bin";\r
+#else\r
+        const char *button4defaultImgSrc = PNG_TRAING_BUTTONGRONG2_IMAGE;\r
+#endif\r
+        char *button4triggeredImgSrc = nullptr;\r
+        button4_->SetImageSrc(button4defaultImgSrc, button4triggeredImgSrc);\r
+        button4_->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff33df1c, UIButton::PRESSED);\r
+        button4_->SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED);\r
+        button4_->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);\r
+\r
+        // Add the CallBack about events\r
+        UIView::OnClickListener *button4Click = static_cast<UIView::OnClickListener *>(TraingPresenter::GetInstance());\r
+        button4_->SetOnClickListener(button4Click);\r
+        // Add to rootView\r
+        container_->Add(button4_);\r
+        button4_->SetVisible(true);\r
+\r
+        // Add Button to App\r
+        if (button1_ == nullptr)\r
         {\r
-            printf("InitImage error!\n");\r
-        };\r
-        // SetCoverable(true);\r
-        return true;\r
-    }\r
+            button1_ = new UIButton();\r
+        }\r
+        button1_->SetPosition(86, 268); // widget's left position and top position\r
+        button1_->Resize(140, 140);     // widget's width and height\r
+        button1_->SetViewId(BUTTON3);   // Set style\r
+        button1_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);\r
+        button1_->SetStyle(STYLE_BACKGROUND_OPA, 0x00);\r
 \r
-    void TraingView::DeInit()\r
-    {\r
-        UIImageView *imageViews[] = {image1, image2, image3};\r
-        UIButton *buttons[] = {ButtonMore, Button1, Button3, Button2};\r
+        // Set additional property\r
+#ifdef _WIN32\r
+        char *button1defaultImgSrc = "c:/Users/caiking/project/image_converter_tool/output/Training/Bouttonground.bin";\r
+#else\r
+        const char *button1defaultImgSrc = PNG_TRAING_BUTTONGRONG_IMAGE;\r
+#endif\r
+        char *button1triggeredImgSrc = nullptr;\r
+        button1_->SetImageSrc(button1defaultImgSrc, button1triggeredImgSrc);\r
+        button1_->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff33df1c, UIButton::PRESSED);\r
+        button1_->SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED);\r
+        button1_->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);\r
+\r
+        // Add the CallBack about events\r
+        UIView::OnClickListener *button1Click = static_cast<UIView::OnClickListener *>(TraingPresenter::GetInstance());\r
+        button1_->SetOnClickListener(button1Click);\r
+        // Add to rootView\r
+        container_->Add(button1_);\r
+        button1_->SetVisible(true);\r
 \r
-        for (auto &imageView : imageViews)\r
+        // Add Button to App\r
+        if (button2_ == nullptr)\r
         {\r
-            if (imageView != nullptr)\r
-            {\r
-                delete imageView;\r
-                imageView = nullptr;\r
-            }\r
+            button2_ = new UIButton();\r
         }\r
+        button2_->SetPosition(236, 118); // widget's left position and top position\r
+        button2_->Resize(140, 140);      // widget's width and height\r
+        button2_->SetViewId(BUTTON1);    // Set style\r
+        button2_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);\r
+        button2_->SetStyle(STYLE_BACKGROUND_OPA, 0x00);\r
 \r
-        for (auto &button : buttons)\r
+        // Set additional property\r
+#ifdef _WIN32\r
+        char *button2defaultImgSrc = "c:/Users/caiking/project/image_converter_tool/output/Training/Bouttonground.bin";\r
+#else\r
+        const char *button2defaultImgSrc = PNG_TRAING_BUTTONGRONG_IMAGE;\r
+#endif\r
+        char *button2triggeredImgSrc = nullptr;\r
+        button2_->SetImageSrc(button2defaultImgSrc, button2triggeredImgSrc);\r
+        button2_->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff33df1c, UIButton::PRESSED);\r
+        button2_->SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED);\r
+        button2_->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);\r
+\r
+        // Add the CallBack about events\r
+        UIView::OnClickListener *button2Click = static_cast<UIView::OnClickListener *>(TraingPresenter::GetInstance());\r
+        button2_->SetOnClickListener(button2Click);\r
+        // Add to rootView\r
+        container_->Add(button2_);\r
+        button2_->SetVisible(true);\r
+\r
+        // Add ImageView to App\r
+        if (image1_ == nullptr)\r
         {\r
-            if (button != nullptr)\r
-            {\r
-                delete button;\r
-                button = nullptr;\r
-            }\r
+            image1_ = new UIImageView();\r
         }\r
+        image1_->SetPosition(276, 148); // widget's left position and top position\r
+        image1_->Resize(100, 100);      // widget's width and height\r
+        image1_->SetViewId("image2");   // Set style\r
+\r
+        // Set additional property\r
+#ifdef _WIN32\r
+        char *image1imagesPath = "c:/Users/caiking/project/image_converter_tool/output/Training/riding-big2.bin";\r
+#else\r
+        const char *image1imagesPath = PNG_TRAING_RIDINGBIG_IMAGE;\r
+#endif\r
+        image1_->SetSrc(image1imagesPath);\r
+\r
+        // Add to rootView\r
+        container_->Add(image1_);\r
+        image1_->SetVisible(true);\r
+\r
+        // Add Label to App\r
+        if (label2_ == nullptr)\r
+        {\r
+            label2_ = new UILabel();\r
+        }\r
+        label2_->SetPosition(286, 210); // widget's left position and top position\r
+        label2_->Resize(200, 60);       // widget's width and height\r
+        label2_->SetViewId("label2");   // Set style\r
+        label2_->SetStyle(STYLE_TEXT_FONT, 20);\r
+\r
+        // Set additional property\r
+        label2_->SetText("骑行");\r
+        label2_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+        label2_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        label2_->SetRollSpeed(0);\r
+        label2_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 20);\r
+\r
+        // Add to rootView\r
+        container_->Add(label2_);\r
+        label2_->SetVisible(true);\r
 \r
-        if (titleLabel != nullptr)\r
+        // Add ImageView to App\r
+        if (image3_ == nullptr)\r
         {\r
-            delete titleLabel;\r
-            titleLabel = nullptr;\r
+            image3_ = new UIImageView();\r
         }\r
+        image3_->SetPosition(126, 298); // widget's left position and top position\r
+        image3_->Resize(100, 100);      // widget's width and height\r
+        image3_->SetViewId("image3");   // Set style\r
+\r
+        // Set additional property\r
+#ifdef _WIN32\r
+        char *image3imagesPath = "c:/Users/caiking/project/image_converter_tool/output/Training/running-big.bin";\r
+#else\r
+        const char *image3imagesPath = PNG_TRAING_RUNNINGBIG_IMAGE;\r
+#endif\r
+        image3_->SetSrc(image3imagesPath);\r
+\r
+        // Add to rootView\r
+        container_->Add(image3_);\r
+        image3_->SetVisible(true);\r
+\r
+        // Add Label to App\r
+        if (label3_ == nullptr)\r
+        {\r
+            label3_ = new UILabel();\r
+        }\r
+        label3_->SetPosition(135, 210); // widget's left position and top position\r
+        label3_->Resize(200, 60);       // widget's width and height\r
+        label3_->SetViewId("label3");   // Set style\r
+        label3_->SetStyle(STYLE_TEXT_FONT, 20);\r
+\r
+        // Set additional property\r
+        label3_->SetText("健走");\r
+        label3_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+        label3_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        label3_->SetRollSpeed(0);\r
+        label3_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 20);\r
+\r
+        // Add to rootView\r
+        container_->Add(label3_);\r
+        label3_->SetVisible(true);\r
+\r
+        // Add ImageView to App\r
+        if (image5_ == nullptr)\r
+        {\r
+            image5_ = new UIImageView();\r
+        }\r
+        image5_->SetPosition(126, 148); // widget's left position and top position\r
+        image5_->Resize(100, 100);      // widget's width and height\r
+        image5_->SetViewId("image1");   // Set style\r
+\r
+        // Set additional property\r
+#ifdef _WIN32\r
+        char *image5imagesPath = "c:/Users/caiking/project/image_converter_tool/output/Training/walking-big.bin";\r
+#else\r
+        const char *image5imagesPath = PNG_TRAING_WALKINGBIG_IMAGE;\r
+#endif\r
+        image5_->SetSrc(image5imagesPath);\r
+\r
+        // Add to rootView\r
+        container_->Add(image5_);\r
+        image5_->SetVisible(true);\r
+\r
+        // Add Label to App\r
+        if (label4_ == nullptr)\r
+        {\r
+            label4_ = new UILabel();\r
+        }\r
+        label4_->SetPosition(131, 365); // widget's left position and top position\r
+        label4_->Resize(200, 60);       // widget's width and height\r
+        label4_->SetViewId("label4");   // Set style\r
+        label4_->SetStyle(STYLE_TEXT_FONT, 20);\r
+\r
+        // Set additional property\r
+        label4_->SetText("跑步");\r
+        label4_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+        label4_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        label4_->SetRollSpeed(0);\r
+        label4_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 20);\r
+\r
+        // Add to rootView\r
+        container_->Add(label4_);\r
+        label4_->SetVisible(true);\r
     }\r
 \r
-    void TraingView::PreLoad(void)\r
+    void TraingView::DeInit()\r
     {\r
-        if (!viewiInitStatus)\r
+        if (container_ != nullptr)\r
         {\r
-            InitView();\r
-            viewiInitStatus = true;\r
+            container_->RemoveAll();\r
+            delete container_;\r
+            container_ = nullptr;\r
         }\r
-        // if (!resLoadStatus)\r
-        // {\r
-        //     resLoadStatus = true;\r
-        // }\r
+        if (label1_ != nullptr)\r
+        {\r
+            delete label1_;\r
+            label1_ = nullptr;\r
+        }\r
+        if (button3_ != nullptr)\r
+        {\r
+            delete button3_;\r
+            button3_ = nullptr;\r
+        }\r
+        if (button4_ != nullptr)\r
+        {\r
+            delete button4_;\r
+            button4_ = nullptr;\r
+        }\r
+        if (button1_ != nullptr)\r
+        {\r
+            delete button1_;\r
+            button1_ = nullptr;\r
+        }\r
+        if (button2_ != nullptr)\r
+        {\r
+            delete button2_;\r
+            button2_ = nullptr;\r
+        }\r
+        if (image1_ != nullptr)\r
+        {\r
+            delete image1_;\r
+            image1_ = nullptr;\r
+        }\r
+        if (label2_ != nullptr)\r
+        {\r
+            delete label2_;\r
+            label2_ = nullptr;\r
+        }\r
+        if (image3_ != nullptr)\r
+        {\r
+            delete image3_;\r
+            image3_ = nullptr;\r
+        }\r
+        if (label3_ != nullptr)\r
+        {\r
+            delete label3_;\r
+            label3_ = nullptr;\r
+        }\r
+        if (image5_ != nullptr)\r
+        {\r
+            delete image5_;\r
+            image5_ = nullptr;\r
+        }\r
+        if (label4_ != nullptr)\r
+        {\r
+            delete label4_;\r
+            label4_ = nullptr;\r
+        }\r
+    }\r
+\r
+    UIView *TraingView::GetView()\r
+    {\r
+        Init();\r
+        return container_;\r
+    }\r
+\r
+    void TraingView::OnStart()\r
+    {\r
+        container_ = new UIViewGroup();\r
+        if (container_ == nullptr)\r
+        {\r
+            return;\r
+        }\r
+        container_->SetPosition(0, 0);\r
+        container_->SetWidth(Screen::GetInstance().GetWidth());\r
+        container_->SetHeight(Screen::GetInstance().GetHeight());\r
+\r
+        // 创建 draglistener 实例并设置为拖动监听器\r
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingPresenter::GetInstance());\r
+        if (draglistener == nullptr)\r
+        {\r
+            return;\r
+        }\r
+        container_->SetOnDragListener(draglistener);\r
+\r
+        container_->SetTouchable(true);\r
+        container_->SetDraggable(true);\r
+\r
+        GetView();\r
+        RootView::GetInstance()->Add(container_);\r
+    }\r
+\r
+    void TraingView::OnSetUpView()\r
+    {\r
+\r
+        View<TraingPresenter>::OnSetUpView();\r
+        Draw();\r
+    }\r
+\r
+    void TraingView::OnTearDownView()\r
+    {\r
+\r
+        View<TraingPresenter>::OnTearDownView();\r
+        return;\r
     }\r
 \r
-    void TraingView::UnLoad(void)\r
+    void TraingView::OnStop()\r
     {\r
-        // if (resLoadStatus)\r
-        // {\r
-        //     //ImageCacheManager::GetInstance().UnloadAllInMultiRes(TRAINING_IAMGES);\r
-        //     resLoadStatus = false;\r
-        // }\r
+        View<TraingPresenter>::OnStop();\r
+        RootView::GetInstance()->RemoveAll();\r
+        return;\r
     }\r
 }\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingWinPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingWinPresenter.cpp
new file mode 100644 (file)
index 0000000..76fe505
--- /dev/null
@@ -0,0 +1,79 @@
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+
+#include <iostream>
+#include <chrono>
+#include <thread>
+#include "traing/include/TraingWinPresenter.h"
+// #include "TraingWinView.h"
+
+namespace OHOS
+{
+
+    // 当前Presenter属性实例化的内存指针
+    static TraingWinPresenter *g_pTraingWinPresenter = nullptr;
+
+    TraingWinPresenter::TraingWinPresenter()
+    {
+
+        g_pTraingWinPresenter = this;
+    }
+
+    TraingWinPresenter::~TraingWinPresenter()
+    {
+        g_pTraingWinPresenter = nullptr;
+    }
+
+    TraingWinPresenter *TraingWinPresenter::GetInstance()
+    {
+
+        return g_pTraingWinPresenter;
+    }
+
+    void TraingWinPresenter::OnStart()
+    {
+
+        Presenter<TraingWinView>::OnStart();
+    }
+
+    void TraingWinPresenter::OnPause(void)
+    {
+
+        Presenter<TraingWinView>::OnPause();
+    }
+
+    void TraingWinPresenter::OnResume(void)
+    {
+
+        Presenter<TraingWinView>::OnResume();
+    }
+
+    void TraingWinPresenter::OnStop(void)
+    {
+
+        Presenter<TraingWinView>::OnStop();
+    }
+
+    bool TraingWinPresenter::OnDrag(UIView &view, const DragEvent &event)
+    {
+
+        // if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&
+        //     (event.GetDeltaX() > 40) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))
+        // {
+        //     uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();
+        //    NativeAbility::GetInstance().ChangeSlice(preSlice);
+        // }
+        UNUSED(view);
+        return true;
+    }
+
+    bool TraingWinPresenter::OnClick(UIView &view, const ClickEvent &event)
+    {
+        // 根据控件id查找是哪个控件触发了点击回调
+        if (strcmp(view.GetViewId(), BUTTONOK) == 0)
+        {
+            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGENDDATA);
+        }
+        return true;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingWinView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingWinView.cpp
new file mode 100644 (file)
index 0000000..6b16ccd
--- /dev/null
@@ -0,0 +1,317 @@
+
+#include "traing/include/TraingWinView.h"
+
+#include "common/image_cache_manager.h"
+#include "UiConfig.h"
+#include "ui_resource_image.h"
+#include <ui_scroll_view.h>
+#include "components/ui_button.h"
+
+namespace OHOS
+{
+    static const char *imagePath_win = "/user/res/Training/win.bin";
+    static TraingWinView *g_pTraingWinView{nullptr};
+    TraingWinView::TraingWinView()
+    {
+        g_pTraingWinView = this;
+    }
+
+    TraingWinView::~TraingWinView()
+    {
+        DeInit();
+        g_pTraingWinView = nullptr;
+    }
+    TraingWinView *TraingWinView::GetInstance()
+    {
+
+        return g_pTraingWinView;
+    }
+
+    /**
+     * 创建包含图片文件路径的数组
+     * @param  basePath  包含图片文件的基本路径
+     * @param  fileExtension  图片文件的扩展名
+     * @param  numImages  图片文件的数量
+     * @return  返回包含图片文件路径的数组
+     */
+    const char **CreateImagePathsArray(const char *basePath, const char *fileExtension, int numImages)
+    {
+        const char **imagePaths = new const char *[numImages];
+        char buffer[256];
+        for (int i = 0; i < numImages; i++)
+        {
+            snprintf(buffer, sizeof(buffer), "%s/%d.%s", basePath, i + 1, fileExtension);
+            imagePaths[i] = strdup(buffer);
+        }
+        return imagePaths;
+    }
+
+    /**
+     * 释放图片文件路径数组占用的内存
+     * @param  imagePaths  图片文件路径数组
+     * @param  numImages  图片文件的数量
+     */
+    void FreeImagePathsArray(const char **imagePaths, int numImages)
+    {
+        for (int i = 0; i < numImages; i++)
+        {
+            free((void *)imagePaths[i]);
+        }
+        delete[] imagePaths;
+    }
+    /**************************************************/
+    /**
+        InitLabel:初始化标签
+        @param label 标签指针
+        @param left 标签左边位置
+        @param top 标签顶部位置
+        @param width 标签宽度
+        @param height 标签高度
+        @param viewId 标签的视图 ID
+        @param text 标签显示的文本
+        @param fontName 字体名称
+        @param fontSize 字体大小
+    */
+    void TraingWinView::InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize)
+    {
+        // 检查标签指针是否为空
+        if (label == nullptr)
+        {
+            label = new UILabel();
+        }
+        // 设置标签的位置和大小
+        label->SetPosition(left, top);
+        label->Resize(width, height);
+        // 设置标签的视图 ID
+        label->SetViewId(viewId);
+        // 设置标签的样式
+        label->SetStyle(STYLE_TEXT_FONT, fontSize);
+        label->SetFont(fontName, fontSize);
+        // 设置标签的文本和其他属性
+        label->SetText(text);
+        label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        label->SetRollSpeed(0);
+        // 设置标签可见
+        label->SetVisible(true);
+    }
+    /**
+        InitButton:初始化按钮
+        @param button 按钮指针
+        @param left 按钮左边位置
+        @param top 按钮顶部位置
+        @param width 按钮宽度
+        @param height 按钮高度
+        @param viewId 按钮的视图 ID
+    */
+    void TraingWinView::InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId)
+    {
+        // 设置按钮的背景颜色
+        uint32_t backgroundColor = 0xff191919;        // 默认背景颜色
+        uint32_t pressedBackgroundColor = 0xff249115; // 按下时的背景颜色
+        uint32_t pressedBorderColor = 0xff0b1928;     // 按下时的边框颜色
+        // 创建新按钮(如果当前按钮为空)
+        if (button == nullptr)
+        {
+            button = new UIButton();
+        }
+        button->SetPosition(left, top);
+        button->Resize(width, height);
+        button->SetViewId(viewId);
+        button->SetStyle(STYLE_BACKGROUND_COLOR, backgroundColor);
+        button->SetStyleForState(STYLE_BACKGROUND_COLOR, pressedBackgroundColor, UIButton::PRESSED);
+        button->SetStyleForState(STYLE_BORDER_COLOR, pressedBorderColor, UIButton::PRESSED);
+        // 设置按钮的点击事件监听器为 TraingWinPresenter 的实例
+        button->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingWinPresenter::GetInstance()));
+        // 设置按钮可见
+        button->SetVisible(true);
+    }
+
+    /**
+     * 初始化图片视图
+     * @param imageView  图片视图指针
+     * @param left  图片左边位置
+     * @param top  图片顶部位置
+     * @param width  图片宽度
+     * @param height  图片高度
+     * @param viewId  图片的视图 ID
+     * @param imagePath  图片路径
+     */
+    void TraingWinView::InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath)
+    {
+        if (imageView == nullptr)
+        {
+            imageView = new UIImageView();
+        }
+        imageView->SetPosition(left, top);
+        imageView->Resize(width, height);
+        imageView->SetViewId(viewId);
+        imageView->SetSrc(imagePath);
+        imageView->SetVisible(true);
+    }
+
+    /**
+     * @brief 初始化UIImageAnimatorView,并设置为GIF动画。
+     *
+     * 该函数用于使用提供的GIF图像和属性初始化UIImageAnimatorView。
+     *
+     * @param imageAnimator 要初始化的UIImageAnimatorView对象的引用。
+     * @param paths GIF图像文件路径的数组。
+     * @param numFrames GIF中的帧数。
+     * @param left 视图的左侧位置。
+     * @param top 视图的顶部位置。
+     * @param width 视图的宽度。
+     * @param height 视图的高度。
+     * @param viewId 视图的ID。
+     * @param time 视图的帧速
+     * @return 如果初始化成功则返回true,否则返回false。
+     */
+    void TraingWinView::InitImageAnimatorSource(UIImageAnimatorView *&imageAnimator, const char **imagePaths, int numFrames, int left, int top, int width, int height, const char *viewId, int time)
+    {
+        if (imageAnimator == nullptr)
+        {
+            imageAnimator = new UIImageAnimatorView();
+        }
+        imageAnimator->SetPosition(left, top);
+        imageAnimator->Resize(width, height);
+        imageAnimator->SetViewId(viewId);
+        imageAnimator->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);
+        imageAnimator->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+
+        ImageAnimatorInfo *imageAnimatorInfo = new ImageAnimatorInfo[numFrames];
+        for (int i = 0; i < numFrames; i++)
+        {
+            imageAnimatorInfo[i].imagePath = imagePaths[i];
+            imageAnimatorInfo[i].pos.x = left;
+            imageAnimatorInfo[i].pos.y = top;
+            imageAnimatorInfo[i].width = width;
+            imageAnimatorInfo[i].height = height;
+            imageAnimatorInfo[i].imageType = IMG_SRC_FILE_PATH;
+        }
+
+        imageAnimator->SetImageAnimatorSrc(imageAnimatorInfo, numFrames, time); // 200 is the default delay time
+        imageAnimator->SetTimeOfPause(time);
+        imageAnimator->SetRepeatTimes(1);
+        imageAnimator->SetReverse(true);
+        imageAnimator->SetVisible(true);
+    }
+    /* InitView:初始化界面*/
+    void TraingWinView ::InitView()
+    {
+        if (container_ == nullptr)
+        {
+            container_ = new UIViewGroup();
+            container_->SetPosition(0, 0, 466, 466);
+            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);
+        }
+
+        // 初始化Lable
+        InitLabel(label1_, 155, 52, 195, 35, "label1", "目标已达成", DEFAULT_VECTOR_FONT_FILENAME, 35);
+        container_->Add(label1_);
+        InitLabel(label2_, 108, 215, 146, 35, "label2", "10,000", DEFAULT_VECTOR_FONT_FILENAME, 80);
+        label2_->SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff));
+        container_->Add(label2_);
+        InitLabel(label3_, 132, 307, 146, 35, "label3", "完成目标", DEFAULT_VECTOR_FONT_FILENAME, 30);
+        container_->Add(label3_);
+        InitLabel(label4_, 280, 307, 146, 35, "label3", "100%", DEFAULT_VECTOR_FONT_FILENAME, 30);
+        label4_->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f));
+        container_->Add(label4_);
+
+        /*
+             初始化image
+             InitImageView(image1_, 173, 100, 120, 120, "image1", imagePath_win);
+             container_->Add(image1_);
+        */
+
+        // 初始化图片数组
+        const char *basePath = "/user/res/Training/win/";
+        const char *fileExtension = "bin";
+        const char **imagePaths = CreateImagePathsArray(basePath, fileExtension, 94);
+        InitImageAnimatorSource(imageAnimator, imagePaths, 94, 173, 100, 120, 120, "imageAnimator1", 10);
+        container_->Add(imageAnimator);
+        // FreeImagePathsArray(imagePaths, 94);    //删除数组,释放内存
+
+        // 初始化Button
+        InitButton(button1_, 0, 366, 466, 100, BUTTONOK);
+        // Set additional property
+        char *button1defaultImgSrc = "/user/res/Training/buttonok.bin";
+        char *button1triggeredImgSrc = nullptr;
+        button1_->SetImageSrc(button1defaultImgSrc, button1triggeredImgSrc);
+        container_->Add(button1_);
+    }
+
+    /* DeInit:删除组件*/
+    void TraingWinView::DeInit()
+    {
+        UIView *view = static_cast<UIViewGroup *>(container_)->GetChildrenHead();
+        while (view != nullptr)
+        {
+            UIView *tempView = view;
+            view = view->GetNextSibling();
+            if (tempView->GetParent())
+            {
+                static_cast<UIViewGroup *>(tempView->GetParent())->Remove(tempView);
+            }
+            delete tempView;
+        }
+        delete container_;
+        container_ = nullptr;
+    }
+
+    void TraingWinView::PreLoad(void)
+    {
+        if (!viewiInitStatus)
+        {
+            InitView();
+            imageAnimator->Start();
+            viewiInitStatus = true;
+        }
+    }
+    void TraingWinView::OnStart()
+    {
+        container_ = new UIViewGroup();
+        if (container_ == nullptr)
+        {
+            return;
+        }
+        container_->SetPosition(0, 0);
+        container_->SetWidth(Screen::GetInstance().GetWidth());
+        container_->SetHeight(Screen::GetInstance().GetHeight());
+
+        // 创建 draglistener 实例并设置为拖动监听器
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingWinPresenter::GetInstance());
+        if (draglistener == nullptr)
+        {
+            return;
+        }
+        container_->SetOnDragListener(draglistener);
+
+        container_->SetTouchable(true);
+        container_->SetDraggable(true);
+
+        PreLoad();
+        RootView::GetInstance()->Add(container_);
+    }
+
+    void TraingWinView::OnSetUpView()
+    {
+
+        View<TraingWinPresenter>::OnSetUpView();
+        Draw();
+    }
+
+    void TraingWinView::OnTearDownView()
+    {
+
+        View<TraingWinPresenter>::OnTearDownView();
+        return;
+    }
+
+    void TraingWinView::OnStop()
+    {
+        View<TraingWinPresenter>::OnStop();
+        imageAnimator->Stop();
+        RootView::GetInstance()->RemoveAll();
+        return;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/traing_card/Traing_CardView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/traing_card/Traing_CardView.cpp
new file mode 100644 (file)
index 0000000..e514a9d
--- /dev/null
@@ -0,0 +1,241 @@
+\r
+#include "traing/traing_card/Traing_CardView.h"\r
+\r
+#include "common/image_cache_manager.h"\r
+#include "UiConfig.h"\r
+#include "ui_resource_image.h"\r
+#include <ui_scroll_view.h>\r
+#include "components/ui_button.h"\r
+#include "components/ui_view_group.h"\r
+#include "common/image_cache_manager.h"\r
+\r
+namespace OHOS\r
+{\r
+    static Traing_CardView *g_pTraing_CardView{nullptr};\r
+\r
+    Traing_CardView::Traing_CardView()\r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Traing_CardView::Traing_CardView");\r
+        SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);\r
+        g_pTraing_CardView = this;\r
+    }\r
+\r
+    Traing_CardView::~Traing_CardView()\r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Traing_CardView::~Traing_CardView");\r
+        RemoveAll();\r
+        DeInit();\r
+        g_pTraing_CardView = nullptr;\r
+    }\r
+\r
+    Traing_CardView *Traing_CardView::GetInstance()\r
+    {\r
+        return g_pTraing_CardView;\r
+    }\r
+    bool Traing_CardView::InitLable()\r
+    {\r
+        // 检查标签指针是否为空\r
+        if (titleLabel == nullptr)\r
+        {\r
+            titleLabel = new UILabel();\r
+        }\r
+        // 设置标签的位置和大小\r
+        titleLabel->SetPosition(173, 52);\r
+        titleLabel->Resize(200, 60);\r
+        // 设置标签的视图 ID\r
+        titleLabel->SetViewId("titleLabel");\r
+        // 设置标签的样式\r
+        titleLabel->SetStyle(STYLE_TEXT_FONT, 30);\r
+        titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        // 设置标签的文本和其他属性\r
+        titleLabel->SetText("快速训练");\r
+        titleLabel->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+        titleLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        titleLabel->SetRollSpeed(0);\r
+        Add(titleLabel);\r
+\r
+        return true;\r
+    }\r
+    /* -------------------------------------------------------------------------- */\r
+    // 加载图片函数(针对UILabelButtonExt)\r
+    bool Traing_CardView::LoadImage(UILabelButtonExt *view, uint32_t resId)\r
+    {\r
+        std::string file = TRAINING_IAMGES;\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TrainingView LoadImage: %s, resID=0x%x", TRAINING_IAMGES, resId);\r
+        ImageInfo *image = ImageCacheManager::GetInstance().LoadOneInMultiRes(resId, file);\r
+        if (image == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Traing_CardView::LoadImage %x fail", resId);\r
+            return false;\r
+        }\r
+        // Assuming SetImageSrc is the correct function for UILabelButtonExt\r
+        view->SetImageSrc(image, nullptr);\r
+        return true;\r
+    }\r
+\r
+    // 加载图片函数(针对UIImageView)\r
+    bool Traing_CardView::LoadImage(UIImageView *view, uint32_t resId)\r
+    {\r
+        std::string file = TRAINING_IAMGES;\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TrainingView LoadImage: %s, resID=0x%x", TRAINING_IAMGES, resId);\r
+        ImageInfo *image = ImageCacheManager::GetInstance().LoadOneInMultiRes(resId, file);\r
+        if (image == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Traing_CardView::LoadImage %x fail", resId);\r
+            return false;\r
+        }\r
+        view->SetSrc(image); // Assuming SetSrc is the correct function for UIImageView\r
+        return true;\r
+    }\r
+\r
+    bool Traing_CardView::AddButton()\r
+    {\r
+        struct ButtonInfo\r
+        {\r
+            std::string text;\r
+            uint32_t defaultImgSrc;\r
+            UILabelButtonExt *button;\r
+            uint16_t posX;\r
+            uint16_t posY;\r
+        };\r
+\r
+        ButtonInfo buttons[] = {\r
+            {"健走", TRAINING_BUTTONGROUND2, Button1, 86, 118},\r
+            {"骑行", TRAINING_BOUTTONGROUND, Button2, 236, 118},\r
+            {"跑步", TRAINING_BOUTTONGROUND, Button3, 86, 268},\r
+            {"更多", TRAINING_MORE, ButtonMore, 236, 268}};\r
+\r
+        for (auto &buttonInfo : buttons)\r
+        {\r
+            if (buttonInfo.button == nullptr)\r
+            {\r
+                buttonInfo.button = new UILabelButtonExt();\r
+            }\r
+\r
+            if (!LoadImage(buttonInfo.button, buttonInfo.defaultImgSrc))\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d], triangulation load fail", __LINE__);\r
+                return false;\r
+            }\r
+\r
+            buttonInfo.button->SetPosition(buttonInfo.posX, buttonInfo.posY);\r
+            buttonInfo.button->Resize(140, 140);\r
+            buttonInfo.button->SetText(buttonInfo.text.c_str());\r
+            buttonInfo.button->SetLabelPosition(0, 70);\r
+            buttonInfo.button->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 20);\r
+            buttonInfo.button->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff19ff41, UIButton::PRESSED);\r
+            buttonInfo.button->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);\r
+\r
+            Add(buttonInfo.button);\r
+        }\r
+\r
+        return true;\r
+    }\r
+\r
+    bool Traing_CardView::InitImage()\r
+    {\r
+        struct ImageInfo\r
+        {\r
+            UIImageView *image;\r
+            const int imagePath;\r
+            uint16_t posX;\r
+            uint16_t posY;\r
+            const char *viewId;\r
+        };\r
+\r
+        ImageInfo images[] = {\r
+            {image1, TRAINING_WALKING_BIG, 126, 298, "image3"},\r
+            {image2, TRAINING_RIDING_BIG2, 276, 148, "image2"},\r
+            {image3, TRAINING_RUNNING_BIG, 126, 148, "image1"}};\r
+\r
+        for (auto &imageInfo : images)\r
+        {\r
+            if (imageInfo.image == nullptr)\r
+            {\r
+                imageInfo.image = new UIImageView();\r
+            }\r
+            imageInfo.image->SetPosition(imageInfo.posX, imageInfo.posY);\r
+            imageInfo.image->Resize(100, 100);\r
+            if (!LoadImage(imageInfo.image, imageInfo.imagePath))\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d], triangulation load fail", __LINE__);\r
+                return false;\r
+            }\r
+            imageInfo.image->SetViewId(imageInfo.viewId);\r
+            Add(imageInfo.image);\r
+        }\r
+\r
+        return true;\r
+    }\r
+    /* -------------------------------------------------------------------------- */\r
+    bool Traing_CardView::InitView()\r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Traing_CardView::InitView()");\r
+        if (!InitLable())\r
+        {\r
+            printf("InitLable error!\n");\r
+        };\r
+        if (!AddButton())\r
+        {\r
+            printf("AddButton error!\n");\r
+        };\r
+        if (!InitImage())\r
+        {\r
+            printf("InitImage error!\n");\r
+        };\r
+        // SetCoverable(true);\r
+        return true;\r
+    }\r
+\r
+    void Traing_CardView::DeInit()\r
+    {\r
+        UIImageView *imageViews[] = {image1, image2, image3};\r
+        UIButton *buttons[] = {ButtonMore, Button1, Button3, Button2};\r
+\r
+        for (auto &imageView : imageViews)\r
+        {\r
+            if (imageView != nullptr)\r
+            {\r
+                delete imageView;\r
+                imageView = nullptr;\r
+            }\r
+        }\r
+\r
+        for (auto &button : buttons)\r
+        {\r
+            if (button != nullptr)\r
+            {\r
+                delete button;\r
+                button = nullptr;\r
+            }\r
+        }\r
+\r
+        if (titleLabel != nullptr)\r
+        {\r
+            delete titleLabel;\r
+            titleLabel = nullptr;\r
+        }\r
+    }\r
+\r
+    void Traing_CardView::PreLoad(void)\r
+    {\r
+        if (!viewiInitStatus)\r
+        {\r
+            InitView();\r
+            viewiInitStatus = true;\r
+        }\r
+        // if (!resLoadStatus)\r
+        // {\r
+        //     resLoadStatus = true;\r
+        // }\r
+    }\r
+\r
+    void Traing_CardView::UnLoad(void)\r
+    {\r
+        // if (resLoadStatus)\r
+        // {\r
+        //     //ImageCacheManager::GetInstance().UnloadAllInMultiRes(TRAINING_IAMGES);\r
+        //     resLoadStatus = false;\r
+        // }\r
+    }\r
+}\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/traing_card/Traing_CardView.h b/code/sdk/application/wearable/fd230app/nativeui/traing/traing_card/Traing_CardView.h
new file mode 100644 (file)
index 0000000..b5dea02
--- /dev/null
@@ -0,0 +1,66 @@
+#ifndef _Traing_CARD_VIEW_H
+#define _Traing_CARD_VIEW_H
+
+#include "BaseView.h"
+#include "View.h"
+#include <ui_scroll_view.h>
+#include "components/ui_view_group.h"
+#include "components/ui_label.h"
+#include "components/ui_image_view.h"
+#include "components/ui_button.h"
+#include "components/ui_image_animator.h"
+#include "components/ui_label_button_ext.h"
+#include "components/ui_chart.h"
+#include "wearable_log.h"
+#include "ohos_types.h"
+#include "components/ui_card_page.h"
+
+namespace OHOS
+{
+#define BUTTON1 "button1"    // 按键1
+#define BUTTON2 "button2"    // 按键2
+#define BUTTON3 "button3"    // 按键3
+#define BUTTONMORE "button4" // 按键 更多
+
+    class Traing_CardView : public UICardPage
+    {
+
+    public:
+        Traing_CardView();
+        virtual ~Traing_CardView();
+        static Traing_CardView *GetInstance(void);
+
+        bool InitView();
+        void DeInit();
+
+        bool AddButton();
+        bool InitImage();
+        bool InitLable();
+
+        void PreLoad(void) override;
+        void UnLoad(void) override;
+
+        bool LoadImage(UIImageView *view, uint32_t resId);
+        bool LoadImage(UILabelButtonExt *view, uint32_t resId);
+
+    private:
+        UIView::OnDragListener *draglistener{nullptr};
+        Traing_CardView(Traing_CardView &&) = delete;
+        Traing_CardView &operator=(Traing_CardView &&) = delete;
+
+        UILabelButtonExt *Button1 = nullptr;
+        UILabelButtonExt *Button2 = nullptr;
+        UILabelButtonExt *Button3 = nullptr;
+        UILabelButtonExt *ButtonMore = nullptr;
+
+        UILabel *titleLabel = nullptr;
+        UIImageView *image1 = nullptr;
+        UIImageView *image2 = nullptr;
+        UIImageView *image3 = nullptr;
+        UIImageView *imagemore = nullptr;
+
+        bool viewiInitStatus{false};
+        bool resLoadStatus{false};
+    };
+} // namespace OHOS
+#endif // Traing_PRESENTER_H
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traingrecord/include/TraingRecordPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traingrecord/include/TraingRecordPresenter.h
new file mode 100644 (file)
index 0000000..1c5a075
--- /dev/null
@@ -0,0 +1,32 @@
+#ifndef _TraingRecord_PRESENTER_H
+#define _TraingRecord_PRESENTER_H
+
+#include "Presenter.h"
+#include "TraingRecordView.h"
+
+namespace OHOS
+{
+    class TraingRecordView;
+
+    class TraingRecordPresenter : public Presenter<TraingRecordView>,
+                                public UIView::OnClickListener,
+                                public UIView::OnDragListener
+    {
+    public:
+        TraingRecordPresenter();
+        virtual ~TraingRecordPresenter();
+
+        void OnStart() override;
+        void OnPause() override;
+        void OnResume() override;
+        void OnStop() override;
+        static TraingRecordPresenter *GetInstance();
+
+    private:
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;
+        bool OnClick(UIView &view, const ClickEvent &event) override;
+        bool OnDrag(UIView &view, const DragEvent &event) override;
+    };
+} // namespace OHOS
+
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traingrecord/include/TraingRecordView.h b/code/sdk/application/wearable/fd230app/nativeui/traingrecord/include/TraingRecordView.h
new file mode 100644 (file)
index 0000000..d1df345
--- /dev/null
@@ -0,0 +1,62 @@
+#ifndef _TraingRecord_VIEW_H
+#define _TraingRecord_VIEW_H
+
+#include "BaseView.h"
+#include "View.h"
+#include <ui_scroll_view.h>
+#include "components/ui_view_group.h"
+#include "components/ui_label.h"
+#include "components/ui_image_view.h"
+#include "components/ui_button.h"
+#include "components/ui_image_animator.h"
+#include "components/ui_label_button_ext.h"
+#include "components/ui_chart.h"
+#include "components/ui_list.h"
+#include "components/icon_adapter.h"
+#include "wearable_log.h"
+#include "ohos_types.h"
+#include "components/ui_card_page.h"
+
+#include "TraingRecordPresenter.h"
+namespace OHOS
+{
+#define BUTTONNOTE "button1"
+
+    class TraingRecordPresenter;
+    class TraingRecordView : public View<TraingRecordPresenter>
+    {
+
+    public:
+        TraingRecordView();
+        virtual ~TraingRecordView();
+        static TraingRecordView *GetInstance(void);
+
+        void OnStart() override;
+        void OnSetUpView() override;
+        void OnTearDownView() override;
+        void OnStop() override;
+        void InitView();
+        void DeInit();
+        void InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize);
+        void InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId);
+        void InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath);
+        void InitList();
+        void PreLoad(void);
+
+        // 通过函数改变
+        void SetLabel();
+        void SetButton();
+
+    private:
+        UIView::OnDragListener *draglistener{nullptr};
+        TraingRecordView(TraingRecordView &&) = delete;
+        TraingRecordView &operator=(TraingRecordView &&) = delete;
+
+        UIViewGroup *container_ = nullptr;
+        UILabel *label1_ = nullptr;
+        UILabel *label2_ = nullptr;
+
+        bool viewiInitStatus{false};
+    };
+} // namespace OHOS
+#endif // TraingRecord_PRESENTER_H
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traingrecord/src/TraingRecordPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traingrecord/src/TraingRecordPresenter.cpp
new file mode 100644 (file)
index 0000000..ab838e2
--- /dev/null
@@ -0,0 +1,64 @@
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+
+#include <iostream>
+#include <chrono>
+#include <thread>
+#include "traingrecord/include/TraingRecordPresenter.h"
+// #include "TraingRecordView.h"
+
+namespace OHOS
+{
+
+    // 当前Presenter属性实例化的内存指针
+    static TraingRecordPresenter *g_pTraingRecordPresenter = nullptr;
+
+    TraingRecordPresenter::TraingRecordPresenter()
+    {
+        g_pTraingRecordPresenter = this;
+    }
+
+    TraingRecordPresenter::~TraingRecordPresenter()
+    {
+        g_pTraingRecordPresenter = nullptr;
+    }
+
+    TraingRecordPresenter *TraingRecordPresenter::GetInstance()
+    {
+        return g_pTraingRecordPresenter;
+    }
+
+    void TraingRecordPresenter::OnStart()
+    {
+        Presenter<TraingRecordView>::OnStart();
+    }
+
+    void TraingRecordPresenter::OnPause(void)
+    {
+        Presenter<TraingRecordView>::OnPause();
+    }
+
+    void TraingRecordPresenter::OnResume(void)
+    {
+        Presenter<TraingRecordView>::OnResume();
+    }
+
+    void TraingRecordPresenter::OnStop(void)
+    {
+        Presenter<TraingRecordView>::OnStop();
+    }
+
+    bool TraingRecordPresenter::OnDrag(UIView &view, const DragEvent &event)
+    {
+
+        if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&
+            (event.GetDeltaX() > 20) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))
+        {
+            NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);
+        }
+    }
+
+    bool TraingRecordPresenter::OnClick(UIView &view, const ClickEvent &event)
+    {
+    }
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traingrecord/src/TraingRecordView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traingrecord/src/TraingRecordView.cpp
new file mode 100644 (file)
index 0000000..169885e
--- /dev/null
@@ -0,0 +1,244 @@
+
+#include "traingrecord/include/TraingRecordView.h"
+
+#include "common/image_cache_manager.h"
+#include "UiConfig.h"
+#include "ui_resource_image.h"
+#include <ui_scroll_view.h>
+#include "components/ui_button.h"
+namespace OHOS
+{
+
+    static TraingRecordView *g_pTraingRecordView{nullptr};
+
+    TraingRecordView::TraingRecordView()
+    {
+        g_pTraingRecordView = this;
+    }
+
+    TraingRecordView::~TraingRecordView()
+    {
+        DeInit();
+        g_pTraingRecordView = nullptr;
+    }
+
+    TraingRecordView *TraingRecordView::GetInstance()
+    {
+
+        return g_pTraingRecordView;
+    }
+    /*
+    InitLabel:初始化标签
+    @param label 标签指针
+    @param left 标签左边位置
+    @param top 标签顶部位置
+    @param width 标签宽度
+    @param height 标签高度
+    @param viewId 标签的视图 ID
+    @param text 标签显示的文本
+    @param fontName 字体名称
+    @param fontSize 字体大小
+    */
+    void TraingRecordView::InitLabel(UILabel *&label, int left, int top, int width, int height, const char *viewId, const char *text, const char *fontName, int fontSize)
+    {
+        // 检查标签指针是否为空
+        if (label == nullptr)
+        {
+            label = new UILabel();
+        }
+        // 设置标签的位置和大小
+        label->SetPosition(left, top);
+        label->Resize(width, height);
+        // 设置标签的视图 ID
+        label->SetViewId(viewId);
+        // 设置标签的样式
+        label->SetStyle(STYLE_TEXT_FONT, fontSize);
+        label->SetFont(fontName, fontSize);
+        // 设置标签的文本和其他属性
+        label->SetText(text);
+        label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        label->SetRollSpeed(0);
+        // 设置标签可见
+        label->SetVisible(true);
+    }
+    /*
+    InitButton:初始化按钮
+    @param button 按钮指针
+    @param left 按钮左边位置
+    @param top 按钮顶部位置
+    @param width 按钮宽度
+    @param height 按钮高度
+    @param viewId 按钮的视图 ID
+    */
+    void TraingRecordView::InitButton(UIButton *&button, int left, int top, int width, int height, const char *viewId)
+    {
+        // 设置按钮的背景颜色
+        uint32_t backgroundColor = 0xff191919;        // 默认背景颜色
+        uint32_t pressedBackgroundColor = 0xff249115; // 按下时的背景颜色
+        uint32_t pressedBorderColor = 0xff0b1928;     // 按下时的边框颜色
+        // 创建新按钮(如果当前按钮为空)
+        if (button == nullptr)
+        {
+            button = new UIButton();
+        }
+        button->SetPosition(left, top);
+        button->Resize(width, height);
+        button->SetViewId(viewId);
+        button->SetStyle(STYLE_BACKGROUND_COLOR, backgroundColor);
+        button->SetStyleForState(STYLE_BACKGROUND_COLOR, pressedBackgroundColor, UIButton::PRESSED);
+        button->SetStyleForState(STYLE_BORDER_COLOR, pressedBorderColor, UIButton::PRESSED);
+        // 设置按钮的点击事件监听器为 TraingRecordPresenter 的实例
+        button->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingRecordPresenter::GetInstance()));
+        // 设置按钮可见
+        button->SetVisible(true);
+    }
+    /*
+   InitImageView:初始化图片
+   @param imageView 图片指针
+   @param left 图片左边位置
+   @param top 图片顶部位置
+   @param width 图片宽度
+   @param height 图片高度
+   @param viewId 图片的视图 ID
+   @param imagePath 图片路径
+   */
+    void TraingRecordView::InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath)
+    {
+        if (imageView == nullptr)
+        {
+            imageView = new UIImageView();
+        }
+        imageView->SetPosition(left, top);
+        imageView->Resize(width, height);
+        imageView->SetViewId(viewId);
+        imageView->SetSrc(imagePath);
+        imageView->SetVisible(true);
+    }
+    /* InitView:初始化界面*/
+    void TraingRecordView ::InitView()
+    {
+        if (container_ == nullptr)
+        {
+            container_ = new UIViewGroup();
+            container_->SetPosition(0, 0, 466, 466);
+            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);
+        }
+        // 初始化Lable
+        // Add Label to App
+        if (label1_ == nullptr)
+        {
+            label1_ = new UILabel();
+        }
+        label1_->SetPosition(181, 52); // widget's left position and top position
+        label1_->Resize(200, 60);      // widget's width and height
+        label1_->SetViewId("label1");  // Set style
+        label1_->SetStyle(STYLE_TEXT_FONT, 26);
+
+        // Set additional property
+        label1_->SetText("训练记录");
+        label1_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+        label1_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        label1_->SetRollSpeed(0);
+        label1_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 26);
+
+        // Add to rootView
+        container_->Add(label1_);
+        label1_->SetVisible(true);
+
+        // Add Label to App
+        if (label2_ == nullptr)
+        {
+            label2_ = new UILabel();
+        }
+        label2_->SetPosition(188, 217); // widget's left position and top position
+        label2_->Resize(200, 60);       // widget's width and height
+        label2_->SetViewId("label2");   // Set style
+        label2_->SetStyle(STYLE_TEXT_FONT, 30);
+
+        // Set additional property
+        label2_->SetText("无记录");
+        label2_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+        label2_->SetTextColor(Color::GetColorFromRGBA(0x28, 0xbc, 0x0c, 0xff));
+        label2_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        label2_->SetRollSpeed(0);
+        label2_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+
+        // Add to rootView
+        container_->Add(label2_);
+        label2_->SetVisible(true);
+    }
+
+    /* DeInit:删除组件 */
+    void TraingRecordView::DeInit()
+    {
+        UIView *view = static_cast<UIViewGroup *>(container_)->GetChildrenHead();
+        while (view != nullptr)
+        {
+            UIView *tempView = view;
+            view = view->GetNextSibling();
+            if (tempView->GetParent())
+            {
+                static_cast<UIViewGroup *>(tempView->GetParent())->Remove(tempView);
+            }
+            delete tempView;
+        }
+        delete container_;
+        container_ = nullptr;
+    }
+
+    void TraingRecordView::PreLoad(void)
+    {
+        if (!viewiInitStatus)
+        {
+            InitView();
+            viewiInitStatus = true;
+        }
+    }
+    void TraingRecordView::OnStart()
+    {
+        container_ = new UIViewGroup();
+        if (container_ == nullptr)
+        {
+            return;
+        }
+        container_->SetPosition(0, 0);
+        container_->SetWidth(Screen::GetInstance().GetWidth());
+        container_->SetHeight(Screen::GetInstance().GetHeight());
+
+        // 创建 draglistener 实例并设置为拖动监听器
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingRecordPresenter::GetInstance());
+        if (draglistener == nullptr)
+        {
+            return;
+        }
+        container_->SetOnDragListener(draglistener);
+
+        container_->SetTouchable(true);
+        container_->SetDraggable(true);
+
+        PreLoad();
+        RootView::GetInstance()->Add(container_);
+    }
+
+    void TraingRecordView::OnSetUpView()
+    {
+
+        View<TraingRecordPresenter>::OnSetUpView();
+        Draw();
+    }
+
+    void TraingRecordView::OnTearDownView()
+    {
+
+        View<TraingRecordPresenter>::OnTearDownView();
+        return;
+    }
+
+    void TraingRecordView::OnStop()
+    {
+        View<TraingRecordPresenter>::OnStop();
+        RootView::GetInstance()->RemoveAll();
+        return;
+    }
+}
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/APPLIST_TRAINING.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/APPLIST_TRAINING.bin
new file mode 100644 (file)
index 0000000..1c8d145
Binary files /dev/null and b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/APPLIST_TRAINING.bin differ
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/APPLIST_TRAINING_RECORD.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/APPLIST_TRAINING_RECORD.bin
new file mode 100644 (file)
index 0000000..2d76136
Binary files /dev/null and b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/APPLIST_TRAINING_RECORD.bin differ