Flexstore源码解析1 ViewStack+ToggleButtonBar实现幕布特效

本文介绍如何使用ViewStack和ToggleButtonBar实现幕布切换效果。通过创建自定义控件并设置过渡动画,模仿flexstore应用中的页面切换特效。

第一棵树(上):利用ViewStack+ToggleButtonBar实现flexstore中的幕布特效

clip_image001

目标:学会制作幕布切换场景的动画效果,仿制flexstore中3个主页面切换的特效。

1. 首先我们来分析在Flexstore.mxml的成分,eclipse中会列出这个文件的大纲outline。

clip_image003

同样我们可以打开Flexstore.mxml这个文件,看到里面有很多as代码,函数,有mx标签等。为了把注意力集中到我们想要了学习的幕布切换的功能上来,我们先剔除这个文件中可以无视的内容。

clip_image005我们可以新建一个flex工程demo1来完成我们想达到的效果,新建一个叫flexstore的application mxml(一下所出现的flexstore.mxml如没有所特别说明都是指的这个demo1中的flexstore.mxml) 在application按照上图的结构拖入控件。

2.然后仿照flexstore,新建3个自定义控件,来模拟HomeView、ProductsView、SupportView。

clip_image007

clip_image009

我们给这个HomeView打上红色的底色和简单文字,以示区别。ProductsView、SupportView分别以黄色和蓝色显示底色。

clip_image011好,3个自定义组件定义完了之后,我们在主程序也就是flexstore中建立它与其他3个页面之间的关联。

注意,在操作前,我们把demo1中application标签中的xmlns:ns1="*"改为xmlns="*",这样我们就可以直接以文件名的标签形式在flexstore.mxml调用同目录下所有自定义组件了。

clip_image013点击ViewStack控件,会出现view管理按钮,点击加号。在弹出的对话框中进行下图设置,不错这里就是要把做好的3个view控件往主界面flexstore中添加。同样的把另外2个view也依次添加进去

clip_image015

添加完后,我们看下flexstore.mxml的代码

<mx:ViewStack id="storeViews" width="100%" height="100%">

<HomeView label="Home" width="100%" height="100%">

</HomeView>

<ProductsView label="Products" width="100%" height="100%">

</ProductsView>

<SupportView label="Support" width="100%" height="100%">

</SupportView>

</mx:ViewStack>

<mx:ViewStack></mx:ViewStack>之间被添加了3个自定义view。

3.Run一下,我们的demo,会发现当前只能显示第一个view,HomeView。那么如何像flexstore这个案例一样点击按钮切换不同的view呢?

clip_image017

我们在flexstore这个案例中可以看到,3个view是通过点击菜单bar上的按钮来产山页面切换效果的。clip_image019

接下来我们就个demo中导航条加入按钮。

clip_image021我们再来重温下demo的控件结构,大家可以看到之前我还定义了一个ToggleButtonBar控件,看来这个控件就是用来定义按钮用的。我们在design界面点击这个控件,会发现,诶!和ViewStack一样它也有一排加减号按钮,我们点击下加号看看,对弹出的对话框进行如下设置。

clip_image023

这时我们会发现ToggleButtonBar上多了4个按钮,其中前3个是我们需要的,而后面一个是之前我们设置对话框时,flex builder给我自作主张加上的。clip_image025

那么我们就点击减号把最后一个按钮删除掉。

clip_image027

Ok,切换到source界面,看下flexstore.mxml的代码。我们可以看到,ToggleButtonBar设置了dataProvider属性,dataProvider什么意思呢?顾名思义数据提供者,id=storeViews的这个控件,也就是我们的ViewStack控件提供了ToggleButtonBar建立导航按钮时所需要的数据。

<mx:ApplicationControlBar width="100%" id="abc">

<mx:ToggleButtonBar dataProvider="storeViews">

</mx:ToggleButtonBar>

</mx:ApplicationControlBar>

