LVGL样式状态与过渡动画:从一次UI卡顿调试说起
去年做一款智能家居中控屏,客户反馈说“按键按下去没有反馈,像死机了一样”。我第一反应是触摸中断没处理好,结果示波器一挂,触摸响应正常,问题出在LVGL的样式状态切换上——默认的lv_btn按下态和释放态之间没有任何过渡,瞬间跳变让用户觉得“没反应”。后来加了200ms的过渡动画,用户反馈“手感好了很多”。今天这篇笔记,就聊聊LVGL里样式状态和过渡动画那些容易踩坑的地方。
样式状态:不只是“按下”和“释放”
LVGL的样式状态(lv_state_t)不是简单的二值逻辑。一个对象可以同时处于多个状态,比如一个按钮被按下时,它同时拥有LV_STATE_PRESSED和LV_STATE_DEFAULT(默认态)。状态优先级决定了哪个样式生效——LV_STATE_DISABLED优先级最高,其次是LV_STATE_PRESSED、LV_STATE_FOCUSED等。
调试时最容易犯的错:只给LV_STATE_DEFAULT和LV_STATE_PRESSED设置了样式,忽略了LV_STATE_FOCUSED。在带键盘输入的场景下,焦点移动到按钮上时,按钮样式会变成默认态,看起来就像“没选中”。解决方案是显式给LV_STATE_FOCUSED也设置样式,哪怕只是边框颜色变一下。