014、LVGL坐标系统与对齐方式
LVGL坐标系统与对齐方式——从一次控件“跑偏”的调试说起
上周调试一个智能家居面板项目,遇到一个诡异现象:一个按钮在模拟器上显示正常,烧录到STM32F429硬件上却偏到了屏幕右下角。检查代码,发现是父容器使用了lv_obj_set_align,子控件又用了lv_obj_align,两者在坐标计算上产生了冲突。这个坑让我重新梳理了LVGL的坐标系统——今天就把这些踩过的坑和总结的规律写清楚。
坐标原点与参考系:别被“绝对坐标”骗了
LVGL的坐标原点默认在父对象的左上角,而不是屏幕左上角。这一点和很多桌面GUI框架不同——如果你直接写lv_obj_set_x(obj, 10),这个10是相对于父容器左上角的偏移量,不是屏幕坐标。
踩坑案例:
有次在TabView的某个页面里放了一个滑块,用lv_obj_set_pos(slider, 0, 0),结果滑块跑到了Tab标签栏下面。因为TabView的页面容器本身有内部边距(padding),坐标原点在页面内容区的左上角,而不是TabView的左上角。
正确理解:
lv_obj_set_x/y/pos:设置相对于父对象内容区左上角的坐标lv_obj_get_x/y:返回的也是相对于父对象内容区的坐标- 屏幕坐标需要通过
lv_obj_get_coords
