lvgl 使用demo 按钮表格,圆,arc的使用

实现效果

 

 代码

    #define OBJ_PARENT_WIDTH 970
    #define OBJ_PARENT_HEIGH 446
    #define OBJ_BTN_WIDTH 150
    #define OBJ_BTN_HEIGH 50
    #define OBJ_BTN_POS_X 120
    #define OBJ_BTN_POS_Y 40
    #define OBJ_ITEM_WIDTH 420
    #define OBJ_ITEM_HEIGH 50 
    #define OBJ_TABLE_HEIGH 60 
    #define OBJ_ITEM_STEP 60 
    #define OBJ_COLOR_BG_MAIN 0xfff2f2f2
    #define OBJ_COLOR_FONT_DEFAULT 0xFF2E2E2E
    #define OBJ_COLOR_FONT_BLUE 0xFF3B90F4
    #define OBJ_COLOR_FONT_GRAY 0xFFB3B3B3

    lv_obj_t* obj_p = lv_obj_create(appObjUiParent);
    lv_obj_center(obj_p);
    lv_obj_set_size(obj_p,OBJ_PARENT_WIDTH,OBJ_PARENT_HEIGH);
    lv_obj_set_style_border_width(obj_p,0,LV_STATE_DEFAULT);
    lv_obj_set_style_bg_color(obj_p,lv_color_hex(OBJ_COLOR_BG_MAIN),LV_STATE_DEFAULT);
    lv_obj_set_style_pad_all(obj_p,0,LV_STATE_DEFAULT);
    lv_obj_set_style_text_font(obj_p, &lv_font_montserrat_24, LV_STATE_DEFAULT); //设置字体大小
    lv_obj_set_style_text_color(obj_p,lv_color_hex(OBJ_COLOR_FONT_DEFAULT),LV_STATE_DEFAULT);


    // 创建两个obj 左右各一个,使用btn按钮作为基座,上面label左右对齐
    lv_obj_t * obj_left_face = lv_obj_create(obj_p);
    lv_obj_align(obj_left_face,LV_ALIGN_LEFT_MID,0,0);
    lv_obj_set_size(obj_left_face, OBJ_PARENT_WIDTH/2, OBJ_PARENT_HEIGH);
    // lv_obj_set_style_bg_color(obj_left_face,lv_color_hex(0xfff2f200),LV_STATE_DEFAULT);
    lv_obj_set_style_bg_opa(obj_left_face,LV_OPA_TRANSP,LV_STATE_DEFAULT);
    lv_obj_set_style_border_width(obj_left_face,0,LV_STATE_DEFAULT);
    lv_obj_set_style_pad_all(obj_left_face,0,LV_STATE_DEFAULT);
    lv_obj_set_style_outline_width(obj_left_face,0,LV_STATE_DEFAULT);

    // 摄像头
    if(1){
        // canvas
        #define CAMERA_SHOW_WIDTH 240
        #define CAMERA_SHOW_HEIGH 240
        static unsigned char bufCameraBigCanvas[CAMERA_SHOW_WIDTH*CAMERA_SHOW_HEIGH*4];

        lv_obj_t* appObj_canvas_p=lv_obj_create(obj_left_face);
        lv_obj_set_size(appObj_canvas_p,CAMERA_SHOW_WIDTH+50, CAMERA_SHOW_HEIGH+50);
        lv_obj_set_style_bg_opa(appObj_canvas_p,LV_OPA_0,LV_STATE_DEFAULT);
        lv_obj_set_style_border_width(appObj_canvas_p,0,LV_STATE_DEFAULT);
        lv_obj_set_style_radius(appObj_canvas_p,0,LV_STATE_DEFAULT);
        lv_obj_set_style_outline_width(appObj_canvas_p,0,LV_STATE_DEFAULT);
        lv_obj_align(appObj_canvas_p, LV_ALIGN_TOP_MID, 0, 0);
        
        // CANVAS
        lv_obj_t* appObjCamera = lv_canvas_create(appObj_canvas_p);//lv_scr_act()
        lv_obj_align(appObjCamera, LV_ALIGN_CENTER, 0, 0);
        lv_obj_set_size(appObjCamera,CAMERA_SHOW_WIDTH, CAMERA_SHOW_HEIGH);
        lv_obj_set_style_radius(appObjCamera,CAMERA_SHOW_WIDTH/2,LV_STATE_DEFAULT);
        lv_obj_set_style_border_color(appObjCamera,lv_color_hex(0xffffffff),LV_STATE_DEFAULT);
        lv_obj_set_style_border_width(appObjCamera,0,LV_STATE_DEFAULT);

        lv_canvas_set_buffer(appObjCamera, bufCameraBigCanvas, CAMERA_SHOW_WIDTH, CAMERA_SHOW_HEIGH, LV_IMG_CF_TRUE_COLOR_ALPHA);mydebug;
        // lv_canvas_copy_buf(appObjCamera,bufCameraBigCanvas,0,0,CAMERA_SHOW_WIDTH, CAMERA_SHOW_HEIGH);mydebug;
        // lv_obj_invalidate(appObjCamera);// 主动触发重绘指令

        lv_obj_t* appObj_p2=lv_obj_create(appObj_canvas_p);
        lv_obj_set_size(appObj_p2,CAMERA_SHOW_WIDTH+4, CAMERA_SHOW_HEIGH+4);
        lv_obj_set_style_border_width(appObj_p2,4,LV_STATE_DEFAULT);
        lv_obj_set_style_radius(appObj_p2,CAMERA_SHOW_WIDTH/2+2,LV_STATE_DEFAULT);
        lv_obj_set_style_border_color(appObj_p2,lv_color_hex(0xffffffff),LV_STATE_DEFAULT);
        lv_obj_set_style_bg_opa(appObj_p2,LV_OPA_0,LV_STATE_DEFAULT);
        lv_obj_align(appObj_p2, LV_ALIGN_CENTER, 0, 0);
    }
    // 弹窗,按钮
    if(1){
        // 中间弹窗 // xxx:录入中,录入成功,录入超时,录入失败  ---:--
        lv_obj_t* obj_left_face_state=lv_label_create(obj_left_face);
        lv_obj_align(obj_left_face_state, LV_ALIGN_TOP_MID, 0, 290);
        lv_label_set_text(obj_left_face_state,"---:--");
        lv_obj_set_style_text_color(obj_left_face_state,lv_color_hex(OBJ_COLOR_FONT_GRAY),LV_STATE_DEFAULT);
        // 左侧按钮
        lv_obj_t* obj_left_face_btn_l=lv_btn_create(obj_left_face);
        lv_obj_set_size(obj_left_face_btn_l,OBJ_BTN_WIDTH,OBJ_BTN_HEIGH);
        lv_obj_t* obj_left_face_btn_l_text=lv_label_create(obj_left_face_btn_l);
        lv_obj_center(obj_left_face_btn_l_text);
        lv_label_set_text(obj_left_face_btn_l_text,"btn1");
        lv_obj_align(obj_left_face_btn_l, LV_ALIGN_BOTTOM_MID, -OBJ_BTN_POS_X, -OBJ_BTN_POS_Y);
        // 右侧按钮
        lv_obj_t* obj_left_face_btn_r=lv_btn_create(obj_left_face);
        lv_obj_set_size(obj_left_face_btn_r,OBJ_BTN_WIDTH,OBJ_BTN_HEIGH);
        lv_obj_t* obj_left_face_btn_r_text=lv_label_create(obj_left_face_btn_r);
        lv_obj_center(obj_left_face_btn_r_text);
        lv_label_set_text(obj_left_face_btn_r_text,"btn2");
        lv_obj_align(obj_left_face_btn_r, LV_ALIGN_BOTTOM_MID, OBJ_BTN_POS_X, -OBJ_BTN_POS_Y);

        // 下划线 新增记录
        if(1){
            lv_obj_t* obj_left=lv_label_create(obj_left_face);
            lv_obj_align(obj_left,LV_ALIGN_BOTTOM_MID,0,-5);
            lv_label_set_text(obj_left,"new record");
            // lv_obj_set_style_text_decor(obj_left,LV_TEXT_DECOR_UNDERLINE,LV_STATE_DEFAULT);// 文字下划线
            lv_obj_set_style_text_font(obj_left, &lv_font_montserrat_20, LV_STATE_DEFAULT); //设置字体大小
            lv_obj_set_style_text_color(obj_left,lv_color_hex(OBJ_COLOR_FONT_DEFAULT),LV_STATE_DEFAULT);

            lv_obj_t * obj_left_1 = lv_btn_create(obj_left_face);
            lv_obj_set_size(obj_left_1, OBJ_BTN_WIDTH, 30);
            lv_obj_align(obj_left_1,LV_ALIGN_BOTTOM_MID,0,-5);
            lv_obj_set_style_bg_opa(obj_left_1,LV_OPA_TRANSP,LV_STATE_DEFAULT);
            lv_obj_set_style_border_width(obj_left_1,2,LV_STATE_DEFAULT);
            lv_obj_set_style_border_color(obj_left_1,lv_color_hex(0xFFD9D9D9),LV_STATE_DEFAULT);
            lv_obj_set_style_border_side(obj_left_1,LV_BORDER_SIDE_BOTTOM,LV_STATE_DEFAULT);//边框
            lv_obj_set_style_pad_all(obj_left_1,0,LV_STATE_DEFAULT);
            lv_obj_set_style_outline_width(obj_left_1,0,LV_STATE_DEFAULT);
            lv_obj_set_style_radius(obj_left_1,0,LV_STATE_DEFAULT);
            lv_obj_set_style_shadow_ofs_x(obj_left_1,0,LV_STATE_DEFAULT);
            lv_obj_set_style_shadow_ofs_y(obj_left_1,0,LV_STATE_DEFAULT);
            lv_obj_set_style_shadow_width(obj_left_1,0,LV_STATE_DEFAULT);
        }
    }
    //lv_obj_add_flag(obj_left_face,LV_OBJ_FLAG_HIDDEN);

    lv_obj_t * obj_left_info = lv_obj_create(obj_p);
    lv_obj_align(obj_left_info,LV_ALIGN_LEFT_MID,0,0);
    lv_obj_set_size(obj_left_info, OBJ_PARENT_WIDTH/2, OBJ_PARENT_HEIGH);
    lv_obj_set_style_bg_opa(obj_left_info,LV_OPA_TRANSP,LV_STATE_DEFAULT);
    lv_obj_set_style_border_width(obj_left_info,0,LV_STATE_DEFAULT);
    lv_obj_set_style_pad_all(obj_left_info,0,LV_STATE_DEFAULT);
    lv_obj_set_style_outline_width(obj_left_info,0,LV_STATE_DEFAULT);
    if(1){

        // 姓名
        lv_obj_t* obj_left_0=lv_label_create(obj_left_info);
        lv_obj_align(obj_left_0, LV_ALIGN_TOP_MID, 0, 12);
        lv_obj_set_style_text_font(obj_left_0, &lv_font_montserrat_28, LV_STATE_DEFAULT); //设置字体大小
        lv_label_set_text(obj_left_0,"namexxx");
        lv_obj_set_style_text_color(obj_left_0,lv_color_hex(OBJ_COLOR_FONT_BLUE),LV_STATE_DEFAULT);

        char* info[]={
            "tel","18531231298",
            "id","411325199505050578",
            "driver date","2050-05-05",
            "auth date","2050-05-05"
        };
        // tel
        for(int i=0;i<4;i++){
            lv_obj_t * obj_left_1 = lv_obj_create(obj_left_info);
            lv_obj_set_size(obj_left_1, OBJ_ITEM_WIDTH, OBJ_ITEM_HEIGH);
            lv_obj_align(obj_left_1,LV_ALIGN_TOP_MID,0,OBJ_ITEM_STEP*(i+1));
            lv_obj_set_style_bg_color(obj_left_1,lv_color_hex(0xFFD9D9D9),LV_STATE_DEFAULT);
            lv_obj_set_style_border_width(obj_left_1,0,LV_STATE_DEFAULT);
            lv_obj_set_style_pad_all(obj_left_1,0,LV_STATE_DEFAULT);
            lv_obj_set_style_outline_width(obj_left_1,0,LV_STATE_DEFAULT);

            lv_obj_t* obj_left=lv_label_create(obj_left_1);
            lv_obj_align(obj_left, LV_ALIGN_LEFT_MID, 10, 0);
            lv_label_set_text(obj_left,info[2*i+0]);

            lv_obj_t* obj_right=lv_label_create(obj_left_1);
            lv_obj_align(obj_right, LV_ALIGN_RIGHT_MID, -10, 0);
            lv_obj_set_style_text_font(obj_right, &lv_font_montserrat_20, LV_STATE_DEFAULT); //设置字体大小
            lv_obj_set_style_text_color(obj_right,lv_color_hex(OBJ_COLOR_FONT_GRAY),LV_STATE_DEFAULT);
            lv_label_set_text(obj_right,info[2*i+1]);
        }

        // 左侧按钮
        lv_obj_t* obj_left_face_btn_l=lv_btn_create(obj_left_info);
        lv_obj_set_size(obj_left_face_btn_l,OBJ_BTN_WIDTH,OBJ_BTN_HEIGH);
        lv_obj_t* obj_left_face_btn_l_text=lv_label_create(obj_left_face_btn_l);
        lv_obj_center(obj_left_face_btn_l_text);
        lv_label_set_text(obj_left_face_btn_l_text,"btn3");
        lv_obj_align(obj_left_face_btn_l, LV_ALIGN_BOTTOM_MID, -OBJ_BTN_POS_X, -OBJ_BTN_POS_Y);
        // 右侧按钮
        lv_obj_t* obj_left_face_btn_r=lv_btn_create(obj_left_info);
        lv_obj_set_size(obj_left_face_btn_r,OBJ_BTN_WIDTH,OBJ_BTN_HEIGH);
        lv_obj_t* obj_left_face_btn_r_text=lv_label_create(obj_left_face_btn_r);
        lv_obj_center(obj_left_face_btn_r_text);
        lv_label_set_text(obj_left_face_btn_r_text,"btn4");
        lv_obj_align(obj_left_face_btn_r, LV_ALIGN_BOTTOM_MID, OBJ_BTN_POS_X, -OBJ_BTN_POS_Y);
        
        lv_obj_add_event_cb(obj_left_face_btn_r, my_cb_text_handle, LV_EVENT_CLICKED,obj_left_info);
    }


    lv_obj_t * obj_right = lv_obj_create(obj_p);
    lv_obj_set_size(obj_right, OBJ_PARENT_WIDTH/2, OBJ_PARENT_HEIGH);
    // lv_obj_set_style_bg_color(obj_right,lv_color_hex(0xff00f2f2),LV_STATE_DEFAULT);
    lv_obj_set_style_bg_opa(obj_right,LV_OPA_TRANSP,LV_STATE_DEFAULT);
    lv_obj_align(obj_right,LV_ALIGN_RIGHT_MID,0,0);
    lv_obj_set_style_border_width(obj_right,0,LV_STATE_DEFAULT);
    lv_obj_set_style_pad_all(obj_right,0,LV_STATE_DEFAULT);
    lv_obj_set_style_outline_width(obj_right,0,LV_STATE_DEFAULT);
    if(1){
        lv_obj_t * obj_left_1 = lv_obj_create(obj_right);
        lv_obj_set_size(obj_left_1, OBJ_PARENT_WIDTH/2-10, OBJ_TABLE_HEIGH);
        lv_obj_align(obj_left_1,LV_ALIGN_TOP_LEFT,0,0);
        lv_obj_set_style_bg_opa(obj_left_1,LV_OPA_TRANSP,LV_STATE_DEFAULT);
        lv_obj_set_style_border_width(obj_left_1,1,LV_STATE_DEFAULT);
        lv_obj_set_style_border_color(obj_left_1,lv_color_hex(0xFFD9D9D9),LV_STATE_DEFAULT);
        lv_obj_set_style_border_side(obj_left_1,LV_BORDER_SIDE_LEFT|LV_BORDER_SIDE_BOTTOM,LV_STATE_DEFAULT);
        lv_obj_set_style_pad_all(obj_left_1,0,LV_STATE_DEFAULT);
        lv_obj_set_style_outline_width(obj_left_1,0,LV_STATE_DEFAULT);
        lv_obj_set_style_radius(obj_left_1,1,LV_STATE_DEFAULT);
        
        lv_obj_t* obj_left_0=lv_label_create(obj_left_1);
        lv_obj_align(obj_left_0, LV_ALIGN_CENTER, 0, 0);
        lv_obj_set_style_text_font(obj_left_0, &lv_font_montserrat_28, LV_STATE_DEFAULT); //设置字体大小
        lv_label_set_text(obj_left_0,"record");
        lv_obj_set_style_text_color(obj_left_0,lv_color_hex(OBJ_COLOR_FONT_BLUE),LV_STATE_DEFAULT);

        lv_obj_t * obj_list = lv_obj_create(obj_right);
        lv_obj_set_size(obj_list, OBJ_PARENT_WIDTH/2, OBJ_PARENT_HEIGH-OBJ_TABLE_HEIGH);
        lv_obj_set_style_bg_opa(obj_list,LV_OPA_TRANSP,LV_STATE_DEFAULT);
        lv_obj_align(obj_list,LV_ALIGN_TOP_LEFT,0,OBJ_ITEM_STEP);
        lv_obj_set_style_border_width(obj_list,0,LV_STATE_DEFAULT);
        lv_obj_set_style_pad_all(obj_list,0,LV_STATE_DEFAULT);
        lv_obj_set_style_outline_width(obj_list,0,LV_STATE_DEFAULT);

        // 渐变色
        static lv_style_t style;
        lv_style_init(&style);
        lv_style_set_radius(&style, 0);
        lv_style_set_bg_opa(&style, LV_OPA_80);
        lv_style_set_bg_color(&style, lv_color_hex(0xFFD9D9D9));
        lv_style_set_bg_grad_color(&style, lv_color_hex(OBJ_COLOR_BG_MAIN));
        lv_style_set_bg_grad_dir(&style, LV_GRAD_DIR_HOR);
        lv_style_set_bg_main_stop(&style, 0);//样式起点
        lv_style_set_bg_grad_stop(&style, 150);//样式结束位置

        static lv_style_t style_scroll;//滚动条颜色设置
        lv_style_init(&style_scroll);
        lv_style_set_bg_color(&style_scroll, lv_color_hex(OBJ_COLOR_FONT_BLUE));
        lv_style_set_width(&style_scroll,6);

        lv_obj_scroll_to_y(obj_list,OBJ_ITEM_STEP*20,LV_ANIM_OFF); //滑动到底部
        lv_obj_add_style(obj_list, &style_scroll, LV_PART_SCROLLBAR);//设置滚动条样式

        char* info[]={
            "namexx","18531231298"
        };
        lv_group_t * group=lv_group_create();
        for(int i=0;i<20;i++){
            lv_obj_t * obj_left_1 = lv_btn_create(obj_list);
            lv_group_add_obj(group,obj_left_1);
            lv_group_focus_obj(obj_left_1);
            lv_obj_set_size(obj_left_1, OBJ_PARENT_WIDTH/2-10, OBJ_TABLE_HEIGH);
            lv_obj_align(obj_left_1,LV_ALIGN_TOP_LEFT,0,OBJ_ITEM_STEP*(i));
            lv_obj_set_style_bg_opa(obj_left_1,LV_OPA_TRANSP,LV_STATE_DEFAULT);
            lv_obj_set_style_border_width(obj_left_1,1,LV_STATE_DEFAULT);
            lv_obj_set_style_border_color(obj_left_1,lv_color_hex(0xFFD9D9D9),LV_STATE_DEFAULT);
            lv_obj_set_style_border_side(obj_left_1,LV_BORDER_SIDE_LEFT|LV_BORDER_SIDE_BOTTOM,LV_STATE_DEFAULT);
            lv_obj_set_style_pad_all(obj_left_1,0,LV_STATE_DEFAULT);
            lv_obj_set_style_outline_width(obj_left_1,0,LV_STATE_DEFAULT);
            lv_obj_set_style_radius(obj_left_1,0,LV_STATE_DEFAULT);
            lv_obj_set_style_shadow_ofs_x(obj_left_1,0,LV_STATE_DEFAULT);
            lv_obj_set_style_shadow_ofs_y(obj_left_1,0,LV_STATE_DEFAULT);
            lv_obj_set_style_shadow_width(obj_left_1,0,LV_STATE_DEFAULT);

            lv_obj_set_style_border_color(obj_left_1,lv_color_hex(OBJ_COLOR_FONT_BLUE),LV_STATE_FOCUSED);
            lv_obj_set_style_border_width(obj_left_1,3,LV_STATE_FOCUSED);
            lv_obj_set_style_border_side(obj_left_1,LV_BORDER_SIDE_LEFT,LV_STATE_FOCUSED);
            lv_obj_set_style_shadow_ofs_x(obj_left_1,-1,LV_STATE_FOCUSED);
            lv_obj_set_style_shadow_ofs_y(obj_left_1,1,LV_STATE_FOCUSED);
            lv_obj_set_style_shadow_width(obj_left_1,1,LV_STATE_FOCUSED);
            lv_obj_add_style(obj_left_1, &style, LV_STATE_FOCUSED); //为对象增加 样式

            

            lv_obj_t* obj_left=lv_label_create(obj_left_1);
            lv_obj_align(obj_left, LV_ALIGN_LEFT_MID, 10, 0);
            lv_label_set_text(obj_left,info[0]);
            lv_obj_set_style_text_color(obj_left,lv_color_hex(OBJ_COLOR_FONT_DEFAULT),LV_STATE_DEFAULT);
            lv_obj_set_style_text_color(obj_left,lv_color_hex(OBJ_COLOR_FONT_BLUE),LV_STATE_FOCUSED);

            // 聚集焦点
            lv_obj_add_event_cb(obj_left_1, my_cb_text_handle, LV_EVENT_FOCUSED,obj_left);
            lv_obj_add_event_cb(obj_left_1, my_cb_text_handle, LV_EVENT_DEFOCUSED,obj_left);

            lv_obj_t* obj_right=lv_label_create(obj_left_1);
            lv_obj_align(obj_right, LV_ALIGN_RIGHT_MID, -10, 0);
            lv_obj_set_style_text_font(obj_right, &lv_font_montserrat_20, LV_STATE_DEFAULT); //设置字体大小
            lv_obj_set_style_text_color(obj_right,lv_color_hex(OBJ_COLOR_FONT_GRAY),LV_STATE_DEFAULT);
            lv_label_set_text(obj_right,info[1]);

        }
        
    }

 

 

    lv_obj_t*  appObj=lv_scr_act();
    lv_obj_t * arc = lv_arc_create(appObj);
    // lv_obj_set_style_bg_opa(arc,LV_OPA_TRANSP,LV_PART_MAIN|LV_PART_INDICATOR|LV_PART_KNOB);
    // lv_obj_set_style_arc
    lv_arc_set_rotation(arc, 270);
    lv_arc_set_bg_angles(arc, 0, 360);
    lv_obj_remove_style(arc, NULL, LV_PART_KNOB);   /*Be sure the knob is not displayed*/
    lv_obj_clear_flag(arc, LV_OBJ_FLAG_CLICKABLE);  /*To not allow adjusting by click*/
    lv_obj_set_size(arc,100,100);
    lv_obj_align(arc, LV_ALIGN_CENTER, 0, 10);
    lv_obj_set_style_bg_color(arc,lv_palette_lighten(LV_PALETTE_RED,1),LV_PART_MAIN);
    // lv_obj_set_style_width(arc,1,LV_PART_MAIN|LV_PART_INDICATOR);
    // lv_obj_set_style_arc_width(arc,1,LV_PART_MAIN|LV_PART_INDICATOR);
    lv_obj_set_style_arc_width(arc,6,LV_PART_MAIN);//得拆开设置
    lv_obj_set_style_arc_width(arc,6,LV_PART_INDICATOR);//得拆开设置
    lv_obj_set_style_arc_width(arc,6,LV_PART_KNOB);//得拆开设置

    lv_anim_t a;
    lv_anim_init(&a);
    lv_anim_set_var(&a, arc);
    lv_anim_set_exec_cb(&a, lv_arc_set_value);
    lv_anim_set_time(&a, 1000);
    lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);    /*Just for the demo*/
    lv_anim_set_repeat_delay(&a, 500);
    lv_anim_set_values(&a, 0, 100);
    lv_anim_start(&a);

  

 

posted @ 2024-08-23 11:55  小城熊儿  阅读(96)  评论(0编辑  收藏  举报