STMCU小助手
发布时间:2023-3-5 11:50
|
动画 对于TouchGFX来说,动画的类型比较简单,但正是简单的动画方式才可以多重组合,形成复杂的动画效果。TouchGFX动画主要有位置移动、透明度转化、图片轮播、以及3D场景动画。接下来为大家介绍每种动画的特点及使用方法。 ! Y. \/ H6 V7 B5 e% E; N 动画类型 位置移动: MoveAnimator类 用于移动控件的类,要使用该动画时在Box小部件上的TouchGFX Designer中启用Move Animator混合。在代码上启动该种动画的方法如下:
同时也可以设置一个动画结束时的回调函数,如下所示:" d5 s- J+ D" E: j4 u" r) I/ E3 }) `
这种添加回调的方式在TouchGFX上使用的很多之后可以通过API查找应用。, L* D; \3 I: ^9 ] z 透明度转化: FadeAnimator类用于将控件的透明度进行调整,这个动画可以实现动态半透明效果,例如光照之类。6 l/ r# M& ~6 v0 n% U3 C* D* Q 使用方法如下:
当然FadeAnimator类也有回调函数,再此不做过多介绍。4 q& T+ D# d: k# U$ ~) s# {! j 6 k+ E3 I& |1 o- H3 E/ t 图片轮播: AnimatedImage类用于多张图片的轮播,该类也被封装成了一种小控件,在TouchGFX designer中能看见该类。该动画的属性有暂停以及开始停止。
startAnimation函数参数说明如下:- c. _0 B' A- m7 T" H virtual void startAnimation ( const bool rev ,3 `8 K O0 N3 u% j const bool reset =false, const bool loop =false ) Starts the animation with the given parameters for animation direction, normal or reverse, whether to restart the animation and finally if the animation should loop automatically upon completion.: M' v7 I0 P b7 a, ` Parameters: rev Defines if the animation should be performed in reverse order.3 C/ _6 Z2 _; t$ B; `" k2 p" ]) S9 K reset (Optional) Defines if the animation should reset and start from the first (or last if reverse order) bitmap. loop (Optional) Defines if the animation should loop or do a single animation.9 q' \2 k! y& z% F/ Y7 r" l8 U/ D - O! F0 k Z& B; V8 z' v: V 3D场景动画: textureMapper类可以用作3D场景的动作,但虽然叫做3D场景,并不是将图像立体化做处理,而是通过将图像变形来展示3D的状态。所以使用的还是CPU的计算。3 m5 @7 h ^, i1 Z$ h1 F 对于该类的使用建议大家看看官方的API说明。 动画延时和动画速度 有些动画在移动的过程中会有从起始点到结束点的时间,除此之外还有一定时间后开始动画的操作。 接下来要说一说这些操作。 void startMoveAnimation ( int16_t endX , int16_t endY , uint16_t duration ,+ i6 p( q$ E+ i: Y EasingEquation xProgressionEquation =&EasingEquations::linearEaseNone,9 N, v# e5 m" I" H( M EasingEquation yProgressionEquation =&EasingEquations::linearEaseNone. R1 q' `1 [- I! L& m7 D* y' d ) 将动画从当前位置开始移动到指定的结束位置。 G. B* F* t. K% P% s( u : y! h/ `5 n$ ^: V, V! w D; a 动画过程中位置(X,Y)的展开由提供的EasingEquations描述。如果未给出缓和方程,则移动将线性执行。% b8 M# g* [1 ~/ l9 j- d 参数:: h) q' ?. i/ x% K/ Q endX 动画结束时的X位置。: Y% c* x0 u$ G5 O$ I endY 动画结束时的Y位置。 duration 动画的持续时间,以刻度为单位。 xProgressionEquation (可选)描述动画期间X位置的发展的等式。默认值为EasingEquations :: linearEaseNone。 yProgressionEquation (可选)描述动画期间Y位置的发展的等式。默认值为EasingEquations :: linearEaseNone。3 A3 z4 ^. g- p! O& }6 S , b* Y. a2 k% j: }* [; ?0 u9 F 这其中duration 是动画运动保持的时间,但是输入的参数并不是毫秒数或者秒数,而是TouchGFX的tick数。, ^# R/ J* U8 m virtual void setMoveAnimationDelay ( uint16_t delay ) 设置一定时间后进行移动动画。. s/ g* \* F$ O4 O% | Parameters:9 U% o7 A+ Q6 ~- g% q delay 延时的tick数。 6 a8 b" a* T3 E5 j( N 由此可以看出用于计算动画帧数及动作的的周期是根据系统的TouchGFX的tick周期决定的,也就是说影响动画卡顿的条件之一就是tick的周期。除此之外还有动画刷新幅度的大小。随着大小不一刷新的速度不一致。. C7 N# u0 Z& \% T$ b4 B8 R& Y$ H 在嵌入式板子中如果需要使用动画那就要根据主tick中的业务逻辑进行调整,保证每次tick运行时间接近,以防动画卡顿。8 L$ y1 f- Z" a5 M9 w ) B O" ^2 t# q! G 3 h4 B6 D2 T1 _' I/ n' n2 B 总结; Y9 L# M/ V* C' q 用动画时可以多考虑组合动画来达到想要的目的。总的来说动画的使用是用于嵌入式UI开发的点缀,如果将动画看作卖点的化真的就是画蛇添足了。; o" N$ D, _+ k) H ————————————————5 E! l) ?; x( s c2 t. W 版权声明:空闲的程序员! ~# F o8 j4 ` . M( j" T! _) M1 S' W4 m1 \ |
直播:低成本打造高体验:STM32 GUI 图形方案直播来袭,带你解锁嵌入式界面开发新思路
STM32F769I-DISCO开发板GUI学习内容(二)_课前硬件基础
【STM32L562E-DK】健康手环基础界面开发(一)—— 准备工作
汇编浮点库qfplib移植STM32F769I-DISCO开发板与硬件浮点运算性能测试对比
【圣诞专享活动】使用TouchGFX做GUI显示:圣诞快乐&Merry Christmas!
STM32F103移植LittlevGUI代码
【STM32H7S78-DK评测】-5 LVGL&DMA2D DEMO测试
【STM32H7S78-DK评测】-4 LTDC&DMA2D 基本测试
STM32F3DISCOVERY + UCGUI3.90A的移植(源码+视频)
STM32MP135F-DK开发板评测-Linux系统下基于gtk的计算器应用
微信公众号
手机版