一、GUI设计" |: A b: d: r1 f
1、界面布局
; M$ t% h2 y3 D, n# r# M$ ~按照下图添加三个控件,分别是1、Button,2、Image,3、Animated Image。& V% \: [% U1 M
其中Button添加不同相应状态的图片,Image 添加背景图片作为整个屏幕的背景,添加方法在上一节有介绍,在这就不做赘述。
" x/ z1 i9 s, n T" w7 {7 l" M- ~; X
三个控件的属性:
0 ]) ^0 K; A' M# E1、 Name:btn_start_stop
: M' n9 H0 ~! C Location X:175 Y200
5 o- F1 W; ^+ k4 K8 v- X+ _3 j1 r7 K1 Z6 a+ T" n
2、 Name:background: f/ w" O) @, g8 _" f& k# y& |* Z
Location X:0 Y 0' F7 t1 p9 k! }+ W3 d
" i+ R2 b- e* v# j: A& Z3、 Name:animation8 m- ~* ?2 b6 j, u
Location X:160 Y 20
, h) g) i, {7 t8 {
! Z" P2 R& S# }0 @
! j* G3 c2 Z5 Y) G( o
' s. ]3 u& h- R3 K! M1 E2 X2、添加Animated Image 图片% I! u; \; a. ]2 w# u
第一步:导入图片资源。按照下图所示添加。
# j. z3 h2 b+ H5 g- L5 w% [
9 l, U B5 s! a1 O u
. a8 ?$ @2 ]& f$ {$ P
# [1 E/ v8 N& O6 _: t: Y; @
第二步:给Animated控件指定动态图片的起始图片、以及下一张图片显示时间。
# D/ w+ e, ]& Q. V* X* M这里设置没一帧间隔30ms。不同间隔显示速度不同,有兴趣可以自己尝试下。! m% x# y2 O0 b* s3 e. H; i' w
V5 S- x3 S1 }- U0 Y
) d' }; }- w; b9 F, Y- A, X) R p. c& Y9 H) c; U) _
3、添加按钮文本资源
/ H) x# O2 N5 p, ~3 g+ ^% j' I按照下图步骤依次更改,其中第5步 GB目录下面显示的是当选择ResourceID是分别对应的显示在Button上的字符。
1 ]/ q L1 i2 F% m5 \( a, l5 s" _% w* j6 i
, Q8 D: g( Y' r$ J/ ~3 f. ]8 Q5 U8 W1 x( G
4、添加交互
3 @4 F, a+ b: Q! q0 G! e1、给Button添加Interactions
5 {4 L+ q+ t3 Q, p1 \# M4 b2 o其中Actions选择Execute C++ Code,,表示单机这个Button执行下面的C++代码
2 Z& D' [) E, D0 V
& u, q# X+ g# Z- N% U
2 {( { H. j) t$ `' E( s
% b/ g! r+ S# y- |$ r7 b; s5 R' BC++代码如下& l9 y2 E1 Q+ Y& _( Y0 Q# j2 r2 ^
. z' D4 E# @+ M K/ u' v" }2 j' l; [- if (animation.isAnimatedImageRunning())$ y4 ?9 [7 b" }! `
- {% }! p. X& J& z9 z5 t6 j
- animation.pauseAnimation();//暂停动画
* W9 r; f! c7 a) k - btn_start_stop.setLabelText(TypedText(T_START));//设置butto
' }" K |' o5 C2 r" A* | - //的文本为start
+ M+ T) ]' Y1 T0 H9 r9 p - }0 E1 O/ o6 P/ G+ X4 [' O- _3 z
- else
& W2 F9 J) F* C2 O$ z0 @ - {/ k' ^5 J! N; c1 E0 P2 P' _+ }6 m
- //开始动画
- J$ ]7 N+ \; B* b& h( F) o- B - animation.startAnimation(animation.isReverse(), false, true);
& I! }( i+ J# N( x1 \+ U' d - //设置button文本为stop
- _5 k8 @( l% J# i/ y1 n - btn_start_stop.setLabelText(TypedText(T_STOP));: u' _. i/ h5 S! Z/ c+ S# ~
- }
9 [% Z4 V) \) W5 [( X$ z( @: j
$ A( ~7 C' ~: @9 r8 A
复制代码
: B" i3 Q& o6 u) ~4 z, [. i为animated image 添加interactions
' H9 u; R# l( B; f! F3 x2 ^% A
$ p Q; j( [; Z0 `' n& L8 e
2 c9 |" F# k4 [6 S" j. c/ R
$ H5 t( N( V' H' L4 \5 \' |6 V
同样也要执行C++代码
& i& r( ^" E, j
1 T& U1 J. e/ F2 V- //animation.isReverse() 判断是否是暂停状态0 d- e; m6 r" z. P% @& X7 Y7 H, L2 X
- animation.startAnimation(!animation.isReverse(), false, true);6 ~2 g) E3 x+ b( ?+ B$ _
复制代码 * M, H$ f& ^$ c
二、仿真运行" d/ W6 o' T, l( m8 P9 G4 l! H: i
MainViewBase.hpp 文件会生成两个回调函数:1 o- t7 {6 m ^ m- ?" j
1、void buttonCallbackHandler(const touchgfx::AbstractButton& src);
( q& s2 q- Z7 ~& u9 i) b/ H) F3 i2、void animationEndedCallbackHandler(const touchgfx::AnimatedImage& src);
' d1 L7 [2 W# a" d其具体实现方法在MainViewBase.cpp。可以看到我们在touchGFX添加的C++代码自动生成到这两个回调函数中。- T* `4 Z4 N1 P& n$ R6 M
. G, W! e# N4 m; \. l' r9 @) h- /*********************************************************************************/
- b4 L* c) T; H7 Z, M* |" t, [ - /********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/7 x3 W* J" N' S- I8 B
- /*********************************************************************************/
& w4 g* X) S/ I4 [1 @0 x& M9 s( l - #ifndef MAINVIEWBASE_HPP/ P8 p9 K2 P5 L5 f
- #define MAINVIEWBASE_HPP
5 l) `5 n! v( ? - ' e" C2 ?; q5 x
- #include <gui/common/FrontendApplication.hpp>
3 W$ f3 l9 j' R3 j; q - #include <mvp/View.hpp>: V7 U. r* T$ L0 A
- #include <gui/main_screen/MainPresenter.hpp>) t6 K" n2 T3 n0 P- g! n0 v
- #include <touchgfx/widgets/Box.hpp>
b5 e1 R l# T5 r, U6 v p - #include <touchgfx/widgets/Image.hpp>
& k* F5 u5 ]: w- \/ a, t4 E; c - #include <touchgfx/widgets/AnimatedImage.hpp>
4 z4 k! u/ q, q) K9 A7 | ?- p - #include <touchgfx/widgets/ButtonWithLabel.hpp>9 X/ L" j0 [/ P; h* ?& H. z0 h
- + |; q1 _1 e% |* V0 G. M7 D
- class MainViewBase : public touchgfx::View<MainPresenter>- ]$ W: T4 g$ [
- {$ o: y% b; w1 A* Q
- public: i. l9 w! {- D
- MainViewBase();
! u5 s% Y7 o- H- d+ M/ D: x0 @ - virtual ~MainViewBase() {}' B/ G8 W3 `2 M& [+ |
- virtual void setupScreen(); M" X% F x1 \! a
9 w" |3 X1 w" N- protected:
' u7 Y$ c0 k# s- A2 B" n8 t i - FrontendApplication& application() {# J* w2 j3 e) U7 o: o$ {
- return *static_cast<FrontendApplication*>(touchgfx::Application::getInstance());" h& k; a5 a( [! o+ h' k
- }2 Q1 D Y" m- s- l) ?
- , |1 Y: H, h& I [- K* G. j) g1 m! N
- /*
8 E) Q0 @# \, u$ ]1 `$ ] - * Member Declarations6 O, J; \3 y" t" I
- */
3 m" \0 ^2 C; q) w - touchgfx::Box __background;
0 E! b5 e6 |4 ?' m/ e - touchgfx::Image background;0 U, v" b) b4 L
- touchgfx::AnimatedImage animation;
) t$ l \$ R" @4 L- { - touchgfx::ButtonWithLabel btn_start_stop;
3 g# k* H2 m* ?" I& i - * U% m" P) q8 b' ^8 ]* M1 V6 d
- private:/ ]5 ?7 h0 D! U; q4 B
- t2 G: l w, x, H
- /*
: _. p& k0 q7 A- S - * Callback Declarations
* k& Z. D h' F( s7 |8 j! E - *// {2 m( s: J7 u0 P* M+ m7 n
- touchgfx::Callback<MainViewBase, const touchgfx::AbstractButton&> buttonCallback;, s9 B* C. K4 \; @/ i6 K# j. G
- touchgfx::Callback<MainViewBase, const touchgfx::AnimatedImage&> animationEndedCallback;
2 W5 H$ t- R, w! Q
# C4 F* g( J/ m3 H- /*+ L* p. n+ O* K0 d5 a, p
- * Callback Handler Declarations
' h: B& j5 x, f, H6 ~$ n% D - */
# L1 `! `4 _+ J# I - //TouchGFX自动生成
$ k/ {% ]' D: _7 O: B. r$ b - void buttonCallbackHandler(const touchgfx::AbstractButton& src);. M$ K; I5 u: a; H& |
- void animationEndedCallbackHandler(const touchgfx::AnimatedImage& src);
( [8 ~2 T5 P9 ?( ^/ n; r - $ ~0 d" u' [' R
- };
# s+ m; b2 k4 }3 y! Z - & g1 G3 a1 o% P" Q% b2 w$ F3 g
- #endif // MAINVIEWBASE_HPP
! @1 b* R" n/ M E
7 G ~2 m) ]: k$ R. S
复制代码 " R- J5 u* T; N# A- U$ }$ k; J2 f
如果不知道Animated Image有哪些方法和属性,可以在MainviewBase.hpp包含的头文件里找到引用的对应的头文件,右键打开即可找到Animated image的类文件,其中包含了Animated Image所有的方法和属性。
1 w+ n: _0 {! E7 a2 q2 e
2 P1 O3 E# Z$ ]! x) g$ w( Z$ C# {& t5 {+ Q# w5 ^ _2 ~
|