使用Panel和TextLine模拟Android的Toast
16lz
2021-12-04
前面讲的都是一些理论的东西,解释了下部分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 GeequlimComponents10 {11 /**模拟Android Toast的消息提示框12 * ★调用 show()方法来显示Toast对象在舞台最顶层13 * ★show()调用后会自动调用release()14 */15 class Toast : public SG2DUI::Panel16 {17 public:18 /**展示时间枚举*/19 enum TOAST_DURATION20 {21 INSTANT=2,22 SHORT=5,23 LONG=10,24 MORE_LONG=1525 };26 /** 展示样式枚举 */27 enum TOAST_STYLE28 {29 /**模拟Android默认黑灰色Toast*/30 ANDROID_DEFAULT,31 /**模拟Android白色Toast*/32 ANDROID_LIGHT,33 /**模拟iOS提示样式*/34 iOS,35 /**模拟格斗江湖向上移动*/36 TDZM37 };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
。。。。。。。。。。。。。。。实现代码懒得贴了
。。。。。。。。。。。。。。。。。。。。。。。。。。。。我把代码和用到的图片资源传网盘了,需要的下载来看一下吧。
点击下载源码和所需资源
更多相关文章
- android Theme
- Momo自定义DialogFragment
- Android(安卓)基本控件
- Android手势滑动Tab
- android中的heap是修改
- 使用命令行创建Android模拟器
- Android自定义对话框(Dialog)
- Android(安卓)入门 和 环境搭建
- 【Android】Android(安卓)UI 开发_问答_2