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);
			}
    }
}

运行模拟器

相关推荐
VekiSon1 小时前
Linux内核驱动——设备树原理与应用
linux·c语言·arm开发·嵌入式硬件
代码游侠3 小时前
复习——Linux设备驱动开发笔记
linux·arm开发·驱动开发·笔记·嵌入式硬件·架构
陌上花开缓缓归以21 小时前
LiteOS和RTOS 系统选型分析
arm开发
深圳市九鼎创展科技1 天前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
森焱森1 天前
嵌入式硬件工程师应知 白银快速分析报告
linux·c语言·arm开发·嵌入式硬件·去中心化
森G2 天前
七、04ledc-sdk--------makefile有变化
linux·c语言·arm开发·c++·ubuntu
VekiSon2 天前
Linux内核驱动——杂项设备驱动与内核模块编译
linux·c语言·arm开发·嵌入式硬件
AI+程序员在路上2 天前
Nand Flash与EMMC区别及ARM开发板中的应用对比
arm开发
17(无规则自律)2 天前
深入浅出 Linux 内核模块,写一个内核版的 Hello World
linux·arm开发·嵌入式硬件
梁洪飞3 天前
内核的schedule和SMP多核处理器启动协议
linux·arm开发·嵌入式硬件·arm