#969,解决,韩语,秒表计时界面有遮挡bug
authorluozheng <1732036298@qq.com>
Sat, 12 Oct 2024 09:06:22 +0000 (17:06 +0800)
committerluozheng <1732036298@qq.com>
Sat, 12 Oct 2024 09:06:22 +0000 (17:06 +0800)
code/sdk/application/wearable/fd230app/nativeui/stopwatch/include/MainStopWatchPresenter.h
code/sdk/application/wearable/fd230app/nativeui/stopwatch/src/MainStopWatchPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/stopwatch/src/MainStopWatchView.cpp
code/sdk/application/wearable/fd230app/nativeui/stopwatch/src/StopWatchModel.cpp

index dc906ba..01c4560 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com\r
  * @Date: 2024-04-04 15:13:51\r
  * @LastEditors: luozheng 1732036298@qq.com\r
- * @LastEditTime: 2024-08-20 11:25:11\r
+ * @LastEditTime: 2024-10-12 16:05:30\r
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/stopwatch/include/MainStopWatchPresenter.h\r
  */\r
 #ifndef MAIN_STOPWATCH_PRESENTER_H\r
@@ -66,6 +66,7 @@ namespace OHOS
         uint64_t lastRecordTime = 0; // 上次记录时间\r
         int RecordCycleNumber{0};    // 用来记录计时圈数\r
         bool X_DRAG_FLAG{false};\r
+        bool isStartMark{false};\r
     };\r
 } // namespace OHOS\r
 \r
index b950eec..97a5d9c 100644 (file)
@@ -88,7 +88,7 @@ namespace OHOS
         label->SetPosition(x, y);\r
         label->SetStyle(STYLE_TEXT_FONT, TextFont);\r
         label->SetStyle(STYLE_LINE_HEIGHT, LineHeight);\r
-        label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, TextFont);\r
+        label->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN, TextFont);\r
         label->Invalidate();\r
     }\r
 \r
@@ -171,7 +171,7 @@ namespace OHOS
         UNUSED(view);\r
         MainStopWatchView *mainStopWatchView = MainStopWatchView::GetInstance();\r
         const char *clickedViewId = view.GetViewId();\r
-        if (strcmp(clickedViewId, ResetOrMarkButton_MARK_VIEWID) == 0)\r
+        if (strcmp(clickedViewId, ResetOrMarkButton_MARK_VIEWID) == 0) // 点击标记按钮\r
         {\r
             WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordCycleNumber:%d\n", RecordCycleNumber);\r
             if (RecordCycleNumber >= MAX_RECORD_LOOPS) // 到达最高记录圈数\r
@@ -184,10 +184,16 @@ namespace OHOS
             {\r
                 RecordCycleNumber += 1;\r
             }\r
-            mainStopWatchView->SetViewIsVisible(m_stopWatchlabel, false);\r
-            SetShowTimeLableStyle(m_showTimelabel, 93, 60, 65, 78);\r
-            mainStopWatchView->SetViewIsVisible(m_list, true);\r
-            mainStopWatchView->SetViewIsVisible(m_image, true);\r
+\r
+            if (isStartMark == false) // 第一次标记\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "isStartMark = %d", isStartMark);\r
+                mainStopWatchView->SetViewIsVisible(m_stopWatchlabel, false);\r
+                SetShowTimeLableStyle(m_showTimelabel, 0, 60, 65, 78);\r
+                mainStopWatchView->SetViewIsVisible(m_list, true);\r
+                mainStopWatchView->SetViewIsVisible(m_image, true);\r
+                isStartMark = true;\r
+            }\r
 \r
             uint64_t currentRecordTime = TimeStrToMilliseconds(MainStopWatchView::GetInstance()->GetShowTimelabel()->GetText()); // 获取当前时间\r
             uint64_t timeDifference = 0;                                                                                         // 时间差值\r
@@ -219,7 +225,7 @@ namespace OHOS
             lastRecordTime = currentRecordTime;\r
             return true;\r
         }\r
-        else if (strcmp(clickedViewId, ResetOrMarkButton_RESET2_VIEWID) == 0)\r
+        else if (strcmp(clickedViewId, ResetOrMarkButton_RESET2_VIEWID) == 0) // 点击重置按钮\r
         {\r
             StopWatchModel::GetInstance()->StopWatch_StopTimer(); // 停止定时器\r
             mainStopWatchView->GetShowTimelabel()->SetText("00:00.00");\r
@@ -229,15 +235,21 @@ namespace OHOS
             m_button->SetImageSrc(ResetOrMarkButtonImg_Reset1, ResetOrMarkButtonImg_Reset1);\r
             m_button->Invalidate();\r
 \r
-            mainStopWatchView->SetViewIsVisible(m_stopWatchlabel, true);\r
-            SetShowTimeLableStyle(m_showTimelabel, 68, 160, 84, 94);\r
-            mainStopWatchView->SetViewIsVisible(m_image, false);\r
-            mainStopWatchView->SetViewIsVisible(m_list, false);\r
+            if (isStartMark == true) // 重置标记\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "isStartMark = %d", isStartMark);\r
+                mainStopWatchView->SetViewIsVisible(m_stopWatchlabel, true);\r
+                SetShowTimeLableStyle(m_showTimelabel, 0, 160, 84, 94);\r
+                mainStopWatchView->SetViewIsVisible(m_image, false);\r
+                mainStopWatchView->SetViewIsVisible(m_list, false);\r
+                isStartMark = false;\r
+            }\r
 \r
             if (m_listdata != nullptr)\r
             {\r
                 for (int i = 0; i < m_listdata->Size(); i++)\r
                 {\r
+                    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "%d", i);\r
                     char *p = (char *)(m_listdata->Tail()->data_);\r
                     free(p);\r
                 }\r
