环境搭建

  • RT-Thread 4.1.0

  • BSP 模拟器 simulator

  • LVGL软件包

功能

  • LVGL 画两个按钮,点击按钮,产生按钮事件

  • 按钮应用【样式】,看起来美观一点

方法

  • 按钮控件,LVGL 有官方的例程,可以直接用于按钮事件的验证

  • 路径:simulator\packages\LVGL-latest\examples\get_started\lv_example_get_started_2.c

  • 操作方法:把 lv_example_get_started_2.c 复制为: simulator\applications\lvgl\demo\lv_btn_02.c ,然后简单修改一下,添加到visual studio 2022中编译,注意修改一下头文件

相关代码

  • simulator\applications\lvgl\demo\lv_btn_02.c
#include <rtthread.h>
#include <lvgl.h>static lv_style_t style_btn;
static lv_style_t style_btn_pressed;
static lv_style_t style_btn_red;static lv_color_t darken(const lv_color_filter_dsc_t *dsc, lv_color_t color, lv_opa_t opa)
{LV_UNUSED(dsc);return lv_color_darken(color, opa);
}/* 按钮 button1 的回调函数 */
static void btn1_event_cb(lv_event_t *e)
{lv_event_code_t code = lv_event_get_code(e);lv_obj_t *btn = lv_event_get_target(e);if (code == LV_EVENT_CLICKED){rt_kprintf("%s : enter\r\n", __func__);}
}/* 按钮 button2 的回调函数 */
static void btn2_event_cb(lv_event_t *e)
{lv_event_code_t code = lv_event_get_code(e);lv_obj_t *btn = lv_event_get_target(e);if (code == LV_EVENT_CLICKED){rt_kprintf("%s : enter\r\n", __func__);}
}static void style_init(void)
{/*Create a simple button style*/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);lv_style_set_border_width(&style_btn, 2);lv_style_set_text_color(&style_btn, lv_color_black());/*Create a style for the pressed state.*Use a color filter to simply modify all colors in this state*/static lv_color_filter_dsc_t color_filter;lv_color_filter_dsc_init(&color_filter, darken);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);/*Create a red style. Change only some colors.*/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));
}/*** Create styles from scratch for buttons.*/
void lv_btn_02_init(void)
{/*Initialize the style*/style_init();/*Create a button and use the new styles*/lv_obj_t *btn1 = lv_btn_create(lv_scr_act());/* Remove the styles coming from the theme* Note that size and position are also stored as style properties* so lv_obj_remove_style_all will remove the set size and position too */lv_obj_remove_style_all(btn1);lv_obj_set_pos(btn1, 10, 10);lv_obj_set_size(btn1, 120, 50);lv_obj_add_style(btn1, &style_btn, 0);lv_obj_add_style(btn1, &style_btn_pressed, LV_STATE_PRESSED);/*Add a label to the button*/lv_obj_t *label = lv_label_create(btn1);lv_label_set_text(label, "Button");lv_obj_center(label);/*Create another button and use the red style too*/lv_obj_t *btn2 = lv_btn_create(lv_scr_act());lv_obj_remove_style_all(btn2);                      /*Remove the styles coming from the theme*/lv_obj_set_pos(btn2, 10, 80);lv_obj_set_size(btn2, 120, 50);lv_obj_add_style(btn2, &style_btn, 0);lv_obj_add_style(btn2, &style_btn_red, 0);lv_obj_add_style(btn2, &style_btn_pressed, LV_STATE_PRESSED);lv_obj_set_style_radius(btn2, LV_RADIUS_CIRCLE, 0); /*Add a local style too*/label = lv_label_create(btn2);lv_label_set_text(label, "Button 2");lv_obj_center(label);lv_obj_add_event_cb(btn1, btn1_event_cb, LV_EVENT_ALL, NULL);           /*Assign a callback to the button*/lv_obj_add_event_cb(btn2, btn2_event_cb, LV_EVENT_ALL, NULL);           /*Assign a callback to the button*/
}
  • 执行的位置可以在 : simulator\packages\LVGL-latest\env_support\rt-thread\lv_rt_thread_port.c 调用

编译与运行

  • 正常编译后,运行,发现【按钮】样式改变了

  • 通过调整按钮的样式与颜色,详细可以把按钮做的很漂亮

小结

  • 通过LVGL 官方的例程,快速搭建基于RT-Thread 模拟器 的验证环境,用于快速了熟悉LVGL的控件的使用

