通过lvgl scroll属性lv_obj_set_scroll_snap_x实现类似移动端左滑删除商品的效果,在esp32上效果还行:
需要注意父级元素只能设置一屏大小lv_obj_set_size(ui_item, lv_pct(100), 74),通过lv_obj_set_flex_flow来实现平铺遮盖
源码如下:
lv_obj_t * ui_main = lv_obj_create(ui_page);
lv_obj_remove_style_all(ui_main);
lv_obj_set_size(ui_main, lv_pct(100), LV_SIZE_CONTENT);
lv_obj_set_y(ui_main, 76);
lv_obj_set_flex_flow(ui_main, LV_FLEX_FLOW_COLUMN);
for (size_t i = 0; i < 5; i++)
{
lv_obj_t * ui_item = lv_obj_create(ui_main);
lv_obj_remove_style_all(ui_item);
lv_obj_set_size(ui_item, lv_pct(100), 74);
lv_obj_set_flex_flow(ui_item, LV_FLEX_FLOW_ROW);
lv_obj_set_scroll_dir(ui_item, LV_DIR_HOR); // 只允许水平方向移动
lv_obj_set_scroll_snap_x(ui_item, LV_SCROLL_SNAP_END); //子对象与滚动对象的右侧对齐
lv_obj_t * ui_product = lv_obj_create(ui_item);
lv_obj_remove_style_all(ui_product);
lv_obj_set_size(ui_product, 720, 74);
lv_obj_set_style_bg_color(ui_product, lv_color_hex(0x262626), LV_PART_MAIN);
lv_obj_set_style_bg_opa(ui_product, 255, LV_PART_MAIN);
lv_obj_set_style_border_width(ui_product, 1, LV_PART_MAIN);
lv_obj_set_style_border_side(ui_product, LV_BORDER_SIDE_BOTTOM, LV_PART_MAIN);
lv_obj_set_style_border_color(ui_product, lv_color_hex(0x404040), LV_PART_MAIN);
lv_obj_set_style_border_opa(ui_product, 255, LV_PART_MAIN);
lv_obj_t * ui_del = lv_obj_create(ui_item);
lv_obj_remove_style_all(ui_del);
lv_obj_set_size(ui_del, 74, 74);
lv_obj_set_style_bg_color(ui_del, lv_color_hex(0xff3535), LV_PART_MAIN);
lv_obj_set_style_bg_opa(ui_del, 255, LV_PART_MAIN);
}