加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Study Flex《Flex实时加载Skin》

发布时间:2020-12-15 03:45:46 所属栏目:百科 来源:网络整理
导读:实时加载 Flex 皮肤 目前,有很多关于如何在你的 Flex 程序中绘制皮肤的资源。 概述:Flex 支持两种绘制皮肤的方法:贴图和编程。贴图皮肤是在Flash、Photoshop、Firework等软件中创建皮肤资源图像,然后将他们导入(embed)到 Flex 程序中;编程皮肤是建立
实时加载 Flex 皮肤
目前,有很多关于如何在你的 Flex 程序中绘制皮肤的资源。
概述:Flex 支持两种绘制皮肤的方法:贴图和编程。贴图皮肤是在Flash、Photoshop、Firework等软件中创建皮肤资源图像,然后将他们导入(embed)到 Flex 程序中;编程皮肤是建立一个通过程序定义一个控件皮肤的 ActionScript 类。你可能猜到,贴图皮肤比较简单,编程皮肤可以实现更加丰富的效果。
这两个方法都有一个共同的缺点是,皮肤资源(对于贴图来说是 SWF/PNG/GIF 等文件,对于编程来说是那个 AS 类)必须在程序编译时就被包括。怎么改进呢?在这篇文章中我将演示一个如何实时加载贴图皮肤的巧妙方法。
为了使这个例子尽可能的简单,我仅建立一个只有一个按钮的 Flex 程序,这个按钮的皮肤是动态添加的。本程序将实时取得一个皮肤 SWF 文件,加载皮肤,然后把它们应用到按钮上。

第一步:为皮肤资源建立一个外壳 SWF
目的,有了这个外壳 SWF,我的 Flex 程序就可以实时加载皮肤中适当的资源
package
{
import flash.display.Sprite;
public class Wrapper extends Sprite
??? [Embed(source="flex_skins.swf",symbol="RadioButton_upIcon")]
??? public var rbUpSkin: Class;

??? public var rbDownSkin: Class;

??? public var rbDisabledSkin: Class;

??? public var rbOverSkin: Class;
}
译者注:上面代码需要用 mxmlc 编译,不用使用 Flex Builder 去建项目。
第二步:将这个外壳 SWF 放到服务器上
Flex 程序需要从某个地方加载皮肤呀。
第三步:在 Flex 程序中使用 Loader 加载外壳 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);
第四步:从加载的 SWF 中生成类,然后实例化
var wrapperClass:Class = loader.contentLoaderInfo.applicationDomain.getDefinition(className) as Class;
var wrapper:Object = new wrapperClass();
第五步:利用 setStyle 应用皮肤
这个很简单了。
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);
第六步:运行程序

那么为什么要这么做呢?动态的皮肤提供给你一个难以置信而格外有力的功能:你可以让你的用户在你的程序上使用他们自己的皮肤。想象一下一个像 Winamp 的 Flex Mp3 播放器。开发人员并不需要为程序建立一个皮肤库,任何人都可以发布一个 UI 通过设置皮肤 SWF (可能在一个配置窗口中)让用户选择任一在社区中提供的皮肤。同样重要的,开发者也有能力来控制哪个皮肤可以被替换,哪个皮肤只能使用原来的皮肤(仅仅对相应的控件调用 setStyle 即可)。最后,将皮肤放到程序的外面,可以有效的保持程序的体积不会太大,肯定要比包含皮肤时要小。

注:本文转载:

http://hi.baidu.com/fijxhhedqkklnxr/item/02c432a2dfcbbbda5af19101

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读