在Flex4新增加了一个包:spark.skins,这个包里面只有一个类:SparkSkin,而我们(非美工的程序员)通过这个class来实现任意自定义控件的样式。
通过上述关系可以得出如下的结论:
1、SparkSkin是一个Group类型的容器。(它继承与Group)
2、是全部Spark类的基础类,也就说全部的mx.spark的可视化控件的外观全部都是SparkSkin的子类)

注意Skin,这个类是SparkSkin的父类,同时Skin继承与Group。

Skin:
是SparkSkin的父类,例如ButtonBarSkin就是Skin的子类,如果想要自定义这部分组件的样式,则需要使用Skin。

SparkSkin:
是全部Spark类的基础类,也就说全部的mx.spark的可视化控件的外观全部都是SparkSkin的子类。

综上所述,用SparkSkin和Skin都可达到同样的效果。

在Flex4中,我们只需要将这个button的样式继承与SparkSkin或者Skin,然后在其中加入一些想要的内容即可,请看以下代码:

<?xml version="1.0" encoding="utf-8"?>
<s:SparkSkinxmlns:s="library://ns.adobe.com/flex/spark"xmlns:fx="http://ns.adobe.com/mxml/2009"><s:states><s:State name="up"/><s:State name="over"/><s:State name="down"/><s:State name="disabled"/></s:states><fx:Metadata>[HostComponent("spark.components.Button")]</fx:Metadata><s:Ellipse width="100%" height="100%"><s:fill><s:SolidColor color="#FFFF00“ color.over="#00FF00" color.down="#FF0000"/></s:fill><s:stroke><s:SolidColorStroke color="0x00FFFF" /></s:stroke></s:Ellipse><s:RichText id="labelElement"fontFamily="Myriad Pro"fontSize="11"color="0xBBBBBB"textAlign="center"horizontalCenter="0"verticalCenter="1"width="100%"></s:RichText>
</s:SparkSkin>

我们可以用以下几个方式将这个样式应用:
1、
Button{
skinClass: ClassReference("cn.xuedi.SelfButton");
}

2、

myButton.setStyle( "skinClass", Class(cn.xuedi.SelfButton));

3、

<Button skinClass="cn.xuedi.SelfButton" />

其中skinClass也是Flex4里面新增加的一个类,其作用就是设定当前这个组件的Skin。

主程序:

<?xml version='1.0' encoding='UTF-8'?>
<s:Application xmlns:s="library://ns.adobe.com/flex/spark"xmlns:fx="http://ns.adobe.com/mxml/2009"width="576" height="254" backgroundColor="#222222"><fx:Script><![CDATA[import com.rianote.flex.skin.Button;]]></fx:Script><s:Button x="54" y="56" width="77" height="32" label="Button"skinClass="com.rianote.flex.skin.Button"/>
</s:Application>
-----------------------------------------------------------------------------------------

以上代码解释:

1、
<s:SparkSkin
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:fx="http://ns.adobe.com/mxml/2009">
</s:SparkSkin>
含义:
如果要自定义控件样式,必须要要继承SparkSkin或者Skin。

2、
<fx:Metadata>[HostComponent("spark.components.Button")]></fx:Metadata>
含义:
我们要修改的是spark.components.Button的外形,Flex4新增了一个matadata tag:HostComponent
同时,Metadata也由原来的mx:变成了现在的fx,因为名称空间发生了改变。

3、
<s:states>
<s:State name="up"/>
<s:State name="over"/>
<s:State name="down"/>
<s:State name="disabled"/>
</s:states>
含义:
定义了Button的四种状态:up、down、over、disabled。这是Flex4新增的一种功能,用State来描述状态。
在Flex3的情况下,只能描述UI的不同状态,而在Flex4中,又赋予了State描述控件状态的功能。

4、
<s:Ellipse width="100%" height="100%"></s:Ellipse>
含义:
画一个圆形(椭圆形)的图形,而Ellipse也是Flex4新增一个包:spark.primitives里面的一个类。
spark.primitives里面定义了一些图形,例如:Ellipse、Rect、Path、Line等类。同样根据这些类名就可以得出是做什么用的。

5、
<s:fill>
<s:SolidColor color="#FFFF00" color.over="#00FF00" color.down="#FF0000"/>
</s:fill>
含义:
设定填充的方式(SolidColor)填充颜色值FFFF00的颜色,color.over是指鼠标移动上去后的颜色,color.down是鼠标按下时候的颜色。
引申一下,还有color.up、color.display,通过这些值就可以描述四种状态时的颜色。
注意:SolidColor外层必须要有<s:fill>否则会出现错误。fill是填充的意思。

6、
<s:stroke>
<s:SolidColorStroke color="0x0c0d0d" />
</s:stroke>
含义:
设定边线的颜色(SolidColorStroke)当然也可以设定诸如:color.up、color.display、color.down、color.over的颜色。
同样SolidColorStroke必须在stroke内部,而stroke的含义:设定边框。

7、我们在重新看一下这些代码的意义:
<s:Ellipse width="100%" height="100%">
<s:fill>
<s:SolidColor color="FFFF00" color.over="#00FF00" color.down="#FF0000"/>
</s:fill>
<s:stroke>
<s:SolidColorStroke color="#00FFFF" />
</s:stroke>
</s:Ellipse>
含义:
定义一个圆形(因为宽和高相等)然后填充一个0xFFFF00的颜色,并且设定鼠标移上、按下时的颜色值(color.over="#00FF00" color.down="#FF0000")
然后在定义一个边框,设定颜色为0x0c0d0d。

