multedge控件¶
1. 使用场景¶
对于multlist滑动到边界时会触发边界请求事件,如果有edge响应该事件,并回复应答事件,multlist会将显示权交给edge,用于显示插件的内容。类似于平铺页面的侧边栏和上下拉框。通过事件交互实现edge页面与multlist页面的切换,事件逻辑以封装在multedge。
2. 功能介绍¶
2.1 边界框类型¶
enum
{
LV_EDGE_NONE,
LV_EDGE_LEFT,
LV_EDGE_RIGHT,
LV_EDGE_TOP,
LV_EDGE_BOTTOM,
};
typedef uint8_t lv_multlist_edge_type_t;
//边界框主要有上下左右四种类型,通过设置不同类型,使能触发边界的条件
void lv_multedge_set_type(lv_obj_t *edge, lv_multlist_edge_type_t type);
2.2 绑定item¶
//方式1、通过设置回调函数,在回调函数里判断item是否满足触发拖拽edge的条件
void lv_multedge_set_check_cb(lv_obj_t *edge, lv_multedge_check_item check_cb);
//方式2、通过设置item的索引,判断item的索引值是否为设定的index而决定拖拽触发条件
void lv_multedge_set_item_index(lv_obj_t *edge, int16_t index);
2.3 设定阈值¶
//通过设置阈值,可以控制对齐的边界位置。
void lv_multedge_set_threshold(lv_obj_t *edge, lv_coord_t start, lv_coord_t end);
3. 案例详解¶
以平铺上下拉菜单的初始化为例
3.1 侧边栏案例¶
lv_obj_t *left_egd = lv_multedge_create(parent);
lv_obj_remove_style_all(left_egd);
lv_obj_set_size(left_egd, SIEBAR_W, LV_VER_RES_MAX);
lv_obj_align_to(left_egd, parent, LV_ALIGN_OUT_LEFT_MID, 0, 0);
lv_obj_update_layout(left_egd);
lv_obj_set_style_bg_color(left_egd, LV_COLOR_BLACK, LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(left_egd, LV_OPA_80, LV_STATE_DEFAULT);
lv_multedge_set_type(left_egd, LV_EDGE_LEFT); //设置类型为左侧
lv_multedge_set_item_index(left_egd, 0); //设置触发条件时索引值为0
lv_multedge_set_threshold(edge, -SIEBAR_W + 5, -5); //设置对齐阈值,当滑动距离超过阈值时,在页面之前切换
3.2 消息框案例¶
lv_obj_t *top_egd = lv_multedge_create(parent);
lv_obj_remove_style_all(top_egd);
lv_obj_set_size(top_egd, LV_HOR_RES_MAX, LV_VER_RES_MAX);
lv_obj_align_to(top_egd, parent, LV_ALIGN_OUT_TOP_MID, 0, 0);
lv_obj_update_layout(top_egd);
lv_obj_set_style_bg_color(top_egd, lv_color_make(50, 50, 50), LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(top_egd, 128, LV_STATE_DEFAULT);
lv_multedge_set_type(top_egd, LV_EDGE_TOP); //设置类型为顶部
lv_multedge_set_check_cb(top_egd, tlv_item_is_wf); //设置触发回调函数
//触发回调函数,返回true:表示触发edge滑动显示,false:保持不动
int shortcut_check_item(lv_multlist_item_t *item)
{
return !tlv_item_is_wf(item);
}
4. 注意事项¶
无