系统:修改label设置为不因为长度改变滚动速度
authorCaisking <3449750381@qq.com>
Tue, 8 Oct 2024 09:25:38 +0000 (17:25 +0800)
committerCaisking <3449750381@qq.com>
Tue, 8 Oct 2024 09:25:38 +0000 (17:25 +0800)
code/sdk/middleware/services/gui/uikit/ui/frameworks/components/ui_label.cpp

index 0fa53ac..3cee7ed 100755 (executable)
@@ -136,28 +136,28 @@ private:
         uint32_t time = HALTick::GetInstance().GetElapseTime(startTime_);
         float x0 = startPos_;
         float x1 = 1.0 * labelWidth_ - textWidth_;
-        float factor = 200000; // slow down the speed
-        float t = time * speed_ / factor;
-        float t1 = 1.0;
-        float period = 2.0;
-        while (t < 0) {
-            t += period;
-        }
-        while (t > period) {
-            t -= period;
-        }
+
+        float factor = 1000; // 1000: slow down the speed
+        float v = speed_ / factor;
+        v = x1 - x0 > 0 ? v : -v;
+        float t = time;
+        float t1 = (x1 - x0) / v;
+        float period = 2.0 * t1; // 2: double
+        t = t - float(t / period) * period;
         float x = 0;
-        if (t >=0 && t < t1) {
-            x = (x1 - x0) * t / t1 + x0;
+        if (t < t1) {
+            x = v * t + x0;
         } else {
-            x = (x0 - x1) * (t - t1) / t1 + x1;
+            x = -v * (t - t1) + x1;
         }
 
+
         UILabel *label = dynamic_cast<UILabel*>(view);
         if (label != nullptr) {
             label->offsetX_ = MATH_ROUND(x);
             label->Invalidate();
         }
+        // printf("offsetX: %d time %d\n", label->offsetX_, time);
     }
 
     static constexpr uint8_t ANIM_WAIT_COUNT = 50;