imgbtn的相关API - lightdong/LVGL_Study GitHub Wiki

IMGBTN_TEST/图片按钮的测试/ /part : main/

/*创建一个图片按钮,并设置按下与松开的两种状态*/
lv_obj_t *imgbtn1= lv_imgbtn_create(lv_scr_act());
/*设置高度、宽度时与图片的大小一样就可以,在下面设置时传递给中间就可以*/
lv_obj_set_size(imgbtn1,AC_off.header.w,AC_off.header.h);

/如果要使用回调函数的话要添加下面的两种状态/

lv_imgbtn_set_src(imgbtn1,LV_IMGBTN_STATE_RELEASED,NULL,&conditioner_off,NULL);
lv_imgbtn_set_src(imgbtn1,LV_IMGBTN_STATE_PRESSED,NULL,&conditioner_on,NULL);

/按一下就锁定为某一个状态,需要使用其他的函数,但是需要开启一种状态/

//    lv_obj_add_flag(imgbtn1,LV_OBJ_FLAG_CHECKABLE);
//    lv_imgbtn_set_src(imgbtn1,LV_IMGBTN_STATE_CHECKED_RELEASED,NULL,&airc_off,NULL);
//    lv_imgbtn_set_src(imgbtn1,LV_IMGBTN_STATE_CHECKED_PRESSED,NULL,&airc_on,NULL);

/解决初始没有显示的问题/

lv_imgbtn_set_state(imgbtn1,LV_IMGBTN_STATE_CHECKED_RELEASED);

/通过回调函数来切换颜色/

lv_obj_add_event_cb(imgbtn1,imgbtn1_cb,LV_EVENT_CLICKED,NULL);

/图片按钮的回调函数/

static void imgbtn1_cb(lv_event_t *e){
    /*加上static就会放到堆里且这个变量只能被这个函数所调用,所以这样就可以避免只能触发一次颜色改变的情况*/
    static char flag = 1;
    lv_event_code_t code = lv_event_get_code(e);
    lv_obj_t *target = lv_event_get_target(e);
//    if(lv_obj_has_state(target,LV_STATE_CHECKED)){
    if(code == LV_EVENT_CLICKED){
        if(flag == 1){
            lv_obj_set_style_img_recolor(target,lv_color_hex(0x0000ff),LV_STATE_DEFAULT | LV_PART_MAIN);
            lv_obj_set_style_img_recolor_opa(target,255,LV_STATE_DEFAULT | LV_PART_MAIN);
            flag = 0;
        }else if(flag == 0){
            lv_obj_set_style_img_recolor_opa(target,0,LV_STATE_DEFAULT | LV_PART_MAIN);
            flag = 1;
        }
    }
}