UI组件模块
UI组件模块是 ElenixOS 的核心组件之一,提供了一系列用户界面组件和交互功能,基于 LVGL 图形库构建。该模块为应用程序提供了统一的UI组件和交互方式,确保系统界面的一致性和美观性。
核心功能
基础组件
基础组件包括按钮、标签、输入框等基本UI元素,为应用程序提供了基础的用户交互功能。
高级组件
高级组件包括卡片分页器、气泡网格、滑动面板等复杂UI元素,为应用程序提供了丰富的交互方式。
动画系统
动画系统提供了丰富的动画效果,包括淡入淡出、滑动、缩放等,增强了用户界面的视觉效果和交互体验。
活动控制器
活动控制器负责管理应用程序的活动生命周期,包括活动的创建、切换、销毁等。
动画接口
动画系统提供了丰富的动画效果接口,具体请参考 eos_anim.h 文件。
活动控制器接口
活动控制器提供了活动管理的接口,具体请参考 eos_activity.h 文件。
实现细节
UI组件模块的核心实现包括:
- 组件封装:对 LVGL 基础组件进行封装,提供更高级的组件和功能
- 样式管理:统一管理组件样式,确保界面风格一致
- 动画效果:实现各种动画效果,增强用户体验
- 交互处理:处理用户输入和交互事件
该模块基于 LVGL 图形库,为 ElenixOS 提供了丰富的UI组件和交互功能。
UI架构
UI组件模块采用分层架构:
- 基础组件层:基于 LVGL 提供的基础组件
- 高级组件层:封装和扩展基础组件,提供更高级的功能
- 应用组件层:针对特定应用场景的组件
这种架构设计使得UI组件能够在不同应用场景中保持一致的风格和交互方式,同时提供足够的灵活性和可扩展性。
UI 所有权与扩展边界
动画
eos_anim_t 表示一个动画实例,eos_anim_group_t 协调多个实例的开始、完成和销毁。Activity 过渡通过动画路由选择动画组;自定义三次贝塞尔路径和调试拦截回调属于动画路径能力,不改变 Activity 或 SNI 的资源所有权。
Widget 数据
eos_wdata_set(obj, type, data, dtor) 为 LVGL 对象登记类型化数据;eos_wdata_get 读取;eos_wdata_remove 删除指定项并调用析构函数;eos_wdata_clear 删除对象上的全部类型化数据。替换同类型项不会调用旧值的析构函数,调用方必须在替换前处理旧值所有权。
EOS_WDATA_SNI_CB 专门保存 SNI 控制块,其他框架数据使用各自类型,因此 Activity、列表、消息和 SNI 数据可以共存。
对象删除规则
LVGL 父对象删除可能级联删除子对象。对象删除回调必须先通知 SNI、清除原生地址,再让依赖对象树的资源释放。页面代码不能在删除回调后继续访问对象指针,也不能把 lv_obj_set_user_data 当作框架数据注册表。
表盘与 Recent Apps
表盘组件通过 C API 和 eos.ww 提供统一入口;组件只负责显示和数据绑定,不拥有脚本程序。Recent Apps 使用页面快照和缩略图,但卡片不拥有 Activity View,驱逐时必须交给 Activity、SPM 和 SNI 完成销毁。