首页 > 其他分享 >LVGL高效显示进度条

LVGL高效显示进度条

时间:2024-12-10 14:46:08浏览次数:6  
标签:动画 高效 anim obj 进度条 lv set part LVGL

此篇文章在2022年5月17日被记录

在单片机中显示动画是一件很浪费资源的事情,在那个小小的flash中存入一大坨数据是相当费力地,因此就进度条动画而言,有一种相当简单的实现方式,就是重复移动整个图片然后遮住某个部分,例如这个样子:

img

动图中可以看到在被遮住后,达到了动画的效果

实现该功能并且封装成函数:

/*
*函数说明:这个函数用来在屏幕上显示进度条动画,旨在节省资源
*参数传入:1、父对象;2、图片内容3、原始图片被分成几部分了(备注详谈)4、布局
*返回值:无
*备注:这个动画的实现方式是对一张图片进行循环动画,并对其能看到运动的地方进行遮罩
*此函数对图片的格式具有要求,详情参考示例图片,图片被分成几个part,运动路径为一个part。
*/
void lv_progress_bar_animation(lv_obj_t * obj,const void *src_img,int part,lv_align_t align)
{
    float mask_w=(float)(part-1)/(float)part;//某些系数的计算
    float anim=(float)(((float)1/(float)part));

    lv_obj_t *parent=obj;//父布局继承
    lv_obj_t * cont = lv_cont_create(parent, NULL);//新建一个容器
    lv_img_header_t header; //新建一个图片头部对象
    lv_img_decoder_get_info(src_img, &header);
    lv_obj_set_size(cont, header.w*mask_w,header.h);//设定容器的宽度为图片的宽度*系数,容器的高度为图片的高度
    lv_obj_align(cont, NULL, align, 0, 0);//设置容器位于父布局的位置

    lv_obj_set_style_local_border_width(cont,LV_CONT_PART_MAIN,LV_STATE_DEFAULT,0);//隐藏容器的边框
    lv_obj_t * img1 = lv_img_create(cont, NULL);//建立一个图片对象
    lv_img_set_src(img1, src_img);//设定图片的内容


    lv_anim_t a;   //新建动画
    lv_anim_init(&a);//初始化动画
    lv_anim_set_exec_cb(&a, (lv_anim_exec_xcb_t) lv_obj_set_x);//设定动画回调函数
    lv_anim_set_var(&a, img1);//给动画绑定图片对象
    lv_anim_set_time(&a, 1000);//设定动画速度
    lv_anim_set_values(&a, -header.w*anim, 0);//设定动画位置从哪里到哪里
    lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);//设置动画永不停息
    lv_anim_start(&a);//动画开始
}

在函数中调用:

LV_IMG_DECLARE(slider);
lv_progress_bar_animation(lv_scr_act(),&slider,4,LV_ALIGN_CENTER);

LV_IMG_DECLARE(bar);
lv_progress_bar_animation(lv_scr_act(),&bar,7,LV_ALIGN_IN_BOTTOM_MID);

实现效果如下:

img

重点讲一下这里的part参数:

img

part就是有几个重复的部分,并且动画播放时,运动的路径为-一个part的像素到0.然后将末端遮住就可以了。

标签:动画,高效,anim,obj,进度条,lv,set,part,LVGL
From: https://www.cnblogs.com/shumei52/p/18597314

相关文章

  • 信创国产化时代:打造安全高效的信创网站解决方案
    在全球科技竞争日益激烈的背景下,信创国产化已经成为中国信息技术领域的重要战略选择。信创国产化,即信息技术应用创新与国产化,旨在通过自主研发和创新,推动核心技术的国产化,减少对外部技术的依赖,确保国家信息安全和经济安全。这一战略不仅反映了国家对技术自主可控的重视,也体现了......
  • 课程设计如何高效?六款教育团队协作软件在哪?
    在当今数字化飞速发展的时代,教育教培行业正经历着深刻的变革。J人为主的教育教培团队公司,凭借其严谨、有序、注重规划与效率的特质,迫切需要借助先进的可视化团队协作办公软件来优化教学管理流程、提升教学质量以及促进团队沟通协作。本文将为您详细盘点六款适用于教育行业的此类......
  • 论文写完还没完!如何在ChatGPT的帮助下高效完成审稿
    审稿是论文发表或提交前的重要环节,涉及对内容完整性、逻辑性、创新性、语言表达等多个方面的评估。合理使用ChatGPT,可以使审稿过程更系统、更高效。今天分享的内容是使用ChatGPT完成论文审稿的详细步骤和操作示例,助您轻松完成高质量的审稿任务。一键完成论文初稿,请关注底部微......
  • Vue.js中高效利用第三方工具类与插件的实践
    在Vue.js项目中,引入并使用第三方工具类和插件可以显著提升开发效率和代码质量。以下是10种好用且高端的Vue.js第三方插件及其简要介绍和使用示例:1.VueRouter简介:VueRouter是Vue.js官方的路由管理器,用于构建单页面应用(SPA)。它提供了动态路由匹配、嵌套路由、路由守卫等功能......
  • Axure如何提升设计师效率?必备高效插件推荐
    Axure是设计行业广泛应用的一款强大工具,其功能复杂而丰富,许多新手可能会因为使用门槛而感到困惑。然而,通过结合一些高效的Axure插件,即使是初学者也能迅速提升自己的设计能力。本文将为你推荐几款实用的Axure插件,它们将极大地提升你的设计效率,帮助你轻松成为设计高手!1.线框图......
  • 基于Huffman树的层次化Softmax:面向大规模神经网络的高效概率计算方法
    理论基础算法本质与背景层次化(Hierarchial)Softmax算法是在深度学习领域中解决大规模词嵌入训练效率问题的重要突破。该算法通过引入Huffman树结构,有效地将传统Softmax的计算复杂度从线性降至对数级别,从而在处理大规模词汇表时表现出显著的优势。在传统的神经网络词嵌入模型中,So......
  • 【Linux内核】详解从socket到epoll高效网络编程
    socket网络编程的步骤先给出大致流程:服务端:创建自己的socket连接再打开自己的可以用于通信的端口,并把自己的ip告诉要通信的客户端打开监听的socket,监听是否有客户端连接接受客户端的连接如果有客户端连接上来,则接收数据后,再回复不用于通信则关闭socket客户端:创......
  • 电脑控制几十台手机——iOS手机群控系统,高清投屏高效管理
    ​相信不少小伙伴都用过iPad、iPhone等苹果设备的投屏功能,将内容投到大屏上展示。但这次推荐的群控系统,除了能投屏之外,还支持一键锁屏解锁、快捷打开关闭应用……其实,苹果手机中系统的功能还挺多。今天,小智就给大家介绍一下苹果手机中系统中的「一键锁屏」与「快捷打开关闭......
  • 高效开发:掌握 Vue.js 的五个实用技巧
    高效开发:掌握Vue.js的五个实用技巧......
  • 高效整合聚水潭库存数据至MySQL的实现
    聚水潭数据集成到MySQL:商品库存查询案例分享在本次技术案例中,我们将详细探讨如何通过轻易云数据集成平台,将聚水潭的商品库存数据高效、可靠地集成到MySQL数据库中。具体方案为“聚水潭-商品库存查询-->BI彩度-商品库存表”,旨在实现实时的数据同步和高效的数据管理。任务背景与挑......