使用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
。。。。。。。。。。。。。。。实现代码懒得贴了
。。。。。。。。。。。。。。。。。。。。。。。。。。。。我把代码和用到的图片资源传网盘了,需要的下载来看一下吧。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。