• 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,编译运行
    在这里插入图片描述
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