修改运动界面的滑动问题
authorCaisking <Casiking@zhihuishixun.com>
Mon, 5 Jan 2026 09:38:26 +0000 (17:38 +0800)
committerCaisking <Casiking@zhihuishixun.com>
Mon, 5 Jan 2026 09:38:26 +0000 (17:38 +0800)
code/sdk/application/wearable/fd272/nativeapp/nativeui/traing/include/TraingNomalPresenter.h
code/sdk/application/wearable/fd272/nativeapp/nativeui/traing/include/TraingNomalView.h
code/sdk/application/wearable/fd272/nativeapp/nativeui/traing/src/TraingEnddataView.cpp
code/sdk/application/wearable/fd272/nativeapp/nativeui/traing/src/TraingNomalPresenter.cpp
code/sdk/application/wearable/fd272/nativeapp/nativeui/traing/src/TraingNomalView.cpp

index d8191b4..db13d75 100644 (file)
@@ -34,8 +34,8 @@ namespace OHOS
         // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;
         bool OnClick(UIView &view, const ClickEvent &event) override;
         bool OnDrag(UIView &view, const DragEvent &event) override;
+        bool OnDragEnd(UIView &view, const DragEvent &event) override;
         bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件
-        // bool OnDragEnd(UIView& view, const DragEvent& event) override;
 
         bool enter_flag{false};
     };
index 310f592..e9118e7 100644 (file)
@@ -63,6 +63,7 @@ namespace OHOS
         TraingNomalView(TraingNomalView &&) = delete;
         TraingNomalView &operator=(TraingNomalView &&) = delete;
 
+        UIViewGroup *group = nullptr;
         UILabelExt *sporttitle_ = nullptr;
         UIButton *buttonGo_ = nullptr;
         UILabelButtonExt *buttonSet_ = nullptr;
index cc3a60c..096c6cc 100644 (file)
@@ -393,9 +393,6 @@ void TraingEnddataView::DeInit() {
   // 确保 scrollView_ 存在,并移除所有组件
   if (scrollView_) {
     scrollView_->RemoveAll();
-    delete scrollView_;
-    scrollView_ = nullptr;
-  }
 
   // 删除所有 UILabelExt 类型指针
   if (labelutime) {
@@ -558,7 +555,6 @@ void TraingEnddataView::DeInit() {
     canvas = nullptr;
   }
 
-  if (scrollView_) {
     delete scrollView_;
     scrollView_ = nullptr;
   }
@@ -732,14 +728,7 @@ void TraingEnddataView::InitData() {
   WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
                 "TraingEnddataView data initialization complete.\r\n");
 }
-// 设置按键监听
-static void SetKeyActListener() {
-  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetKeyActListener");
-  // 增加按键监听
-  RootView::OnKeyActListener *keyactListener =
-      (RootView::OnKeyActListener *)OHOS::TraingEnddataPresenter::GetInstance();
-  RootView::GetInstance()->SetOnKeyActListener(keyactListener);
-}
+
 void TraingEnddataView::OnStart() {
 
   bool isNeedGPS = TraingModel::GetInstance()->IsNeedGPS(TraingModel::GetInstance()->GetSportEvent());
@@ -766,9 +755,9 @@ void TraingEnddataView::OnStart() {
   PreLoad();
   InitData(); // 刷新数据
 
-  GetRootContainer()->SetDraggable(true);
-  GetRootContainer()->SetTouchable(true);
-  GetRootContainer()->SetOnDragListener(presenter_);
+  scrollView_->SetDraggable(true);
+  scrollView_->SetTouchable(true);
+  scrollView_->SetOnDragListener(presenter_);
 
   // 检查是否有足够的GPS数据来绘制轨迹
   if (isNeedGPS == false) {
@@ -788,10 +777,11 @@ void TraingEnddataView::OnStart() {
     DrawTrackSegment(canvas);
     DrawMarkers(canvas);
   } else {
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GPS轨迹数据不足,不绘制轨迹");
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GPS轨迹数据不足,不绘制轨迹");
   }
 #endif
-  SetKeyActListener();
+
+  RootView::GetInstance()->SetOnKeyActListener(presenter_);
 }
 
 //////////////////////////////gps轨迹测试/////////////////////////////////////
index 527a405..ea6204d 100644 (file)
@@ -97,11 +97,18 @@ namespace OHOS
     bool TraingNomalPresenter::OnDrag(UIView &view, const DragEvent &event)\r
     {\r
         UNUSED(view);\r
-        if ((event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) && (event.GetDeltaX() > X_DRAG_OFFSET) &&\r
-            (event.GetDeltaX() > (DOUBLES * MATH_ABS(event.GetDeltaY()))))\r
-        {\r
-            NavigateBack();\r
-        }\r
+        // 在拖拽过程中不处理退出,只允许事件继续传播\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingNomalPresenter::OnDrag");\r
+        return true;\r
+    }\r
+\r
+    bool TraingNomalPresenter::OnDragEnd(UIView &view, const DragEvent &event)\r
+    {\r
+        UNUSED(view);\r
+        // 在拖拽结束时判断是否满足退出条件\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingNomalPresenter::OnDragEnd");\r
+        NavigateBack();\r
+        \r
         return true;\r
     }\r
 \r
@@ -171,6 +178,6 @@ namespace OHOS
             return;\r
         }\r
         //获取gps定位状态\r
-        TraingNomalView::GetInstance()->updateview();\r
+        // TraingNomalView::GetInstance()->updateview();\r
     }\r
 }\r
