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);
}
}
}
运行模拟器