8、
<s:RichText id="labelElement"
fontFamily="Myriad Pro"
fontSize="11"
color="0xBBBBBB"
textAlign="center"
horizontalCenter="0"
verticalCenter="1"
width="100%">
</s:RichText>
含义:
上面的代码定义了Button中可以显示文字的部分。注意,id必须设定为labelElement,否则出错。其他的样式可以自行设定了。

主程序:
<s:Button x="54" y="56" skinClass="com.rianote.flex.skin.Button" height="32" width="77" label="Button"/>

我们要注意的地方:skinClass,这也是Flex4新增加的一个类,专门用来设定当前皮肤的properties,请注意skinClass只适用于Spark包里面的可视化控件。

以上就是通过继承SparkSkin、Skin和skinClass的方式很简单的实现自定义组件的皮肤。

Flex4 自定义皮肤详解相关推荐

  1. pandas dataframe中的列进行重新排序、倒排、正排、自定义排序详解及实践

    pandas dataframe中的列进行重新排序,pandas dataframe列重排.倒排.正排.自定义排序详解及实践 实施数据构建: import pandas as pd import nu ...

  2. Android Gradle 自定义Task详解二:进阶

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78523958 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...

  3. Android Gradle 自定义Task 详解

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/76408024 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...

  4. python数据处理常用函数_pytorch中的自定义数据处理详解

    pytorch在数据中采用Dataset的数据保存方式,需要继承data.Dataset类,如果需要自己处理数据的话,需要实现两个基本方法. :.getitem:返回一条数据或者一个样本,obj[in ...

  5. html 自定义打印模板,HTML+CSS入门 自定义模板详解

    本篇教程介绍了HTML+CSS入门 自定义模板详解,希望阅读本篇文章以后大家有所收获,帮助大家HTML+CSS入门.< 首先总的stylecss和大模板都是当初angel_Kitty学姐的,嗯, ...

  6. python构造自定义数据包_pytorch中的自定义数据处理详解

    pytorch在数据中采用Dataset的数据保存方式,需要继承data.Dataset类,如果需要自己处理数据的话,需要实现两个基本方法. :.getitem:返回一条数据或者一个样本,obj[in ...

  7. ASP.NET技巧:GridView控件自定义分页详解第一页

    ASP.NET技巧:GridView控件自定义分页详解 日期:2007年9月11日 作者: 查看:[大字体 中字体 小字体] <script src="../gg/info468.js ...

  8. C语言自定义类型详解

    C语言自定义类型详解 一.结构体 1.结构的声明 2.特殊的声明 3.结构的自引用 4.结构体变量的定义和初始化 5.结构体内存对齐 6.修改默认对齐数 7.结构体传参 二.位段 1.什么是位段 2. ...

  9. android 自定义xmlns,Android xmlns 的作用及其自定义实例详解

    Android xmlns 的作用及其自定义实例详解 xmlns:Android="http://schemas.android.com/apk/res/android的作用是: 这个是xm ...

  10. python中的opener_urllib2自定义opener详解

    urllib2.urlopen()函数不支持验证.cookie或者其它HTTP高级功能.要支持这些功能,必须使用build_opener()函数创建自定义Opener对象. 复制代码 代码如下: bu ...

最新文章

  1. Windows Server Containers 支持 Windows 开发者使用 Docker
  2. python怎么爬虎牙_使用python爬虫框架scrapy抓取虎牙主播数据
  3. faster rcnn resnet_Faster-rcnn 代码详解
  4. Kindle的对手来了?华为首款鸿蒙墨水平板国行发布时间曝光...
  5. 《PHP程序员面试笔试宝典》——如何巧妙地回答面试官的问题?
  6. php5.6 mysql5.5,PHP开发第一步,PHP5.6 + MySQL5.5 + Apache2.4环境搭建
  7. 内镜手术机器人行业调研报告 - 市场现状分析与发展前景预测
  8. Android编译环境——VMware虚拟机安装配置
  9. python删除文件夹无法访问_Python:pip和mu安装第三方库的小麻烦及解决方法
  10. Zbrush 2022 for Mac(数字雕刻和绘画程序)
  11. 拓端tecdat|用RSHINY DASHBOARD可视化美国投票记录
  12. 设置元素的高度为百分比,结果不起作用的解决方法
  13. 计算机系统大作业-程序人生
  14. openproj jvm erron 193
  15. 华为手机鸿蒙系统手机_华为推出鸿蒙系统2.0 明年华为手机将适配支持
  16. 了解BigDecimal常用坑,不迷路
  17. [面面面]一篇搞定计算机面试常见知识点(10w字更新中)
  18. RabbitMQ实现即时通讯
  19. eagleeye_EagleEye简介:户外视频监控分析和面部识别软件
  20. Kong Rate Limiting 插件详解

热门文章

  1. Python 开发环境Spyder介绍 【初学者友好】
  2. linux垃圾文件清理,请问 如何linux 垃圾文件清理、
  3. RobotStudio 项目移植问题——无法创建系统
  4. NLP系列(8)_用可视化解构BERT,从上亿参数中提取出的6种直观模式
  5. 接地/漏电(原理图)/接零/零线保护
  6. LOJ 6131 Fiend - 行列式 - 可并堆 - 贪心
  7. 2.深入解析Javascript异步编程
  8. 作宾语,不定式与动名词的区别——脑动词和手动词
  9. 树莓派人脸表情识别中期报告
  10. 常见硬件通信协议介绍