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

运行模拟器

相关推荐
TeYiToKu10 小时前
笔记整理—linux驱动开发部分(9)framebuffer驱动框架
linux·c语言·arm开发·驱动开发·笔记·嵌入式硬件·arm
w微信150135078121 天前
小华一级 代理商 HC32F005C6PA-TSSOP20 HC32F005系列
c语言·arm开发·单片机·嵌入式硬件
憧憬一下1 天前
Pinctrl子系统中Pincontroller和client驱动程序的编写
arm开发·嵌入式·c/c++·linux驱动开发
上海知从科技2 天前
知从科技受邀出席ARM日产技术日
arm开发·科技
极客小张3 天前
基于STM32的智能温室环境监测与控制系统设计(代码示例)
c语言·arm开发·stm32·单片机·嵌入式硬件·物联网·毕业设计
TeYiToKu3 天前
笔记整理—linux驱动开发部分(6)platform平台总线
linux·c语言·arm开发·驱动开发·笔记·嵌入式硬件
飞腾开发者3 天前
飞腾平台Arm ComputeLibrary编译安装指南
linux·服务器·arm开发·后端·性能优化
CodingCos4 天前
【ARM Linux 系统稳定性分析入门及渐进 1.1 -- Crash 工具功能概述】
linux·arm开发·crash tools·linux crash·crash 工具使用
@haihi5 天前
IIC和SPI的区别和相同之处
arm开发·stm32·mcu
@@庆5 天前
FreeRTOS 数据传输方法(环形buffer,队列的本质)队列实验—多设备玩游戏
arm开发·stm32·单片机·嵌入式硬件·freertos