@@ -250,11 +262,11 @@ namespace OHOS
             }\r
             RecordCycleNumber = 0;\r
         }\r
-        else if (strcmp(clickedViewId, CycleToLimitReturnButton_VIEWID) == 0)\r
+        else if (strcmp(clickedViewId, CycleToLimitReturnButton_VIEWID) == 0) // 点击返回按钮\r
         {\r
             mainStopWatchView->ChangeView(STOPWATCH_RECORD_CYCLE_TO_LIMIT, MAIN_STOPWATCH);\r
         }\r
-        else if (strcmp(clickedViewId, TimeToLimitReturnButton_VIEWID) == 0)\r
+        else if (strcmp(clickedViewId, TimeToLimitReturnButton_VIEWID) == 0) // 点击返回按钮\r
         {\r
             mainStopWatchView->ChangeView(STOPWATCH_RECORD_TIME_TO_LIMIT, MAIN_STOPWATCH);\r
         }\r
index fd48486..89538ec 100644 (file)
@@ -273,11 +273,11 @@ namespace OHOS
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showTimelabel new fail!!");\r
                 return;\r
             }\r
-            showTimelabel->SetPosition(68, 160);\r
+            showTimelabel->SetPosition(0, 160,466, 94);\r
             showTimelabel->SetStyle(STYLE_TEXT_FONT, 84);\r
             showTimelabel->SetStyle(STYLE_LINE_HEIGHT, 94);\r
             showTimelabel->SetText("00:00.00");\r
-            showTimelabel->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+            showTimelabel->SetLineBreakMode(UILabel::LINE_BREAK_CLIP);\r
             showTimelabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
             showTimelabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN, 84);\r
             /* -------------------------------- LineImage ------------------------------- */\r
@@ -316,7 +316,7 @@ namespace OHOS
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "listadapter new fail!!");\r
                 return;\r
             }\r
-            listadapter->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 28);\r
+            listadapter->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN, 28);\r
             /* -------------------------------- listdata -------------------------------- */\r
             listdata = new List<const char *>();\r
             if (listdata == nullptr)\r
index 0bb93fb..b37b7f6 100644 (file)
@@ -17,7 +17,7 @@ namespace OHOS
 \r
     /* ----------------------------------- 定时器 ---------------------------------- */\r
     // 声明定时器变量\r
-    static osTimerId_t g_timer = NULL;\r
+    static osTimerId_t g_timer = nullptr;\r
     static int g_StopWatchTimes = {0};\r
     static constexpr int32 NUM_TEN = 10; // 主要用于格式化输出,当小时、分钟或秒小于10时,在其前面添加一个’0’以保持常规时间格式\r
     static constexpr int16 ERROR = 0;\r
@@ -25,7 +25,7 @@ namespace OHOS
     static constexpr int16 NUM_TIME_MIN = 60;\r
     static constexpr int16 NUM_TIME_HOUR = 3600;\r
     static constexpr int32 NUM_TIME_DAY = 86400;\r
