LVGL学习——动画重复播放,回放

本文介绍如何使用LVGL库创建可无限循环的动画效果,并详细解释了动画设置的各项参数及回调函数的应用。

主要函数

 /** 当前进方向准备就绪时,制作要播放的动画

 * Make the animation to play back to when the forward direction is ready
 * @param a         pointer to an initialized `lv_anim_t` variable
 * @param delay     delay in milliseconds before starting the playback animation.重放动画

static inline void lv_anim_set_playback_delay(lv_anim_t * a, uint32_t delay)
 */

 /** 当前进方向准备就绪时,制作要播放的动画

 * Make the animation to play back to when the forward direction is ready
 * @param a         pointer to an initialized `lv_anim_t` variable
 * @param delay     delay in milliseconds before starting the playback animation.重放动画

static inline void lv_anim_set_playback_delay(lv_anim_t * a, uint32_t delay)
 */

/**
 * Make the animation repeat itself.
 * @param a         pointer to an initialized `lv_anim_t` variable
 * @param cnt       repeat count or `LV_ANIM_REPEAT_INFINITE` for infinite repetition. 0: to disable repetition.

static inline void lv_anim_set_repeat_count(lv_anim_t * a, uint16_t cnt)
 */
 

static void anim_x_cb(void * var, int32_t v)
{
    lv_obj_set_x(var, v);
}
static void anim_size_cb(void * var, int32_t v)
{
    lv_obj_set_size(var, v, v);
}
/**
* Create a playback animation
*/
void lv_example_anim_2(void)
{
//    创建一个红色小球
//    位于左侧中部(10,0)
/**
 * Change the alignment of an object and set new coordinates.
 * Equivalent to:
 * lv_obj_set_align(obj, align);
 * lv_obj_set_pos(obj, x_ofs, y_ofs);
 * @param obj       pointer to an object to align
 * @param align     type of alignment (see 'lv_align_t' enum) `LV_ALIGN_OUT_...` can't be used.
 * @param x_ofs     x coordinate offset after alignment
 * @param y_ofs     y coordinate offset after alignment

void lv_obj_align(struct _lv_obj_t * obj, lv_align_t align, lv_coord_t x_ofs, lv_coord_t y_ofs);
 */
    lv_obj_t * obj = lv_obj_create(lv_scr_act());
    lv_obj_set_style_bg_color(obj, lv_palette_main(LV_PALETTE_RED), 0);
    lv_obj_set_style_radius(obj, LV_RADIUS_CIRCLE, 0);
    lv_obj_align(obj, LV_ALIGN_LEFT_MID, 10, 0);

    lv_anim_t a;
    lv_anim_init(&a);
    lv_anim_set_var(&a, obj);
    lv_anim_set_values(&a, 10, 50);//size的变化值
 /** 当前进方向准备就绪时,制作要播放的动画

 * Make the animation to play back to when the forward direction is ready
 * @param a         pointer to an initialized `lv_anim_t` variable
 * @param delay     delay in milliseconds before starting the playback animation.重放动画

static inline void lv_anim_set_playback_delay(lv_anim_t * a, uint32_t delay)
 */
    lv_anim_set_time(&a, 1000);
    lv_anim_set_playback_delay(&a, 1000);
    lv_anim_set_playback_time(&a, 300);//回放动画用的时间
    lv_anim_set_repeat_delay(&a, 500);//延迟回放
/**
 * Make the animation repeat itself.
 * @param a         pointer to an initialized `lv_anim_t` variable
 * @param cnt       repeat count or `LV_ANIM_REPEAT_INFINITE` for infinite repetition. 0: to disable repetition.

static inline void lv_anim_set_repeat_count(lv_anim_t * a, uint16_t cnt)
 */
    lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);//一直重复动画
    lv_anim_set_path_cb(&a, lv_anim_path_ease_in_out);//变化速度

/**
 * Calculate the current value of an animation applying an "S" characteristic (cosine)
 * @param a     pointer to an animation
 * @return      the current value to set

int32_t lv_anim_path_ease_in_out(const lv_anim_t * a);
 */
    lv_anim_set_exec_cb(&a, anim_size_cb);//对象尺寸变化
    lv_anim_start(&a);
    lv_anim_set_exec_cb(&a, anim_x_cb);//位置变化
    lv_anim_set_values(&a, 10, 240);
    lv_anim_start(&a);
}

LVGL中实现垂直滚动动画效果,可以通过使用LVGL动画机制和滚动相关的API来完成。LVGL是一个轻量级的图形库,专为嵌入式系统设计,支持丰富的图形效果和动画功能。 ### 动画机制概述 LVGL动画机制允许开发者对对象的属性进行动画化处理,比如位置、大小、颜色等。动画可以通过设置动画的持续时间、延迟时间、动画曲线以及动画播放模式(如单次播放、循环播放等)来实现复杂的效果。 要实现垂直滚动动画效果,需要对目标对象的位置进行动画处理。通常情况下,这涉及到对`y`坐标进行变化,以实现对象的垂直滚动。 ### 实现垂直滚动动画的步骤 1. **创建对象**:首先需要创建一个需要滚动的对象,例如一个`lv_obj_t`对象。 2. **设置动画参数**:使用`lv_anim_t`结构体来定义动画的参数,包括动画的目标对象、属性、持续时间、延迟时间、动画曲线等。 3. **实现动画回调函数**:定义一个回调函数,用于更新对象的属性。 4. **启动动画**:使用`lv_anim_start`函数启动动画。 下面是一个简单的示例代码,展示了如何在LVGL中实现垂直滚动动画效果: ```c #include "lvgl/lvgl.h" // 动画回调函数 static void scroll_anim_cb(void * var, int32_t val) { lv_obj_set_y(var, val); } void create_vertical_scroll_animation(lv_obj_t * parent) { // 创建一个需要滚动的对象 lv_obj_t * rect = lv_obj_create(parent); lv_obj_set_size(rect, 100, 50); lv_obj_set_pos(rect, 50, 0); // 初始位置在顶部 // 设置动画参数 lv_anim_t a; lv_anim_init(&a); lv_anim_set_var(&a, rect); lv_anim_set_values(&a, 0, 200); // 从y=0滚动到y=200 lv_anim_set_time(&a, 1000); // 动画持续时间为1秒 lv_anim_set_playback_time(&a, 500); // 回放时间为0.5秒 lv_anim_set_exec_cb(&a, scroll_anim_cb); lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE); // 无限循环 // 启动动画 lv_anim_start(&a); } ``` ### 关键点说明 - **动画持续时间**:通过`lv_anim_set_time`函数设置动画的持续时间,单位为毫秒。 - **动画执行回调**:动画的执行是通过回调函数实现的,每次动画更新时都会调用这个回调函数来更新对象的属性。 - **动画重复**:通过`lv_anim_set_repeat_count`函数设置动画重复次数,例如`LV_ANIM_REPEAT_INFINITE`表示无限循环[^1]。 通过上述步骤和代码示例,可以在LVGL中实现一个基本的垂直滚动动画效果。根据具体需求,还可以进一步调整动画的参数和回调函数,以实现更加复杂的动画效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值