【LVGL 学习】进度条(BAR)控件学习

这篇具有很好参考价值的文章主要介绍了【LVGL 学习】进度条(BAR)控件学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概述

1.1 Bar 简介

Bar 控件由一个背景和一个指示器组成,进度条会根据宽度和高度的大小自动选择是水平进度条还是垂直进度条,比如 Bar 的宽度小于其高度,则创建垂直进度条。
lvgl 进度条,学习

二、Bar 基础知识

2.1 Bar 样式
lvgl 进度条,学习
Bar 的样式部分按照其组成分类,LV_PART_MAIN 对应背景部分的皮肤,它使用典型的背景样式属性,填充属性使指标器变小或变大。如果启用动画 LV_ANIM_ON,anim_time 样式属性设置填充动画的时间。LV_PART_INDICATOR 对应指标器本身,也使用所有典型的背景属性。

2.2 Bar 的范围 & 进度值

可以通过函数 lv_bar_set_value ( bar, new_value, LV_ANIM_ON /OFF ) 设置新的进度值,最后一个参数 ( LV_ANIM_ON / OFF ) 设置启用动画设置新的进度值。整个进度条值的范围(最小值和最大值)可以通过函数 lv_bar_set_range ( bar, min, max ) 修改,默认范围是 0 - 100。进度值要在所设置的进度条的范围(最小值和最大值)以内。

2.3 Bar 的模式

  • LV_BAR_MODE_NORMAL 如上所述的普通进度条。

lvgl 进度条,学习

  • LV_BAR_MODE_SYMMETRICAL 将指标器从零值绘制到当前值,需要负的最小范围和正的最大范围。

lvgl 进度条,学习

  • LV_BAR_MODE_RANGE 也允许通过函数 lv_bar_set_start_value ( bar, new_value, LV_ANIM_ON / OFF ) 设置起始值,起始值必须始终小于结束值。

lvgl 进度条,学习

测试示例使用LVGL8.3,开发环境:VS2019

以下是设置控件所需常用的API接口函数

/**
    功能:创建进度条对象
    返回:指向创建的进度条的指针
    形参:
    parent:指向对象的指针,它将是新进度条的父对象,一般是NULL(默认当前屏幕),或者lv_scr_act()
 */
lv_obj_t * lv_bar_create(lv_obj_t * parent);
/**
    功能:设置进度条的最大最小值
    返回:无
    形参:
    obj:指向进度条的指针
    min:最小值
    max:最大值
 */
void lv_bar_set_range(lv_obj_t * obj, int32_t min, int32_t max);
/**
    功能:设置进度条的值,(不设置 lv_bar_set_start_value 函数默认开始都是0开始)
    返回:无
    形参:
    obj	 :指向进度条的指针
    value:设置进度条的新值
    anim :设置是否带有动画 LV_ANIM_OFF | LV_ANIM_ON 需要其它动画相关函数关联
 */
void lv_bar_set_value(lv_obj_t * obj, int32_t value, lv_anim_enable_t anim);
/**
    功能:设置开始进度条的值,和( lv_bar_set_value )函数配合使用,不能单独使用
    返回:无
    形参:
    obj	 :指向进度条的指针
    value:设置进度条的开始的新值
    anim :设置是否带有动画 LV_ANIM_OFF | LV_ANIM_ON 需要其它动画相关函数关联
 */
void lv_bar_set_start_value(lv_obj_t * obj, int32_t start_value, lv_anim_enable_t anim);

测试示例1:

void bar_demo(void)
{
    lv_obj_t* bar = lv_bar_create(lv_scr_act());            //创建一个进度条控件
    lv_obj_set_size(bar, 200, 20);                          //设置进度条控件的大小
    lv_obj_center(bar);                                     //将进度条控件放入到父对象(屏幕)的中心位置

    lv_bar_set_range(bar, 0, 100);                         //设置进度条的设置范围大小

    /*
        功能:设置进度条默认值显示
        参数1:进度条控件指针
        参数2:设置进度条当前的值
        参数3:设置是否带有动画 LV_ANIM_OFF | LV_ANIM_ON
    */
    lv_bar_set_value(bar, 50, LV_ANIM_ON);                 //设置进度条默认值显示
}

