LVGL8学习之Button Styles

上一篇学习了Button,这一篇学习为按钮添加样式,样式存储在lv_style_t变量中。样式变量应该是静态的、全局的或动态分配的。换句话说,它们不能成为函数中当函数存在时被破坏的局部变量。在使用样式之前,应该使用lv_style_init(&my_style)初始化该样式。初始化样式后,可以设置或添加到样式属性。还是通过codeblock来模拟代码的运行,下面是代码

// 定义三个style变量
static lv_style_t style_btn;
static lv_style_t style_btn_pressed;
static lv_style_t style_btn_red;

static void button_style_init()
{
    lv_style_reset(&style_btn); // 重置按钮样式
    lv_style_init(&style_btn); // 初始化按钮样式
    lv_style_set_radius(&style_btn, 10); // 设置按钮样式圆角弧度
    lv_style_set_bg_opa(&style_btn, LV_OPA_COVER); // 设置背景的透明度
    lv_style_set_bg_color(&style_btn, lv_palette_lighten(LV_PALETTE_GREY, 3)); // 设置背景的颜色为淡灰色
    lv_style_set_bg_grad_color(&style_btn, lv_palette_main(LV_PALETTE_GREY)); // 设置渐变色为深灰色
    lv_style_set_bg_grad_dir(&style_btn, LV_GRAD_DIR_VER); // 设置渐变方向为垂直方向,即顶部到底部方向
    lv_style_set_border_color(&style_btn, lv_color_black()); // 设置边框颜色为黑色
    lv_style_set_border_opa(&style_btn, LV_OPA_20); // 设置边框透明度为20%
    lv_style_set_border_width(&style_btn, 2); // 设置边框宽度为2
    lv_style_set_text_color(&style_btn, lv_color_black()); //设置字体颜色为黑色

    /*
     创建一个颜色过滤器,用于修改button对象按下时的颜色样式
    */
    static lv_color_filter_dsc_t color_filter;
    lv_color_filter_dsc_init(&color_filter, color_darken); // 初始化颜色过滤器,并添加回调函数
    lv_style_reset(&style_btn_pressed);
    lv_style_init(&style_btn_pressed); // 初始化按钮按下的样式   
    lv_style_set_color_filter_dsc(&style_btn_pressed, &color_filter); // 给当前样式设置颜色过滤器
    lv_style_set_color_filter_opa(&style_btn_pressed, LV_OPA_20); // 过滤颜色透明度为20%

    // 创建一个样式
    lv_style_reset(&style_btn_red);
    lv_style_init(&style_btn_red);
    lv_style_set_bg_color(&style_btn_red, lv_palette_main(LV_PALETTE_RED)); // 样式背景色为红色
    lv_style_set_bg_grad_color(&style_btn_red, lv_palette_lighten(LV_PALETTE_RED, 3)); // 样式背景渐变色为淡红色
}


/**
创建button对象,并添加样式
 */
void lv_button_with_style_test()
{
    lv_obj_t* label = NULL;

    button_style_init(); // 按钮样式初始化

    /*创建button对象并使用新的样式*/
    lv_obj_t* btn = lv_btn_create(lv_scr_act());
    if (btn != NULL)
    {
        /*
         从当前主题移除所有样式
         注意:大小和位置也是样式属性,lv_obj_remove_style_all也会移除对象的大小和位置
        */
        lv_obj_remove_style_all(btn);
        lv_obj_set_pos(btn, 400, 200); // 设置按钮对象的位置X和Y
        lv_obj_set_size(btn, 120, 50); // 设置按钮对象的宽度和高度

        lv_obj_add_style(btn, &style_btn, LV_STATE_DEFAULT); // 给按钮对象添加默认样式
        lv_obj_add_style(btn, &style_btn_pressed, LV_STATE_PRESSED); // 给按钮对象添加按下状态的样式

        label = lv_label_create(btn); // 给按钮添加标签
        if (label != NULL)
        {
            lv_label_set_text(label, "Button1"); // 设置标签文本
            lv_obj_center(label); // 标签居中显示
        }
    }

    // 创建一个按钮对象并添加红色样式
    lv_obj_t* btn2 = lv_btn_create(lv_scr_act());
    if (btn2 != NULL)
    {
        lv_obj_remove_style_all(btn2); // 从当前主题移除所有样式
        lv_obj_set_pos(btn2, 400, 280); // 设置按钮对象的位置X和Y
        lv_obj_set_size(btn2, 120, 50); // 设置按钮对象的宽度和高度

        lv_obj_add_style(btn2, &style_btn, LV_STATE_DEFAULT); // 添加对象的默认样式
        lv_obj_add_style(btn2, &style_btn_red, LV_STATE_DEFAULT); // 添加对象的默认红色样式
        lv_obj_add_style(btn2, &style_btn_pressed, LV_STATE_PRESSED); // 添加对象的按下状态样式
        lv_obj_set_style_radius(btn2, LV_RADIUS_CIRCLE, 0);  // 添加按钮对象的圆角弧度样式

        label = lv_label_create(btn2); // 给btn2对象创建标签
        if (label != NULL)
        {
            lv_label_set_text(label, "Button 2"); // 设置标签文本
            lv_obj_center(label); // 标签对象居中显示
        }
    }
}

运行效果:

LVGL8学习之Button Styles_第1张图片

你可能感兴趣的:(LVGL,LVGL8,Button,Style)