本帖最后由 LyCrystal 于 2019-3-20 09:18 编辑
A、听说论坛搞了了touchGFX的活动,便过来参与一把。顺带感受一下强大的designer。话不多少,下面开始一步一步创建工程。
B、这里我直接从打开designer之后开始说创建过程。安装过程是一路next的,我就不多罗嗦了。
1、打开designer,弹出工程创建界面
2、将光标移动到Blank UI 框内便会出现change按钮。如下图所示。点击按钮选择合适的模板
3、这里我选择使用第二个模板,AnimatedImage Example。通过选择合适的模板可以省略一些不必要的过程,加快进度。当然,也省得我们抄模板时抄错。选择好模板之后我们返回去修改工程信息
4、参照下图按需求修改信息
其中:
1、工程名称
2、保存地址
3、色彩深度
4、分辨率
5、创建按钮
修改完成之后点击创建按钮,至此一个工程创建出来了。
C、添加修改内容
1、工程创建完成之后自动弹出下面的界面,这里点击箭头4指向的按钮,我们需要删除和添加一下东西。当然也可以直接Run simulator看一下官方例子的效果。
2、点击进入出现如下界面,这一组以ani_开头的文件就是哪个转动的小手手。我们删除这一组图片换成st的素材
更换之后如下所示:
接下来修改动画配置:
主要是两项:
1、image中的FirstImage和LastImage
2、ANIMATION中的三个全部勾选上。
3、加入一个新的screen:点击下图所示按钮加入一个新的screen
4、修改start按钮的功能:
这里点击start按钮(其实不用点),并点选有点动作设定。删除原有的动作设定,并新建一个interaction:
设定如下图所示,用于切换到screen2
5、绘制screen2,整体效果如下图所示:
过程就是:
1)添加box,用来盛放背景
2)加入背景图片
3)加入两边的touchGFX图片
4)一次加入线段
5)红色圆环我用的是circleProcess,白色圆环用的是circle。
具体设置细节我就不多描述了。可以参照工程上的参数进行布置。
6、布置完毕后我们点击生成代码。
D、代码修改:
生成代码之后我们在工程下面的路径GFXDemo\simulator\msvs\内可以找到Visual studio的工程文件,我们直接打开工程文件。
准备添加代码:
1、修改头文件:
GFXDemo\gui\include\gui\screen2_screen\Screen2View.hpp
- class Screen2View : public Screen2ViewBase
- {
- private:
- int ProcessVal;
- int Step;
- int CircleDet = 0;
- public:
- Screen2View();
- virtual ~Screen2View() {}
- virtual void setupScreen();
- virtual void tearDownScreen();
- void ScreenEnter();
- void handleTickEvent();
- protected:
- };
2、setupScreen()修改为如下内容
GFXDemo\gui\src\screen2_screen\Screen2View.cpp
- void Screen2View::setupScreen()
- {
- int x, y;
- Screen2ViewBase::setupScreen();
- //状态
- ProcessVal = 0;
- Step = 0;
- //将线段隐藏
- //line 0
- line0.getStart(x,y);
- line0.setEnd(x,y);
- //line 1
- line1.getStart(x, y);
- line1.setEnd(x, y);
- //line 2
- line2.getStart(x, y);
- line2.setEnd(x, y);
- //line 3
- line3.getStart(x, y);
- line3.setEnd(x, y);
- //line 4
- line4.getStart(x, y);
- line4.setEnd(x, y);
- //line 5
- line5.getStart(x, y);
- line5.setEnd(x, y);
- //line 6
- line6.getStart(x, y);
- line6.setEnd(x, y);
- //line 7
- line7.getStart(x, y);
- line7.setEnd(x, y);
- //circleProgress1
- circleProgress1.setValue(0);
- //circleProgress2
- circleProgress2.setValue(0);
- //circle1
- circle1.setArc(0, 0);
- circle1.setVisible(false);
- }
3、重写函数handleTickEvent()
GFXDemo\gui\src\screen2_screen\Screen2View.cpp
- void Screen2View::handleTickEvent()
- {
- // int x = 0, y = 0;
- switch (Step)
- {
- case 0:
- line0.invalidate();
- line1.invalidate();
- line2.invalidate();
- line3.invalidate();
- line4.invalidate();
- line5.invalidate();
- line6.invalidate();
- line7.invalidate();
- circleProgress1.invalidate();
- //Process1
- circleProgress1.setValue(++ProcessVal);
- //line0
- line0.setEnd(5, 60 * ProcessVal / 360);
- //line1
- line1.setEnd(240*ProcessVal/360, 5);
- //line2
- line2.setEnd(5, 100 * ProcessVal / 360);
- //line3
- line3.setEnd(30 * ProcessVal / 360, 5);
- //line4
- line4.setEnd(15 * ProcessVal / 360, 5);
- //line5
- line5.setEnd(5, 100 * ProcessVal / 360);
- //line6
- line6.setEnd(240 * ProcessVal / 360, 5);
- //line7
- line7.setEnd(5, 60 * ProcessVal / 360);
- line0.invalidate();
- line1.invalidate();
- line2.invalidate();
- line3.invalidate();
- line4.invalidate();
- line5.invalidate();
- line6.invalidate();
- line7.invalidate();
- circleProgress1.invalidate();
- if (ProcessVal >= 360) {
- ProcessVal = 0;
- Step = 1;
- circle1.setVisible(true);
- }
- break;
- case 1:
- if (CircleDet < 340) {
- CircleDet++;
- circle1.setArc(circle1.getArcStart(), circle1.getArcEnd() + 1);
- }
- else {
- Step = 2;
- }
- circle1.setArc(circle1.getArcStart() + 1, circle1.getArcEnd() + 1);
- circle1.invalidate();
- break;
- case 2:
- if (CircleDet > 20) {
- CircleDet--;
- circle1.setArc(circle1.getArcStart() + 1, circle1.getArcEnd());
- }
- else {
- Step = 1;
- }
- circle1.setArc(circle1.getArcStart() + 1, circle1.getArcEnd() + 1);
- circle1.invalidate();
- break;
- default:
- break;
- }
- }
4、代码修改完毕,之后可以点击编译运行就可以了。运行效果如下图所示:
附录:
工程文件:放百度云吧,清理压缩之后文件还是过大
链接:https://pan.baidu.com/s/1KWxGokmGN20k-ESmBszRTw
提取码:6nv5
|