要在lvgl里制作简单的动画效果,在网上很容易搜得到。
lv_anim_t anim_logo_img;
lv_anim_init(&anim_logo_img);
。。。
lv_anim_set_exec_cb(&anim_logo_img, (lv_anim_exec_xcb_t)lv_img_set_zoom);
这一行是把执行函数给到动画对象,这个执行函数就是lv_img_set_zoom,也就是缩放函数。它能够使得对象在起止值之间进行缩放。他是lvgl提供的函数之一。
但是要怎么自己来一段执行函数呢?
那就得看到lv_anim_t结构体
typedef struct _lv_anim_t {
void * var; /**<Variable to animate*/
lv_anim_exec_xcb_t exec_cb; /**< Function to execute to animate*/
。。。
这个exec_cb就是执行函数,他的前缀是lv_anim_exec_xcb_t,也就是
typedef void (*lv_anim_exec_xcb_t)(void *, int32_t);
说明我们要自己写这个执行函数的时候,需要两个传参,一个是空指针指向某一个obj对象,另一个是32位变量,是一个数值。
这个数值介于起止值之间。
(设置动画对象的函数: lv_anim_set_var(&anim_logo_img, &logo_img);)
(设置起止值的函数: lv_anim_set_values(&anim_logo_img, 0, 100);)
执行函数不断的被运行,他的传参就介于起止值之间,这样就达到了动画的不断变化的效果。
所以,我们依样画葫芦:
void lv_anim_cb(void* logo_img, int32_t mid_val);
定义这么一个函数,再在函数中填充自己想要的效果,如:
{
lv_obj_set_width(logo_img, mid_val);
}
就可以简单的将对象拉宽或者缩短啦。