变量定义
static lv_style_t style_radio;
static lv_style_t style_radio_chk;
static uint32_t active_index_1 = 0;
static uint32_t active_index_2 = 0;
事件处理回调函数
static void radio_event_handler(lv_event_t* e)
{
uint32_t* active_id = lv_event_get_user_data(e); //获取用户数据
lv_obj_t* cont = lv_event_get_current_target(e); // 获取当前目标事件的布局对象
lv_obj_t* act_cb = lv_event_get_target(e);//获取产生事件的对象
lv_obj_t* old_cb = lv_obj_get_child(cont, *active_id); //根据id序号获取子对象
/*Do nothing if the container was clicked*/
if (act_cb == cont) return; //不处理layout布局对象产生的事件
lv_obj_clear_state(old_cb, LV_STATE_CHECKED); //清除先前的选择状态
lv_obj_add_state(act_cb, LV_STATE_CHECKED); // 设置点击的对象为选中状态
*active_id = lv_obj_get_index(act_cb); //获取选中对象的id序号并保存在active_id所指向的内存中
LV_LOG_USER("Selected radio buttons: %d, %d", (int)active_index_1, (int)active_index_2); //打印active_index_1,active_index_2
}
radio创建
static void radiobutton_create(lv_obj_t* parent, const char* txt)
{
lv_obj_t* obj = lv_checkbox_create(parent); //在parent对象上创建checkbox对象
lv_checkbox_set_text(obj, txt); // 设置文本为txt指针中的内容
lv_obj_add_flag(obj, LV_OBJ_FLAG_EVENT_BUBBLE); // 添加LV_OBJ_FLAG_EVENT_BUBBLE标志
lv_obj_add_style(obj, &style_radio, LV_PART_INDICATOR); //obj对象的LV_PART_INDICATO属性部分使用style_radio
lv_obj_add_style(obj, &style_radio_chk, LV_PART_INDICATOR | LV_STATE_CHECKED); // obj对象的LV_PART_INDICATO和LV_STATE_CHECKED属性部分使用style_radio_chk
}
Checkboxes as radio buttons
/**
* Checkboxes as radio buttons
*/
static void lv_example_checkbox_2(void)
{
/* The idea is to enable `LV_OBJ_FLAG_EVENT_BUBBLE` on checkboxes and process the
* `LV_EVENT_CLICKED` on the container.
* A variable is passed as event user data where the index of the active
* radiobutton is saved */
lv_style_init(&style_radio); //初时化style_radio
lv_style_set_radius(&style_radio, LV_RADIUS_CIRCLE); //设置倒角为圆形
lv_style_init(&style_radio_chk); //初时化style_radio_chk
lv_style_set_bg_img_src(&style_radio_chk, NULL); //设置背景图标资源为NULL
uint32_t i;
char buf[32];
lv_obj_t* cont1 = lv_obj_create(lv_scr_act()); //创建对象用于layout
lv_obj_set_flex_flow(cont1, LV_FLEX_FLOW_COLUMN);//设置布局为LV_FLEX_FLOW_COLUMN方式
lv_obj_set_size(cont1, lv_pct(40), lv_pct(80)); //设置大小
lv_obj_add_event_cb(cont1, radio_event_handler, LV_EVENT_CLICKED, &active_index_1); // 添加LV_EVENT_CLICKED事件,用户自定义数据为active_index_1
for (i = 0; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?