TouchGFX之Mixins

Mixin类扩展控件的功能,例如使之能够将移动或透明度值变化制作成动画。 在Move Animator和Fade Animator Mixin的基础上,TouchGFX Designer交互能够生成将移动或透明度值变化制作成动画的代码。 这些Mixin可通过TouchGFX Designer或在用户代码中手动添加到控件。

Move Animator Mixin使控件能够将从当前位置到指定结束位置的移动制作成动画。

Fade Animator Mixin使控件能够将其从当前透明度值至指定结束透明度值的渐隐过程制作成动画。

Click Listener Mixin用回调扩展控件,使控件能够响应触控输入。

Draggable mixin使控件能够通过触控输入被四处拖拽。

下面创建四个box,分别勾选Mixin的四种扩展功能来做这个实验

代码实现点击box3之后,box1线性循环移动,box2线性循环渐隐

cpp 复制代码
#ifndef SCREENVIEW_HPP
#define SCREENVIEW_HPP

#include <gui_generated/screen_screen/screenViewBase.hpp>
#include <gui/screen_screen/screenPresenter.hpp>

class screenView : public screenViewBase
{
public:
    screenView();
    virtual ~screenView() {}
    virtual void setupScreen();
    virtual void tearDownScreen();
		void boxMoveAnimationEndedHandler(const touchgfx::MoveAnimator<Box>& comp);
		void boxClickHandler(const Box& b, const ClickEvent& e);
			
protected:
		Callback <screenView, const touchgfx::MoveAnimator<Box>&> boxMoveAnimationEndedCallback;
		Callback<screenView, const Box&, const ClickEvent&> boxClickedCallback;
private:
		uint8_t tag;
};

#endif // SCREENVIEW_HPP
cpp 复制代码
#include <gui/screen_screen/screenView.hpp>

screenView::screenView() : boxMoveAnimationEndedCallback(this, &screenView::boxMoveAnimationEndedHandler), boxClickedCallback(this, &screenView::boxClickHandler), tag(0)
{

}

void screenView::setupScreen()
{
    screenViewBase::setupScreen();
		box3.setClickAction(boxClickedCallback);
		box1.setMoveAnimationEndedAction(boxMoveAnimationEndedCallback);
}

void screenView::tearDownScreen()
{
    screenViewBase::tearDownScreen();
}

void screenView::boxClickHandler(const Box& b, const ClickEvent& evt)
{
    if (&b == &box3)
    {
			box1.startMoveAnimation(0, 0, 40, EasingEquations::linearEaseNone, EasingEquations::linearEaseNone);
			box2.startFadeAnimation(0, 40, EasingEquations::linearEaseNone);
    }
}

void screenView::boxMoveAnimationEndedHandler(const touchgfx::MoveAnimator<touchgfx::Box>& b)
{
    if (&b == &box1)
    {
			if(tag == 0)
			{
				tag = 1;
        box1.startMoveAnimation(200, 200, 40, EasingEquations::linearEaseNone, EasingEquations::linearEaseNone);
				box2.startFadeAnimation(255, 40, EasingEquations::linearEaseNone);
			}
			else
			{
				tag = 0;
				box1.startMoveAnimation(0, 0, 40, EasingEquations::linearEaseNone, EasingEquations::linearEaseNone);
				box2.startFadeAnimation(0, 40, EasingEquations::linearEaseNone);
			}
    }
}

运行模拟器

相关推荐
幼儿园蛋小黄19 小时前
从设备树到 ARM 驱动:嵌入式 Linux 驱动开发学习总结
linux·arm开发·驱动开发
myy-learn3 天前
ARM-I2C 驱动优化与 LM75 温度传感器读取实践
arm开发·单片机·嵌入式硬件
kkkkkkkkkk_Z3 天前
新手自学嵌入式 | 学习日记:ARM内核启动代码、时钟系统(PLL/Prescaler/PFD)与IMX6ULL时钟配置
arm开发·学习
Tronlong创龙3 天前
IoTGateway可以让网关开发速度快一倍?
arm开发·嵌入式开发·硬件开发·工业控制·工业开发板
陌上花开缓缓归以4 天前
系统启动失败纪要
arm开发
我是场4 天前
我的NPI项目之-Touch的EE特性
android·arm开发
陌上花开缓缓归以4 天前
arm linux ddr 内存布局
linux·arm开发
女神下凡4 天前
芯参谋(43):DDR4_电路设计指南
arm开发·单片机·嵌入式硬件·设计规范
晚枫歌F5 天前
DPDK原理以及解析tcp/udp协议包
arm开发
szxinmai主板定制专家5 天前
基于 ARM+FPGA 雕刻机控制系统的设计
arm开发·人工智能·fpga开发·rk3576·半导体设备