Flash CS3 中改变组件的样式
2008-10-28 20:44 宝宝合凤凰 阅读(1200) 评论(1) 编辑 收藏 举报
Flash CS3 中的 Actionscript 版本为 3.0(AS3.0),在面向对象编程方面对 AS2.0 做了很多改动,熟悉 AS2.0 的朋友估计又要犯迷糊了,一番学习是免不了的了。例如在改变现有组件的样式(字体、字号、颜色)时,我搜遍了百度和 Google 也没发现前边的人是怎么做的。只发现 CSDN 上一位网友在问,回答者也只有一位,还不知道到底正确与否。
我也是胡乱翻书加上摸索,有了以下的方法。以改变按钮元件的样式为例。
1,改变所有按钮的样式:
//加载样式管理器
import fl.managers.StyleManager;
//定义文本格式对象
var tf:TextFormat = new TextFormat();
tf.size = 12; //字号,单位是像素
//改变按钮文本格式
StyleManager.setComponentStyle(Button, "textFormat", tf); //改变所有按钮样式
//改变所有标签样式参考以下语句:
StyleManager.setComponentStyle(Label, "textFormat", tf);
2,改变某一个按钮的样式:
aButton.setStyle("textFormat", tf);
//另外,请测试一下我的“网络照相机”:
http://www.why100000.com/test/flash_camera/cut-camera-save.html
修改ListSkin,然后设置
StyleManager.setComponentStyle(List,"contentPadding", 1);
就这么简单。。。。我居然网上找了N天死活找不到解决办法,无语了,还是被自己“研究”了出来
Flex实时加载Skin
转载自http://hi.baidu.com/ming871/blog ... 2979d5d439c916.html Flex实时加载Skin2008-08-13 21:36一篇翻译的文章,来自 The Kiwi Project ,这种方法很有用,但是唯一的问题就是,在加载皮肤的过程中,用户等待的问题。如果皮肤文件比较大,没有加载上来之前,程序可以说是无反应的,这样需要我们以某种方式提醒用户当前程序的工作。 实时加载 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; [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; } } 译者注:上面代码需要用 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 contextoaderContext = 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 即可)。最后,将皮肤放到程序的外面,可以有效的保持程序的体积不会太大,肯定要比包含皮肤时要小。 |