LVGL学习笔记4 - 主题Themes

31 篇文章 83 订阅

目录

1. 获取主题句柄

2. 设置基础主题

3. 设置主题的回调函数

4. 使能主题

5. 实例

5.1 定义一个全局Style变量

5.2 显示默认主题风格的矩形

5.3 初始化新主题的样式

 5.4 初始化新主题

 5.5 回调函数的实现

 5.6 设置新主题

5.7 显示


主题是风格的集合。对应的变量结构体是lv_theme_t。定义一个主题也必须是全局变量或者静态的。

1. 获取主题句柄

lv_theme_t  * lv_theme_get_from_obj(lv_obj_t * obj);

参数含义:

obj - 对象句柄,如果是NULL,则获取的是默认主题。

2. 设置基础主题

为主题设置基础主题。基础主题中的样式将添加到当前主题的样式之前。通过设置基本主题,可以创建任意长的主题链。

void lv_theme_set_parent(lv_theme_t * new_theme, lv_theme_t * parent);

参数含义:

new_theme - 新主题句柄

parent - 基础主题句柄

3. 设置主题的回调函数

回调函数用于向不同对象添加样式。

void lv_theme_set_apply_cb(lv_theme_t * theme, lv_theme_apply_cb_t apply_cb);

参数含义:

theme - 被设置回调函数的主题句柄

apply_cb - 回调函数

typedef void (*lv_theme_apply_cb_t)(struct _lv_theme_t *, lv_obj_t *);

4. 使能主题

void lv_disp_set_theme(lv_disp_t * disp, lv_theme_t * th);

设置显示器的主题。

参数含义:

disp - 显示器句柄

th - 主题句柄

5. 实例

画3个矩形框,第一个是默认主题的风格,另外2个是新的主题。

5.1 定义一个全局Style变量

static lv_style_t gThemeRectStyle;

5.2 显示默认主题风格的矩形

lv_obj_t* rect = lv_obj_create(lv_scr_act());

lv_obj_set_size(rect, LV_PCT(20), LV_PCT(20));
lv_obj_align(rect, LV_ALIGN_TOP_LEFT, 20, 20);

5.3 初始化新主题的样式

/*Set a background color and a radius*/
lv_style_init(&gThemeRectStyle);
lv_style_set_radius(&gThemeRectStyle, 5);
lv_style_set_bg_opa(&gThemeRectStyle, LV_OPA_COVER);
lv_style_set_bg_color(&gThemeRectStyle, lv_palette_lighten(LV_PALETTE_GREY, 1));

/*Add a shadow*/
lv_style_set_shadow_width(&gThemeRectStyle, 55);
lv_style_set_shadow_color(&gThemeRectStyle, lv_palette_main(LV_PALETTE_BLUE));

lv_style_set_radius设置半径,对于矩形是四个边角的弧形大小。改成15后显示效果:

lv_style_set_bg_opa设置背景的透明度。LV_OPA_COVER是无透明度,覆盖。改为50%透明度LV_OPA_50的显示效果:

lv_style_set_bg_color设置背景颜色。lv_palette_lighten(LV_PALETTE_GREY, 1)是LVGL预设颜色值,LV_PALETTE_GREY表示灰色,第二个参数表示亮度,有效值1-5。改为LV_PALETTE_ORANGE和3的显示效果:

lv_style_set_shadow_width设置阴影的宽度。改为10、20、40后显示的效果依次如下:

 

 lv_style_set_shadow_color设置阴影的颜色。改为LV_PALETTE_RED的显示效果:

 5.4 初始化新主题

/*通过当前主题初始化新主题*/
lv_theme_t* th_active = lv_theme_get_from_obj(NULL);
static lv_theme_t th_new;
th_new = *th_active;

/*设置父主题和新主题的样式适播放回调函数*/
lv_theme_set_parent(&th_new, th_active);
lv_theme_set_apply_cb(&th_new, new_theme_apply_cb);

 5.5 回调函数的实现

static void new_theme_apply_cb(lv_theme_t* th, lv_obj_t* obj)
{
    if (lv_obj_check_type(obj, &lv_obj_class))
    {
        lv_obj_add_style(obj, &gThemeRectStyle, LV_STATE_DEFAULT);
    }
}

通过lv_obj_check_type判断对象类型,只有对应的对象才使用对应的Style。对象类型可以参考文件lv_theme_basic.c中的函数theme_apply,里面有一组if判断各个对象类型。

 5.6 设置新主题

lv_disp_set_theme(NULL, &th_new);

5.7 显示

    lv_obj_t* rect2 = lv_obj_create(lv_scr_act());

    lv_obj_set_size(rect2, LV_PCT(20), LV_PCT(20));
    lv_obj_align(rect2, LV_ALIGN_TOP_LEFT, 220, 20);

    lv_obj_t* rect3 = lv_obj_create(lv_scr_act());

    lv_obj_set_size(rect3, LV_PCT(20), LV_PCT(20));
    lv_obj_align(rect3, LV_ALIGN_TOP_LEFT, 420, 20);

当设置了新的主题后,显示所有的lv_obj_class部件都会采用新主题的风格显示。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值