使用Panel和TextLine模拟Android的Toast

前面讲的都是一些理论的东西,解释了下部分SG2D的API。这篇文章将使用前面的知识做一个小功能——模拟Android的Toast。

我先解释一下Android的Toast,做过Android的应该都了解这个东西,一个很方便的消息提示栏。没做过Android但用过的看完下面这张图你就知道我说的是什么了

 

下面是我制作的显示效果

 

看上图你就会知道,这个比Android的Toast的样式更多。这个东西我用了一个Panel做背景,用了一个TextLine来展示文本。

我定义了如下4种样式

        /** 展示样式枚举 */
        enum TOAST_STYLE
        {
            /**模拟Android默认黑灰色Toast*/
            ANDROID_DEFAULT,
            /**模拟Android白色Toast*/
            ANDROID_LIGHT,
            /**模拟iOS提示样式*/
            iOS,
            /**模拟格斗江湖向上移动并变透明样式*/
            TDZM
        };

 

样式多并不代表使用就会复杂,其使用方法和Android的Toast一样简单。使用我的Toast展示上图三条消息的代码要多少呢?40行。

    GeequlimExtends::stage = pStage;
    (new Toast("格斗江湖样式",10,Toast::TDZM) )->show();
    (new Toast("iOS提示样式",30,Toast::iOS) )->show();
    (new Toast("Android Toast样式",30) )->show();

 

Toast类构造函数的三个参数为:提示文本、展示时间、展示样式

Toast调用show方法后会将Toast对象添加到舞台的顶层呈现,在展示时间到后移除舞台并自动调用release()方法。

在使用Toast前需要定义GeequlimExtends::stage舞台对象。

 

好了,知道了作用和用法,下面就给出Toast的实现代码

 1 #ifndef __TOAST_H__
 2 #define __TOAST_H__
 3 #include "sg2d/../ui/container/Panel.h"
 4 
 5 namespace GeequlimExtends
 6 {
 7     extern Stage* stage;
 8 }
 9 namespace GeequlimComponents
10 {
11     /**模拟Android Toast的消息提示框
12     * ★调用 show()方法来显示Toast对象在舞台最顶层
13     * ★show()调用后会自动调用release()
14     */
15     class Toast : public SG2DUI::Panel
16     {
17     public:
18         /**展示时间枚举*/
19         enum TOAST_DURATION
20         {
21             INSTANT=2,
22             SHORT=5,
23             LONG=10,
24             MORE_LONG=15
25         };
26         /** 展示样式枚举 */
27         enum TOAST_STYLE
28         {
29             /**模拟Android默认黑灰色Toast*/
30             ANDROID_DEFAULT,
31             /**模拟Android白色Toast*/
32             ANDROID_LIGHT,
33             /**模拟iOS提示样式*/
34             iOS,
35             /**模拟格斗江湖向上移动*/
36             TDZM
37         };
38         Toast(void);
39         /** 创建一个Toast对象
40         * text 提示文本
41         * duration 提示时间,单位为秒,默认为Toast::TOAST_DURATION的SHORT(5秒)
42         * style 主题样式,Toast::TOAST_STYLE枚举,默认为Android黑
43         */
44         Toast(const char* text , float duration=SHORT ,TOAST_STYLE style=ANDROID_DEFAULT );
45         virtual ~Toast(void);
46         
47         /**设置样式属性*/
48         inline void setStyle(TOAST_STYLE style ){m_style = style;};
49         /**获取样式属性*/
50         inline TOAST_STYLE getStyle()const{return m_style;} 
51 
52         /**获取字体样式,直接作用于显示文本*/
53         inline SG2D::FontDescription* getFontDescription()const{ return m_textLine; } ;
54         /**设置字体样式*/
55         void setFont(SG2D::FontDescription* fontDscrpt);
56 
57         /**获取提示文本*/
58         const String getText()const;
59         /**设置提示文本*/
60         void setText(const char* text);
61 
62         /**获取显示时间长度*/
63         inline const  float getDuration()const{ return m_duration; }
64         /**设置显示时间长度*/
65         inline void setDuration( float duration  ){ m_duration=duration;}
66 
67         /**显示Toast提示框
68         *★调用show方法会自动调用release()
69         */
70         void show();
71     protected:
72         SG2DUI::TextLine* m_textLine;
73         SG2D::ScaleBounds* m_pScaleBounds;
74         float m_duration;
75         TOAST_STYLE m_style;
76         bool boFontWasModified;
77         void updateAppearence();
78     private:
79         typedef    Panel super;
80         
81         void hide(void* param, unsigned int twice);
82     };
83 };
84 #endif

 

 

。。。。。。。。。。。。。。。实现代码懒得贴了

。。。。。。。。。。。。。。。。。。。。。。。。。。。。我把代码和用到的图片资源传网盘了,需要的下载来看一下吧。

 

点击下载源码和所需资源

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。