|
|


当进度条进度小于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); //开始动画
- }
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|