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;