测试示例2:

static void set_value(void* bar, int32_t v)
{
    lv_bar_set_start_value(bar, 50 - (v - 50), LV_ANIM_OFF);
    lv_bar_set_value(bar, v, LV_ANIM_OFF);
}
/**
 * Example of styling the bar
 */
void lv_example_bar_2(void)
{
    static lv_style_t style_bg;
    static lv_style_t style_indic;

    lv_style_init(&style_bg);
    lv_style_set_border_color(&style_bg, lv_palette_main(LV_PALETTE_BLUE));
    lv_style_set_border_width(&style_bg, 2);
    lv_style_set_border_opa(&style_bg, LV_OPA_TRANSP);
    lv_style_set_pad_all(&style_bg, 6); /*To make the indicator smaller*/
    lv_style_set_radius(&style_bg, 6);
    lv_style_set_anim_time(&style_bg, 1000);

    lv_style_init(&style_indic);
    lv_style_set_bg_opa(&style_indic, LV_OPA_COVER);
    lv_style_set_bg_color(&style_indic, lv_palette_main(LV_PALETTE_BLUE));
    lv_style_set_radius(&style_indic, 3);

    lv_obj_t * bar = lv_bar_create(lv_scr_act());
    lv_obj_remove_style_all(bar); 
    lv_obj_add_style(bar, &style_bg, 0);
    lv_obj_add_style(bar, &style_indic, LV_PART_INDICATOR);

    lv_obj_set_size(bar, 200, 20);
    lv_obj_center(bar);
    lv_bar_set_range(bar, 0, 100);

    lv_bar_set_mode(bar, LV_BAR_MODE_RANGE);
    lv_bar_set_value(bar, 50, LV_ANIM_OFF);
    lv_bar_set_start_value(bar, 50, LV_ANIM_OFF);

    lv_anim_t a;
    lv_anim_init(&a);
    lv_anim_set_var(&a, bar);
    lv_anim_set_values(&a, 50, 100);
    lv_anim_set_exec_cb(&a, set_value);
    lv_anim_set_time(&a, 2000);
    //lv_anim_set_playback_time(&a, 2000);
    lv_anim_set_repeat_count(&a, 0);
    lv_anim_start(&a);
}

lvgl 进度条,学习文章来源地址https://www.toymoban.com/news/detail-561801.html