index f541b6f..a840791 100644 (file)
 #include "traing/include/TraingModel.h"
 #include "uicomponents/UIComponents.h"
 #include "traing/Training_UiConfig.h"
+#include "layout/grid_layout.h"
+#include "font/ui_font.h"
+#include <string>
+#include "cmsis_os.h"
 
 namespace OHOS
 {
@@ -38,12 +42,17 @@ namespace OHOS
     /* InitView:初始化界面*/
     void TraingNomalView ::InitView()
     {
+        if (group == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group is nullptr in InitView");
+            return;
+        }
 
         UIResourceTextId sport_id = TraingModel::GetInstance()->GetSportEvent();
 
         // 初始化Lable
         InitLabelExt(sporttitle_, 83, 50, 300, 35, "label1", sport_id, DEFAULT_VECTOR_FONT_FILENAME, 30);
-        AddViewToRootContainer(sporttitle_);
+        group->Add(sporttitle_);
         
         // 初始化Button
         InitButton(buttonGo_, 133, 133, 200, 200, BUTTONGO);
@@ -61,8 +70,8 @@ namespace OHOS
 
         buttonGo_->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingNomalPresenter::GetInstance()));
         buttonSet_->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingNomalPresenter::GetInstance()));
-        AddViewToRootContainer(buttonGo_);
-        AddViewToRootContainer(buttonSet_);
+        group->Add(buttonGo_);
+        group->Add(buttonSet_);
         /*判断是否需要GPS*/
         if(TraingModel::GetInstance()->IsNeedGPS(sport_id) == false)
         {
@@ -71,9 +80,9 @@ namespace OHOS
         }
 #if defined(SUPPORT_GNSS)
         InitUILabel(heartrate_label_, -32, 230, 200, 60, "heartrate_label_", "--", DEFAULT_VECTOR_FONT_FILENAME, 30);
-        AddViewToRootContainer(heartrate_label_);
+        group->Add(heartrate_label_);
         InitUILabel(gps_label_, 295, 230, 200, 60, "label_time", "GPS", DEFAULT_VECTOR_FONT_FILENAME, 30);
-        AddViewToRootContainer(gps_label_);
+        group->Add(gps_label_);
         
         // 获取gps状态
         bool gps_status = TraingModel::GetInstance()->GetGPSConnectState();
@@ -90,14 +99,17 @@ namespace OHOS
             InitImageView(gps_image_, 375, 193, 100, 100, "gps_image", GPS_2_IMAGE);
             buttonGo_->SetImageSrc(GO_2_IMAGE, GO_2_IMAGE);
         }
-        AddViewToRootContainer(gps_image_);
+        group->Add(gps_image_);
         InitImageView(heartrate_image_, 48, 193, 100, 100, "heartrate_image_", HEARTRATE_1_IMAGE);
-        AddViewToRootContainer(heartrate_image_);
+        group->Add(heartrate_image_);
 #endif
     }
     /* DeInit:删除组件*/
     void TraingNomalView::DeInit()
     {
+        if (group != nullptr)
+        {
+            group->RemoveAll();
 
         if (sporttitle_ != nullptr)
         {
@@ -136,6 +148,9 @@ namespace OHOS
             heartrate_image_ = nullptr;
         }
 #endif
+        delete group;
+        group = nullptr;
+        }
     }
 
     void TraingNomalView::PreLoad(void)
@@ -146,32 +161,27 @@ namespace OHOS
             viewiInitStatus = true;
         }
     }
-    // 设置按键监听
-    static void SetKeyActListener()
-    {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetKeyActListener");
-        // 增加按键监听
-        RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::TraingNomalPresenter::GetInstance();
-        RootView::GetInstance()->SetOnKeyActListener(keyactListener);
-    }
+
     void TraingNomalView::OnStart()
     {
-       
+        // 创建group容器
+        group = new UIViewGroup();
+        group->SetPosition(0, 0);
+        group->Resize(HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
 
-        // 创建 draglistener 实例并设置为拖动监听器
-        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingNomalPresenter::GetInstance());
-        if (draglistener == nullptr)
-        {
-            return;
-        }
-        GetRootContainer()->SetOnDragListener(draglistener);
-
-        GetRootContainer()->SetTouchable(true);
-        GetRootContainer()->SetDraggable(true);
+        // 设置拖拽监听器
+        group->SetDraggable(true);
+        group->SetTouchable(true);
+        group->SetOnDragListener(presenter_);
 
+        // 初始化视图(所有视图将添加到group中)
         PreLoad();
 
-        SetKeyActListener();
+        // 将group添加到根容器
+        AddViewToRootContainer(group);
+        
+        // 设置按键监听
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);
     }
 
     // 更新训练目标 [考虑 通用目标 特殊目标]
@@ -225,7 +235,10 @@ namespace OHOS
         gps_image_->SetSrc(image);
         buttonGo_->SetImageSrc(button_image_path.c_str(), button_image_path.c_str());
         //刷新一下
-        GetRootContainer()->Invalidate();
+        if (group != nullptr)
+        {
+            group->Invalidate();
+        }
         return true; 
     }
 }