lvgl v8之Snapping
switch开关事件处理函数static void sw_event_cb(lv_event_t* e){lv_event_code_t code = lv_event_get_code(e); // 获取事件codelv_obj_t* sw = lv_event_get_target(e);//获取目标事件对象if (code == LV_EVENT_VALUE_CHANGED) {//值改变事
·
- switch开关事件处理函数
static void sw_event_cb(lv_event_t* e)
{
lv_event_code_t code = lv_event_get_code(e); // 获取事件code
lv_obj_t* sw = lv_event_get_target(e); //获取目标事件对象
if (code == LV_EVENT_VALUE_CHANGED) { //值改变事件
lv_obj_t* list = lv_event_get_user_data(e); //获取事件用户数据
if (lv_obj_has_state(sw, LV_STATE_CHECKED))
lv_obj_add_flag(list, LV_OBJ_FLAG_SCROLL_ONE); // 开启滚动一屏功能
else
lv_obj_clear_flag(list, LV_OBJ_FLAG_SCROLL_ONE);// 关闭滚动一屏功能
}
}
- 创建scroll snap
/**
* Show an example to scroll snap
*/
static void lv_example_scroll_2(void)
{
lv_obj_t* panel = lv_obj_create(lv_scr_act()); //创建当前活动界面对象
lv_obj_set_size(panel, 280, 120); // 设置大小
lv_obj_set_scroll_snap_x(panel, LV_SCROLL_SNAP_CENTER); //设置x方向滚动snap特性
lv_obj_set_flex_flow(panel, LV_FLEX_FLOW_ROW); // 设置LV_FLEX_FLOW_ROW方式
lv_obj_align(panel, LV_ALIGN_CENTER, 0, 20); /x居中,y居中向下20像素对齐
uint32_t i;
for (i = 0; i < 10; i++) {
lv_obj_t* btn = lv_btn_create(panel); // 创建button对象
lv_obj_set_size(btn, 150,lv_pct(100)); //设置大小
lv_obj_t* label = lv_label_create(btn); //创建label
if (i == 3) {
lv_label_set_text_fmt(label, "Panel %d\nno snap", i); //设置文字内容
lv_obj_clear_flag(btn, LV_OBJ_FLAG_SNAPPABLE); //清除snap特性
}
else {
lv_label_set_text_fmt(label, "Panel %d", i); //设置文字内容
}
lv_obj_center(label); //居中显示
}
lv_obj_update_snap(panel, LV_ANIM_ON); //开启snap动画
#if LV_USE_SWITCH
/*Switch between "One scroll" and "Normal scroll" mode*/
lv_obj_t* sw = lv_switch_create(lv_scr_act()); // 创建switch对象
lv_obj_align(sw, LV_ALIGN_TOP_RIGHT, -20, 10); // 顶部右对齐
lv_obj_add_event_cb(sw, sw_event_cb, LV_EVENT_ALL, panel); // 开关事件设置
lv_obj_t* label = lv_label_create(lv_scr_act()); // 创建label
lv_label_set_text(label, "One scroll"); // 显示文字
lv_obj_align_to(label, sw, LV_ALIGN_OUT_BOTTOM_MID, 0, 5);// 对齐到switch开关
#endif
}
- 调用lv_example_scroll_2,编译运行
更多推荐
已为社区贡献6条内容
所有评论(0)