RT-Thread 模拟器 simulator LVGL控件:button 按钮样式相关推荐

  1. RT-Thread 模拟器 simulator LVGL控件:switch 开关按钮控件

    前言 switch button : 开关按钮控件,用的也比较多,这里熟悉下相关的操作 switch 有两个状态:开与关 环境搭建 RT-Thread 4.1.0 或最新版本 BSP 模拟器 simu ...

  2. C++ Windows窗口程序:子窗口控件之按钮类button

    Windows窗口程序设计中,按钮.文本编辑框等控件都作为一个子窗口在WM_CREATE事件中创建的.其中按钮类button有多种类型和风格,常见的单选钮.复选钮.分组框也在此类中,见下表: 子窗口控 ...

  3. Android UI 统一修改Button控件的样式,以及其它系统控件的默认样式

    先介绍下修改原理:首先打开位于android.widget包下面的Button.java文件,这里有一句关键的代码如下: public Button(Context context, Attribut ...

  4. C#窗体控件-按钮控件Button

    按钮(Button)控件几乎存在于所有Windows对话框中,是Windows应用程序中最常用的控件之一.按钮控件允许用户通过单击来执行操作.按钮最重要的事件,也是最常用的事件就是Click.当用户单 ...

  5. ESP32 开发笔记(四)LVGL控件学习 ColorPicker 颜色选择器控件

    先看效果,创建一个颜色选择器控件,设置事件回调动态显示当前选择的颜色值 开发板购买链接https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.5 ...

  6. 修改安卓默认的系统button样式,以及其它系统控件的默认样式

    先介绍下修改原理:首先打开位于android.widget包下面的Button.java文件,这里有一句关键的代码如下: public Button(Context context, Attribut ...

  7. ESP32 开发笔记(四)LVGL控件学习 Canvas 画布控件

    先看效果,创建了两个画布,一个按钮,按钮是为了演示透明画布效果, 第一个画布先画一个不透明蓝色矩形再画透明矩形,透过画布可以看到下面的按钮 第二个面布画了一个圆角矩形中间填充过渡色,再画一个字符串,然 ...

  8. ESP32 开发笔记(四)littleVGL LVGL 控件学习 Arc 弧形控件

    先看效果,创建了两个Arc 弧形控件,一个可触摸拖动的默认风格,一个动画控制的自定义风格的弧形控件 ESP-IDF版本:V4.2 littleVGL版本:V7.10.0 开发板购买链接https:// ...

  9. ESP32 开发笔记(四)LVGL控件学习 Table 表格控件

    先看效果,创建一个简单的表格 开发板购买链接https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.50111deb2Ij1As&ft= ...

最新文章

  1. java触发器如何创建表_在java 中执行触发器代码、创表语句
  2. dirty_background_ration 与 /proc/sys/vm/dirty_ratio
  3. linux关闭硬件蜂鸣器,Linux Tips: 如何关闭系统的蜂鸣器
  4. android 栏目编辑,android – 编辑文本导致内存泄漏
  5. python爬虫ppt_完全零基础 轻松学Python:数据类型:数字类型、空类型、布尔类型...
  6. 《推荐系统实战(二)》音乐推荐系统(数据清洗、召回、排序)
  7. 微型计算机主要特点有哪些,微型计算机的主要特点是什么呢?
  8. TCP拥塞控制算法内核实现剖析(一)
  9. 鸢尾花数据集的数据可视化
  10. filenet安装前置工作-总结安装一天的成果
  11. JS 获得FileUpload1 的完整路径
  12. 程序员常用字体(vs字体修改方案)
  13. git push reject : pre-receive hook declined
  14. a标签去掉下划线以及字体颜色
  15. 月入3万多的程序员回老家, 被亲戚说不如县城卖手机月入2千的表弟
  16. android语音助手 源代码,语音助理点读功能  |  Android 开源项目  |  Android Open Source Project...
  17. uniapp App更新解决方法
  18. 在安装anaconda3(自带python3.7)和自己安装的python2.7的win10系统中安装pymol
  19. 高中数学必修一函数知识点总结
  20. Linux系统概念复习

热门文章

  1. 西安80转换成北京独立计算机,关于坐标转换及坐标系(大地坐标、平面坐标、投影、北京54、西安80、WGS84)的一些理解...
  2. 【基础理论】专题1 泛化到底是什么?
  3. 3-4 3.4编程计算一元二次方程的根
  4. 基于vue-cli搭建VUE.js项目
  5. 深度学习之人脸检测网络MTCNN
  6. 【Linux 内核 内存管理】memblock 分配器编程接口 ④ ( memblock_alloc 函数 | memblock_alloc_base 函数 )
  7. Vedio.js视频播放
  8. Python随机点名神器
  9. 《程序设计基础2021》题目集2 题解一
  10. 国科大学习资料–图像处理(彭思龙、杨戈)--第四次作业