到了这里,关于【LVGL 学习】进度条(BAR)控件学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 合宙Air724UG LuatOS-Air LVGL API控件-标签 (Label)

    标签 (Label) 标签是 LVGL 用来显示文字的控件。 标签是通过  lvgl.label_create  函数创建的。 可以使用  lvgl.label_set_text  设置标签上的文字显示内容。 标签是有宽度的,默认情况下,在设置文字后会自行调整,标签宽度会自动扩充到文本宽度。但是这种显示方式是可以进行更改

    2024年02月09日
    浏览(47)
  • 合宙Air724UG LuatOS-Air LVGL API控件--日历 (Calendar)

    日历 (Calendar) LVGL 提供了一个用来选择和显示当前日期的日历控件。 示例代码 – 高亮显示的日期 highlightDate = lvgl.calendar_date_t() – 日历点击的回调函数 – 将点击日期设置高亮 function event_handler(obj, event) if event == lvgl.EVENT_VALUE_CHANGED then date = lvgl.calendar_get_pressed_date(obj) if date

    2024年02月10日
    浏览(46)
  • 合宙Air724UG LuatOS-Air LVGL API控件-页面 (Page)

    页面 (Page) 当控件内容过多,无法在屏幕内完整显示时,可让其在  页面  内显示。 通过函数  lvgl.page_create  可以创建一个页面 页面对象可以像容器一样设置各个方向上的匹配模式,可以把需要显示的对象添加进页面进行显示,页面可以作为控件的父容器。就像下面这样,

    2024年02月09日
    浏览(54)
  • 合宙Air724UG LuatOS-Air LVGL API控件-图片(Gif)

    图片(Gif) GIF图片显示,core版本号要=3211 方法一 方法二 lvgl.gif_create 调用 lvgl.gif_create(par) 功能 创建一个GIF图片对象 返回 指向GIF图片对象的指针 参数 par 指向对象的指针, 它将是新键对象的父对象 lvgl.gif_set_src 调用 lvgl.img_set_src(gif, data) 功能 设置GIF图片控件的显示内容 参数

    2024年02月07日
    浏览(46)
  • 合宙Air724UG LuatOS-Air LVGL API控件--曲线 (Arc)

    曲线 (Arc) 曲线控件,也可以称为弧。因为 Arc 本身就是弧,弧形的意思。根据控件的样子也能推测出它的使用场景,一般用在加载器(就是等待界面转的圈圈)或者数值显示,数值调节这些场景。曲线控件分了两个部分,前景和背景,都可以分别进行设置。 示例代码 – 创建曲

    2024年02月11日
    浏览(54)
  • 合宙Air724UG LuatOS-Air LVGL API控件-截屏(Screenshots)

    截屏(Screenshots) 分 享导出pdf 截屏功能,core版本号要=3211 disp.screenshots 调用 disp.screenshots(name, x1, x2, y1, y2) 功能 截取显示屏指定区域图片 返回 0/-1 成功/失败 参数 name 文件路径名只支持bmp x1 水平初始值MIPI屏(0-479)/LCD屏(0-239) x2 水平结束值MIPI屏(x1-479)/LCD屏(x1-239)

    2024年02月07日
    浏览(40)
  • 合宙Air724UG LuatOS-Air LVGL API控件-键盘 (Keyboard)

    键盘 (Keyboard) LVGL 可以添加触摸键盘,但是很明显,使用触摸键盘的话必须要使用触摸的输入方式,否则无法驱动键盘。 通过  keyboard_create  可以创建键盘,实际上只要这一句就可在界面上显示键盘了。很难得的是,键盘没有复制对象, lvgl.keyboard_create  只需要传入一个参数

    2024年02月09日
    浏览(36)
  • 合宙Air724UG LuatOS-Air LVGL API控件--容器 (Container)

    容器 (Container) 容器是 lvgl 相当重要的一个控件了,可以设置布局,容器的大小也会自动进行调整,利用容器可以创建出自适应成都很高的界面布局。 代码示例 – 创建容器 cont = lvgl.cont_create(lvgl.scr_act(), nil) lvgl.obj_set_auto_realign(cont, true) lvgl.obj_align(cont, nil, lvgl.ALIGN_CENTER, 0, 0)

    2024年02月10日
    浏览(37)
  • 合宙Air724UG LuatOS-Air LVGL API控件--按钮 (Button)

    按钮 (Button) 按钮控件,这个就不用多说了,界面的基础控件之一。 示例代码 – 按键回调函数 event_handler = function(obj, event) if event == lvgl.EVENT_CLICKED then print(“Clickedn”) elseif event == lvgl.EVENT_VALUE_CHANGED then print(“Toggledn”) end end – 按键1 btn1 = lvgl.btn_create(lvgl.scr_act(), nil) lvgl.o

    2024年02月11日
    浏览(42)
  • 合宙Air724UG LuatOS-Air LVGL API控件-窗口 (Window)

    窗口 (Window) 分 享导出pdf | lvgl.win_create 调用 lvgl.win_create(par, copy) 功能 创建一个窗口对象 返回 指向创建的窗口的指针 参数 par 指向对象的指针, 它将是新键对象的父对象 copy 指向窗口对象的指针, 如果不为 nil, 则将从其复制新对象 lvgl.win_clean 调用 lvgl.win_clean(win) 功能 清除窗口

    2024年02月09日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包