好,再让我们Run一下这个application。恩,很好,点击3个按钮已经能切换页面了。

clip_image029

4.细心的你会发现,我的demo1中切换页面时是如此的生涩,没有过渡可言,直接蒙太奇式的方式显然不能满足你们的需要。Ok,那么接下来我们就来加上过渡特效。

点击flexstore.mxml中ViewStack控件,为每一个view设置effect。方法如下。选中某个view之后,点击Flex Propert的第二个小按钮clip_image031

clip_image033

下发会列出该控件所支持的所有事件特效等。在Effects下的hideEffect和showEffect设置WipeUp和WipeDown,表示的是当这个view要被show出来的时候是从下网上慢慢显示,在消失的时候是从上往下慢慢消失,我这里说倒了也有可能,这种东西我从来不记,设错了,就换一个。观众朋友们可能会说这个WipeDown和WipeUp是哪里冒出来的干活?我查了下api帮助,WipeDown是mx.effects包下的一个class,用来对Object也就是flex中拖出来或者自定义,或者new出来的控件对象进行动画特效一个类。 此外还有WideOut WideIn等各类特效,自己一个个替换看效果的学习最为直接,我这里就不啰嗦了。

clip_image035

大家可以看到为控件加入了effects后控件的代码中就会加入showEffect、hideEffect等事件。

<HomeView label="Home" width="100%" height="100%" showEffect="WipeDown" hideEffect="WipeUp">

</HomeView>

好了,为ViewStack下的3个view都添加完effects后,我们再来Run一下application。

哈哈,目的达到,除了界面难看点外,动画效果和正版的flexstore几乎一模一样。

以下给出了demo1工程源文件的下载,大家也一步一步做做看,利用ViewStack+toggleButtonBar来实现幕布特效吧。

至此,对于第一棵树的上半部分学习完毕。

采用PyQt5框架与Python编程语言构建图书信息管理平台 本项目基于Python编程环境,结合PyQt5图形界面开发库,设计实现了一套完整的图书信息管理解决方案。该系统主要面向图书馆、书店等机构的日常运营需求,通过模块化设计实现了图书信息的标准化管理流程。 系统架构采用典型的三层设计模式,包含数据存储层、业务逻辑层和用户界面层。数据持久化方案支持SQLite轻量级数据库与MySQL企业级数据库的双重配置选项,通过统一的数据库操作接口实现数据存取隔离。在数据建模方面,设计了包含图书基本信息、读者档案、借阅记录等核心数据实体,各实体间通过主外键约束建立关联关系。 核心功能模块包含六大子系统: 1. 图书编目管理:支持国际标准书号、中国图书馆分类法等专业元数据的规范化著录,提供批量导入与单条录入两种数据采集方式 2. 库存动态监控:实时追踪在架数量、借出状态、预约队列等流通指标,设置库存预警阈值自动提醒补货 3. 读者服务管理:建立完整的读者信用评价体系,记录借阅历史与违规行为,实施差异化借阅权限管理 4. 流通业务处理:涵盖借书登记、归还处理、续借申请、逾期计算等标准业务流程,支持射频识别技术设备集成 5. 统计报表生成:按日/月/年周期自动生成流通统计、热门图书排行、读者活跃度等多维度分析图表 6. 系统维护配置:提供用户权限分级管理、数据备份恢复、操作日志审计等管理功能 在技术实现层面,界面设计遵循Material Design设计规范,采用QSS样式表实现视觉定制化。通过信号槽机制实现前后端数据双向绑定,运用多线程处理技术保障界面响应流畅度。数据验证机制包含前端格式校验与后端业务规则双重保障,关键操作均设有二次确认流程。 该系统适用于中小型图书管理场景,通过可扩展的插件架构支持功能模块的灵活组合。开发过程中特别注重代码的可维护性,采用面向对象编程范式实现高内聚低耦合的组件设计,为后续功能迭代奠定技术基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值