|  | 
 
|  
 
  
 当进度条进度小于20的时候,内部的百分比在右边显示
 反之大于20的时候则在左边显示
 
 复制代码//带数字进度条
// *  函数名称 :  bar_set_value
// *  参    数 : 无
// *  函数功能 : 回调实现显示值
static void bar_set_value(void * bar,int32_t v)
{
                        lv_bar_set_value(bar,v,LV_ANIM_OFF);
}
// *  函数名称 :  bar_event_cb
// *  参    数 : 无
// *  函数功能 : 回调处理值
static void bar_event_cb(lv_event_t * e)
{
                        lv_obj_draw_part_dsc_t * dsc = lv_event_get_param(e); //获取回调参数
                        if(dsc->part != LV_PART_INDICATOR)  return;
                        lv_obj_t * obj = lv_event_get_target(e);              //获取回调对象
                        lv_draw_label_dsc_t label_dsc;                        //创建绘制描述符
                        lv_draw_label_dsc_init(&label_dsc);                   //初始化绘制描述符
//                        label_dsc.font = LV_FONT_DEFAULT;                     //设置绘制描述符字体
                        label_dsc.font = &lv_font_montserrat_10;                     //设置绘制描述符字体
                        char buf[8];                                          //定义一个接收变量
                        lv_snprintf(buf,sizeof(buf),"%d%%",(int)lv_bar_get_value(obj));  //将获得的bar的值到打印到buf中
                        lv_point_t txt_size;                                  //设置点变量
                        //获取文本大小
                        lv_txt_get_size(&txt_size,buf,label_dsc.font,label_dsc.letter_space,label_dsc.line_space,LV_COORD_MAX,label_dsc.flag);
                        lv_area_t txt_area;                                   //表示屏幕的一个区域 具有两个坐标值可以显示一个内容具体位置和大小
                        if(lv_area_get_width(dsc->draw_area) > txt_size.x + 20)//当获取bar进度条的值大于显示数字的宽度 + 20
        { 
                        txt_area.x2 = dsc->draw_area->x2 - 5;              //设置x2的位置,就是要在bar内部 获取进度条最右端的值减去5
                        txt_area.x1 = txt_area.x2 - txt_size.x + 1;        //更具x2的值减去 获取字体的宽度值 
                        label_dsc.color = lv_color_white();                //设置显示字体
        }
                        else
        {                                                //在bar外部显示
                        txt_area.x1 = dsc->draw_area->x2 + 5;              //显示的最左边位置直接显示在进度条的最右端 + 5 位置 
                        txt_area.x2 = txt_area.x1 + txt_size.x - 1;        //显示字体最右端的位置
                        label_dsc.color = lv_color_white();                //设置显示字体
        }
                        txt_area.y1 = dsc->draw_area->y1 + (lv_area_get_height(dsc->draw_area) - txt_size.y) / 2; //设置字体y1 的位置
                        txt_area.y2 = txt_area.y1 + txt_size.y -1;            //设置字体y2的位置
                        lv_draw_label(dsc->draw_ctx, &label_dsc, &txt_area, buf, NULL);   //重绘显示内容
}
// *  函数名称 :  bar_show_6
// *  参    数 : 无
// *  函数功能 : bar显示
void Boot_Pagr(lv_obj_t * parent)
{
                        lv_obj_t * bar = lv_bar_create(parent);         //创建bar对象
                        lv_obj_add_event_cb(bar,bar_event_cb,LV_EVENT_DRAW_PART_END,NULL);//添加回调事件
                        lv_obj_set_size(bar,200,12);                          //设置尺寸
                        lv_obj_center(bar);                                   //居中显示
                        lv_obj_align(bar,LV_ALIGN_CENTER, 0, 0);  //设置父对象的位置居中
                        lv_anim_t a;                                          //创建动画对象
                        lv_anim_init(&a);                                     //初始化动画
                        lv_anim_set_var(&a,bar);                              //设置动画对象
                        lv_anim_set_values(&a,0,100);                         //设置动画值
                        lv_anim_set_exec_cb(&a,bar_set_value);                //设置回调
                        lv_anim_set_time(&a,8000);                            //设置时间
                        lv_anim_set_playback_time(&a,1000);                   //设置回放时间
                        lv_anim_set_repeat_count(&a,LV_ANIM_REPEAT_INFINITE); //设置计数
                        lv_anim_start(&a);                                    //开始动画
}
 
 | 
 
×本帖子中包含更多资源您需要 登录 才可以下载或查看,没有账号?立即注册 
  |