`
#天琪#
  • 浏览: 160379 次
  • 性别: Icon_minigender_2
  • 来自: 长沙
社区版块
存档分类
最新评论

运行时加裁FLEXSKIN

    博客分类:
  • FLEX
阅读更多
本文来源于 冰山上的播客 http://xinsync.xju.edu.cn , 原文地址:http://xinsync.xju.edu.cn/index.php/archives/1953


现在有许多关于如何为Flex程序加上皮肤的很好的资料。简单来说:Flex支持两种加载皮肤的方法:graphical和programmatic。graphical方法是在Flash,Photoshop,Fireworks等工具中创建图形资源,并把他们嵌入到你的Flex程序中。programmatic方法是创建一个为控件定义skin的ActionScript类。正如你猜测的那样,graphical方法比较简单,programmatic方法则比较强大。
这两种方法共同的一个缺点就是:为了能应用skin这些资源(graphical方法中的SWF/PNG/GIF/其他, programmatic方法中的AS类)都必须在编译时就是可用的。必须如此吗?在这篇文章中我将介绍一个巧妙的方法让graphical skins在运行时加载(通过一个带有源代码的示例)。
为了让这个例子尽量简单,我将创建一个允许Button控件动态加载皮肤的Flex程序。这个程序将在运行时连接到一个SWF,加载皮肤并且把它应用到Button控件。为了使它简单我将使用NJ文章中提供的皮肤模板文件,把RadioButton皮肤应用到Button控件。
第一步:为skin资源创建一个wrapper SWF
Skin资源在上述的skin模板文件中。我希望创建一个Flex程序可以在运行时加载并且可以从中提取适当资源的wrapper SWF,在这个例子中它就是RadioButton控件的四个symbol。下面是源码:
package
{
import flash.display.Sprite;
public class Wrapper extends Sprite
{
[Embed(source=”flex_skins.swf”,symbol=”RadioButton_upIcon”)]
public var rbUpSkin: Class;
[Embed(source=”flex_skins.swf”,symbol=”RadioButton_downIcon”)]
public var rbDownSkin: Class;
[Embed(source=”flex_skins.swf”,symbol=”RadioButton_disabledIcon”)]
public var rbDisabledSkin: Class;
[Embed(source=”flex_skins.swf”,symbol=”RadioButton_overIcon”)]
public var rbOverSkin: Class;
}
}
第二步:把这个wrapper SWF放到你的服务器上
Flex程序需要从一个地方加载这个wrapper SWF!
第三步:在你的Flex程序中,使用Loader来加载这个wrapper SWF
我创建了一个叫做ClassLoader的有用的类来包装与加载SWF有关的功能并提取了这个类。下面是关键代码:
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);

request = new URLRequest(swfLib);
var context:LoaderContext = new LoaderContext();
context.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);
loader.load(request, context);
注意这个Loader把SWF加载到了一个ApplicationDomain中,当前的domain是它的parent。这是保证程序可以访问加载的类以及其中的资源的关键。
第四步:从加载的SWF中获得类并将它实例化。
这里我们使用一个一致的类名(这个例子中,是“Wrapper”)来加载类:
var wrapperClass:Class = loader.contentLoaderInfo.applicationDomain.getDefinition(className) as Class;
var wrapper:Object = new wrapperClass();
第五步:使用setStyle应用skins
你可以把skins应用到一个Button实例或者Button的所有实例。下面是方法:
StyleManager.getStyleDeclaration(”Button”).setStyle(”upSkin”, wrapper.rbUpSkin);
StyleManager.getStyleDeclaration(”Button”).setStyle(”downSkin”, wrapper.rbDownSkin);
StyleManager.getStyleDeclaration(”Button”).setStyle(”disabledSkin”, wrapper.rbDisabledSkin);
StyleManager.getStyleDeclaration(”Button”).setStyle(”overSkin”, wrapper.rbOverSkin);
第六步:运行程序
我的例程(点击这里察看,可以“View Source”)展示了一个文本域,你可以向其中你输入wrapper SWF的URL(点击这里)。输入wrapper SWF的URL,点击Apply按钮,你会看到按钮现在看起来像一个特大型的单选按钮。当你将鼠标放在上面或者点击它的时候,你会发现它的外观会改变并显示适当的skin。如果你创建了自己的wrapper SWF并且其中包含了具有相同类名(rbUpSkin,等)的不同symbols,你可以把这个例程指向并加载它,从而显示不同的skins集合。
为什么你想要这样做呢?动态加载skin提供了一个难以置信的强大的功能:你可以让你的用户把他们的skin加载到你的程序中。想象一下一个用Flex创建的像Winamp一样的MP3播放器吧。开发者不需要为这个程序创建一个skin库,他只需要公布一个设置skin SWF(比如在参数对话框中)的UI并且让用户从一些团体创建的skin中任意选择。同样重要的是,开发者可以很精确地控制哪些控件可以加载skin那些需要保持原样(只在需要的控件上调用setStyle)。最后,把skins放在程序SWF外部将使得程序文件的大小不会因为skin文件的扩散而急速增加。
分享到:
评论

相关推荐

    flexskin天蓝色皮肤.rar

    FlexSkin是一款广泛应用于软件开发中的皮肤库,尤其在创建具有美观界面的桌面应用程序时非常受欢迎。天蓝色皮肤是FlexSkin库中的一个特定主题,它为用户提供了一种清新、舒缓的视觉体验,常用于给软件界面增添现代感...

    delphi实现类似QQ窗体伸缩效果

    - 要实现类似QQ的皮肤效果,首先需要引入皮肤库,比如 popular 的 TMS Skin VCL 或 TMS FlexSkin。这些库提供了丰富的皮肤资源和方便的皮肤应用接口。 - 使用 SkinManager 组件管理皮肤,通过 SkinName 属性设置所...

    基于粒度计算的旅游定制公交初设线路优选——以长岛县定制旅游公交为例.pdf

    基于粒度计算的旅游定制公交初设线路优选——以长岛县定制旅游公交为例.pdf

    CSDNApp_242.apk

    CSDNApp_242.apk

    C++如何读取ZIP内容文件

    C++如何读取ZIP内容文件

    Java毕业设计-springboot-vue-医院后台管理系统(源码+sql脚本+29页零基础部署图文详解+32页论文+环境工具+教程+视频+模板).zip

    资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档切片混合解析和叠加展示风格,请放心使用。 2:29页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解),旨在为更多的人甚至零基础的人也能运行、使用和学习。 3:配套毕业论文,万字长文,word文档,支持二次编辑。 4:范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关电子教程、视频教学资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于B/S网络结构,在IDEA中开发。服务端用Java并借Spring Boot框架搭建后台。前台采用支持HTML5的VUE框架。用MySQL存储数据,可靠性强。 能学到什么: 使用Spring Boot搭建后台。VUE框架构建前端交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。

    水下机器人AUV的路径规划及基于模型预测控制MPC的跟踪框架实现与解析,4-IEEE trans顶刊复现,水下机器人AUV的路径规划和基于模型预测控制MPC的跟踪框架 参考文献和建模过程请参考图片中

    水下机器人AUV的路径规划及基于模型预测控制MPC的跟踪框架实现与解析,4-IEEE trans顶刊复现,水下机器人AUV的路径规划和基于模型预测控制MPC的跟踪框架。 参考文献和建模过程请参考图片中的文章,本代码包括路径规划和MPC路径跟踪两个模块,两个模块均采用优化求解器求解,考虑了AUV的水动力学模型,结果是2D空间内的平面路径。 输出的结果请见下图 ,关键词:IEEE trans顶刊复现; 水下机器人AUV; 路径规划; 模型预测控制MPC; 跟踪框架; 优化求解器; 水动力学模型; 2D空间平面路径。,基于IEEE Trans顶刊复现的AUV路径规划与MPC跟踪框架研究

    《已调试》springboot 网站建设服务系统(源码+sql).zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    Java毕业设计-springboot-vue-购物推荐网站(源码+sql脚本+29页零基础部署图文详解+28页论文+环境工具+教程+视频+模板).zip

    资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档切片混合解析和叠加展示风格,请放心使用。 2:29页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解),旨在为更多的人甚至零基础的人也能运行、使用和学习。 3:配套毕业论文,万字长文,word文档,支持二次编辑。 4:范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关电子教程、视频教学资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于 B/S 网络结构,在 IDEA 中开发。服务端用 Java 并借 Spring Boot 框架搭建后台。前台采用支持 HTML5 的 VUE 框架。用 MySQL 存储数据,可靠性强。 能学到什么: 使用Spring Boot搭建后台。VUE 框架构建前端交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。

    2023-04-06-项目笔记 - 第三百八十二阶段 - 4.4.2.380全局变量的作用域-380 -2025.01.18

    2023-04-06-项目笔记-第三百八十二阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.380局变量的作用域_380- 2025-01-18

    基于springboot+vue社区老年人帮扶系统-6u870vlh.zip

    基于springboot+vue社区老年人帮扶系统_6u870vlh.zip

    Simulink光伏储能VSG仿真模型:完美波形运行,实现光储一次调频、削峰填谷及直流母线电压控制功能,simulink仿真模型光伏储能VSG,加电容,正常运行,波形完美一一光储一次调频、储能削峰填谷

    Simulink光伏储能VSG仿真模型:完美波形运行,实现光储一次调频、削峰填谷及直流母线电压控制功能,simulink仿真模型光伏储能VSG,加电容,正常运行,波形完美一一光储一次调频、储能削峰填谷、 直流母线电压控制。 2018b及以上都可运行哈 ,simulink仿真;光伏储能;VSG;加电容;正常运行;波形完美;光储一次调频;储能削峰填谷;直流母线电压控制;2018b及以上版本。,Simulink光伏储能VSG模型:电容增强与优化调频调压功能解析

    2025年高级生命支持(ACLS)理论考核试题库及答案.docx

    2025年高级生命支持(ACLS)理论考核试题库及答案.docx

    ARM compiler version5.06

    ARM compiler version5.06

    《已调试》springboot 学生成绩请假信息管理系统002(源码+sql).zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    Java毕业设计-springboot-vue-基于保信息学科平台(源码+sql脚本+29页零基础部署图文详解+29页论文+环境工具+教程+视频+模板).zip

    资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档切片混合解析和叠加展示风格,请放心使用。 2:29页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解),旨在为更多的人甚至零基础的人也能运行、使用和学习。 3:配套毕业论文,万字长文,word文档,支持二次编辑。 4:范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关电子教程、视频教学资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于B/S网络结构,在IDEA中开发。服务端用Java并借Spring Boot框架搭建后台。前台采用支持HTML5的VUE框架。用MySQL存储数据,可靠性强。 能学到什么: 使用Spring Boot搭建后台。VUE框架构建前端交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。

    Greenplum Platform Extension Framework 6.11.0 for RHEL 8 gpdb pxf

    Greenplum Platform Extension Framework 6.11.0 for RHEL 8 pxf-gp7-6.11.0-2.el8.x86_64.rpm(97.4 MB) Dec 18, 2024 Dec 19, 2024 c9b2994c61efbb990bb02480c29eeede5415b2af42496b0d1f6a49b200889c46 c5f2ff9b8de2b5120d74fca86e36582c

    Java毕业设计-springboot-vue-疫情下图书馆管理系统(源码+sql脚本+29页零基础部署图文详解+28页论文+环境工具+教程+视频+模板).zip

    资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档切片混合解析和叠加展示风格,请放心使用。 2:29页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解),旨在为更多的人甚至零基础的人也能运行、使用和学习。 3:配套毕业论文,万字长文,word文档,支持二次编辑。 4:范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关电子教程、视频教学资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于B/S网络结构,在IDEA中开发。服务端用Java并借Spring Boot框架搭建后台。前台采用支持HTML5的VUE框架。用MySQL存储数据,可靠性强。 能学到什么: 使用Spring Boot搭建后台。VUE框架构建前端交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。

    AndroidFileTransfer

    Android File Transfer for mac

    高海拔输油管道气保护药芯焊丝半自动焊工艺研究与应用.pdf

    高海拔输油管道气保护药芯焊丝半自动焊工艺研究与应用.pdf

Global site tag (gtag.js) - Google Analytics