-    static constexpr int32 MAX_NUM_TIME = (99 * 60 * 1000) + (59 * 1000) + 990; // 99分59秒990毫秒\r
+    static constexpr int32 MAX_STOPWATCH_TIME = (99 * 60 * 1000) + (59 * 1000) + 990; // 99分59秒990毫秒\r
     static uint64_t g_timerStartTimestamp = 0;                                  // 添加一个全局变量来存储定时器开始的时间戳\r
     /*\r
      * @brief 显示倒计时(分钟、秒、毫秒),毫秒显示为两位数\r
@@ -81,28 +81,13 @@ namespace OHOS
      */\r
     static void StopWatch_TimerCallbackProc(int data)\r
     {\r
-        g_StopWatchTimes += 10; // 每次回调增加10毫秒\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "g_StopWatchTimes:%d\n", g_StopWatchTimes);\r
-\r
-        if (MainStopWatchView::GetInstance() == nullptr)\r
-        {\r
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[StopWatch_TimerCallbackProc] GetInstance is NULL");\r
-            return;\r
-        }\r
-\r
-        if (MainStopWatchView::GetInstance()->GetShowTimelabel() == nullptr)\r
+        if (MainStopWatchView::GetInstance() == nullptr || MainStopWatchView::GetInstance()->GetShowTimelabel() == nullptr || StopWatchModel::GetInstance()->DisplayStopWatchDuration() == nullptr)\r
         {\r
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[StopWatch_TimerCallbackProc] GetInstance()->GetShowTimelabel is NULL");\r
             return;\r
         }\r
 \r
-        if (StopWatchModel::GetInstance()->DisplayStopWatchDuration() == nullptr)\r
-        {\r
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[StopWatch_TimerCallbackProc] DisplayStopWatchDuration is NULL");\r
-            return;\r
-        }\r
+        if ((g_StopWatchTimes) >= MAX_STOPWATCH_TIME) // 达到最大时间\r
 \r
-        if ((g_StopWatchTimes) >= MAX_NUM_TIME) // 5999990 = 99分59秒99的毫秒数\r
         {\r
             MainStopWatchView::GetInstance()->GetPlayOrPausecheckBox()->SetState(UICheckBox::UNSELECTED);\r
             MainStopWatchView::GetInstance()->ChangeRecordTimeToLimitView();\r
@@ -118,6 +103,7 @@ namespace OHOS
      */\r
     static void StopWatch_TimerCallback(int data)\r
     {\r
+        g_StopWatchTimes += 10; // 每次回调增加10毫秒\r
         GraphicService::GetInstance()->PostGraphicEvent(std::bind(StopWatch_TimerCallbackProc, data));\r
     }\r
 \r
@@ -128,16 +114,16 @@ namespace OHOS
     void StopWatchModel::StopWatch_StartTimer(uint32_t interval)\r
     {\r
         /* -------------------------- 1.检查定时器是否已经存在,如果存在则返回 ------------------------- */\r
-        if (g_timer != NULL)\r
+        if (g_timer != nullptr)\r
         {\r
             WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "StopWatchModel::StopWatch_StartTimer Timer already exists!!");\r
             return;\r
         }\r
 \r
         /* --------------------------------- 2.创建定时器 -------------------------------- */\r
-        g_timer = osTimerNew((osTimerFunc_t)StopWatch_TimerCallback, osTimerPeriodic, NULL, NULL);\r
+        g_timer = osTimerNew((osTimerFunc_t)StopWatch_TimerCallback, osTimerPeriodic, nullptr, nullptr);\r
         // 检查定时器创建是否成功\r
-        if (g_timer == NULL)\r
+        if (g_timer == nullptr)\r
         {\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "StopWatchModel::StopWatch_StartTimer Timer create failed!!");\r
             return;\r
@@ -149,15 +135,15 @@ namespace OHOS
         /* --------------------------------- 4.启动定时器 -------------------------------- */\r
         // g_timerStartTimestamp = GetCurrentTimestamp(); // 假设GetCurrentTimestamp()是获取当前时间戳的函数\r
         osStatus_t ret = osTimerStart(g_timer, tick);\r
-        /* -------------------- 5.检查定时器启动是否成功,如果启动失败,删除定时器并置为 NULL -------------------- */\r
+        /* -------------------- 5.检查定时器启动是否成功,如果启动失败,删除定时器并置为 nullptr -------------------- */\r
         if (ret != osOK)\r
         {\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[StopWatch_StartTimer]osTimerDelete failed, ret = %lx!!", ret);\r
-            if (g_timer != NULL)\r
+            if (g_timer != nullptr)\r
             {\r
                 ret = osTimerDelete(g_timer);\r
             }\r
-            g_timer = NULL;\r
+            g_timer = nullptr;\r
             return;\r
         }\r
         return;\r
@@ -169,16 +155,16 @@ namespace OHOS
     void StopWatchModel::StopWatch_StopTimer(void)\r
     {\r
         // 检查定时器是否存在\r
-        if (g_timer != NULL)\r
+        if (g_timer != nullptr)\r
         {\r
             osTimerStop(g_timer);\r
-            // 删除定时器并置为 NULL\r
+            // 删除定时器并置为 nullptr\r
             osStatus_t ret = osTimerDelete(g_timer);\r
             if (ret != osOK)\r
             {\r
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScanTimerCallback osTimerDelete failed, ret = %lx!!", ret);\r
             }\r
-            g_timer = NULL;\r
+            g_timer = nullptr;\r
             g_StopWatchTimes = 0;\r
         }\r
     }\r
@@ -188,7 +174,7 @@ namespace OHOS
     void StopWatchModel::StopWatch_PauseTimer(void)\r
     {\r
         // 检查定时器是否存在\r
-        if (g_timer != NULL)\r
+        if (g_timer != nullptr)\r
         {\r
             // 暂停定时器,但不删除它\r
             osStatus_t ret = osTimerStop(g_timer);\r
@@ -205,7 +191,7 @@ namespace OHOS
     void StopWatchModel::StopWatch_ResumeTimer(uint32_t interval)\r
     {\r
         // 检查定时器是否存在\r
-        if (g_timer != NULL)\r
+        if (g_timer != nullptr)\r
         {\r
             int tick = osMs2Tick(interval);\r
             // 恢复定时器\r