• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

lvgl v8 按钮动画和长按时间修改

武飞扬头像
悦睍
帮助1

1.按钮按下更改背景颜色和扩大背景的程序如下

lv_obj_t* obj = lv_obj_create(lv_scr_act());
    lv_obj_remove_style_all(obj);
    lv_obj_set_size(obj, LV_HOR_RES * 0.287, LV_VER_RES * 0.287);
    lv_obj_clear_flag(obj, LV_OBJ_FLAG_SCROLLABLE);

    lv_obj_align(obj, LV_ALIGN_CENTER, 0, 0);

    lv_obj_set_style_bg_opa(obj, LV_OPA_COVER, 0);
    lv_obj_set_style_width(obj, LV_HOR_RES * 0.287, 0);
    lv_obj_set_style_height(obj, LV_VER_RES * 0.287, 0);
    lv_obj_set_style_bg_color(obj, lv_color_hex(0x333333), 0);
    lv_obj_set_style_radius(obj, LV_VER_RES * 0.287, 0);
    lv_obj_t* obj1 = lv_obj_create(obj);
    lv_obj_set_size(obj1, LV_VER_RES * 0.237, LV_VER_RES * 0.237);

    lv_obj_align(obj1, LV_ALIGN_CENTER, 0, 0);

    lv_obj_set_style_width(obj1, LV_VER_RES * 0.26, LV_STATE_PRESSED);
    lv_obj_set_style_height(obj1, LV_VER_RES * 0.26, LV_STATE_PRESSED);
    lv_obj_set_style_bg_color(obj1, lv_color_hex(0x333333), 0);
    lv_obj_set_style_bg_color(obj1, lv_color_hex(0x48CFBD), LV_STATE_PRESSED);
    lv_obj_set_style_radius(obj1, LV_VER_RES * 0.26, 0);
    lv_obj_set_style_border_color(obj1, lv_color_hex(0x333333), 0);
    static lv_style_transition_dsc_t tran;
    static const lv_style_prop_t prop[] = { LV_STYLE_WIDTH, LV_STYLE_HEIGHT, LV_STYLE_PROP_INV };
    lv_style_transition_dsc_init(
        &tran,
        prop,
        lv_anim_path_ease_in,
        200,
        0,
        nullptr
    );
    lv_obj_set_style_transition(obj1, &tran, LV_STATE_PRESSED);
    lv_obj_set_style_transition(obj1, &tran, LV_STATE_FOCUSED);
    lv_obj_update_layout(obj1);

运行结果如下图

学新通

 2.另外,按钮按下更改背景颜色和扩大背景和更改背景图片的效果如何制作呢?

2.1在说之前首先对相关图片进行取模转换,这里着重说一下,再用工具制作的时候,一定要保留图片的透明度,否则lvgl无法更改图片的背景颜色,如图所示

学新通

 2.2代码如下

lv_obj_t* obj = lv_obj_create(lv_scr_act());
    lv_obj_remove_style_all(obj);
    lv_obj_set_size(obj, LV_HOR_RES * 0.287, LV_VER_RES * 0.287);
    lv_obj_clear_flag(obj, LV_OBJ_FLAG_SCROLLABLE);

    lv_obj_align(obj, LV_ALIGN_CENTER, 0, 0);

    lv_obj_set_style_bg_opa(obj, LV_OPA_COVER, 0);
    lv_obj_set_style_width(obj, LV_HOR_RES * 0.287, 0);
    lv_obj_set_style_height(obj, LV_VER_RES * 0.287, 0);
    lv_obj_set_style_bg_color(obj, lv_color_hex(0x333333), 0);
    lv_obj_set_style_radius(obj, LV_VER_RES * 0.287, 0);
    lv_obj_t* obj1 = lv_obj_create(obj);
    lv_obj_set_size(obj1, LV_VER_RES * 0.237, LV_VER_RES * 0.237);

    lv_obj_align(obj1, LV_ALIGN_CENTER, 0, 0);

    lv_obj_set_style_bg_opa(obj1, LV_OPA_COVER, 0);
    lv_obj_set_style_bg_img_src(obj1, &img_src_good_rel, 0);
    lv_obj_set_style_bg_img_src(obj1, &img_src_good_pre, LV_STATE_PRESSED);

    lv_obj_set_style_width(obj1, LV_VER_RES * 0.26, LV_STATE_PRESSED);
    lv_obj_set_style_height(obj1, LV_VER_RES * 0.26, LV_STATE_PRESSED);
    lv_obj_set_style_bg_color(obj1, lv_color_hex(0x333333), 0);
    lv_obj_set_style_bg_color(obj1, lv_color_hex(0x48CFBD), LV_STATE_PRESSED);
    lv_obj_set_style_radius(obj1, LV_VER_RES * 0.26, 0);
    lv_obj_set_style_border_color(obj1, lv_color_hex(0x333333), 0);
    static lv_style_transition_dsc_t tran;
    static const lv_style_prop_t prop[] = { LV_STYLE_WIDTH, LV_STYLE_HEIGHT, LV_STYLE_PROP_INV };
    lv_style_transition_dsc_init(
        &tran,
        prop,
        lv_anim_path_ease_in,
        200,
        0,
        nullptr
    );
    lv_obj_set_style_transition(obj1, &tran, LV_STATE_PRESSED);
    lv_obj_set_style_transition(obj1, &tran, LV_STATE_FOCUSED);
    lv_obj_update_layout(obj1);

运行结果如下

学新通

 3.lvgl 长按时间修改

在lvgl/src/hal/lv_hal_indev.h中LV_INDEV_DEF_LONG_PRESS_TIME  宏决定长按时间

#define LV_INDEV_DEF_LONG_PRESS_TIME      2000

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgicchh
系列文章
更多 icon
同类精品
更多 icon
继续加载