multedge控件

1. 使用场景

对于multlist滑动到边界时会触发边界请求事件,如果有edge响应该事件,并回复应答事件,multlist会将显示权交给edge,用于显示插件的内容。类似于平铺页面的侧边栏和上下拉框。通过事件交互实现edge页面与multlist页面的切换,事件逻辑以封装在multedge。

2. 功能介绍

2.1 接口说明

接口函数

功能说明

参数说明

lv_multedge_create(lv_obj_t *parent)

创建一个 multedge 控件实例

parent:待创建的 multedge 控件的父对象,返回值为创建后的 multedge 控件对象

lv_multedge_set_type(lv_obj_t *edge, lv_multlist_edge_type_t type)

设置 multedge 控件对应的边缘类型

edge:multedge 控件对象;type:边缘类型,可选 LV_EDGE_LEFT/RIGHT/TOP/BOTTOM

lv_multedge_set_check_cb(lv_obj_t *edge, lv_multedge_check_item check_cb)

设置检查回调函数,用于判断边缘交互作用于哪个列表项

edge:multedge 控件对象;check_cb:检查列表项的回调函数,入参为列表项指针,返回int型

lv_multedge_set_item_index(lv_obj_t *edge, int16_t index)

设置边缘交互作用的列表项索引

edge:multedge 控件对象;index:目标列表项的索引值

lv_multedge_set_threshold(lv_obj_t *edge, lv_coord_t start, lv_coord_t end)

设置边缘展开和收起的阈值

edge:multedge 控件对象;start:展开起始阈值;end:收起结束阈值

lv_multedge_get_state(lv_obj_t *edge)

获取当前 multedge 控件的状态

edge:multedge 控件对象;返回值为状态值,可选 LV_MULTEDGE_HIDDEN/MOVING/END/GOBACK

2.2 边界框类型

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.3 绑定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.4 设定阈值

//通过设置阈值,可以控制对齐的边界位置。
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. 注意事项

  1. 创建接口lv_multedge_create(parent)中传入的parent必须为multlist控件。

  2. 边缘类型(lv_multlist_edge_type_t)需传入合法值(LV_EDGE_LEFT/RIGHT/TOP/BOTTOM),否则可能导致交互逻辑异常。

  3. 检查回调函数(lv_multedge_check_item)的返回值需根据业务逻辑合理定义,该返回值会影响边缘与列表项的绑定关系。

  4. 阈值设置(start/end)需结合实际交互场景的坐标范围,避免设置过小/过大导致交互触发不灵敏或误触发。