Flex皮肤制作教程——修改组件的Skin

  1. 修改组件的皮肤有三种方式:图形皮肤(Graphical Skins)、程序皮肤(Programmatic Skins)、状态皮肤。
  2.   
  3.   以下是通过程序皮肤的方式对组件进行修改的例子。通过程序皮肤的方式修改组件皮肤虽然也涉及到组件样式 Style ,但定义组件新皮肤的地方却在 as 代码中,外观的绘制均由代码完成。
  4.   建立程序皮肤的大致步骤:
  5.   1、编写新的组件皮肤 as 类
  6.   2、在定义样式的时候把皮肤的属性信息与新的组件皮肤类关联起来,这里要用到 ClassReference( "className" ) 语法
  7.   3、在 flex 中应用样式
  8. 演示文件
  9. 定义程序皮肤的外部 as类 文件 MyButton .as
  10. package
  11.   
  12. {
  13.   
  14.         //导入新皮肤类的父类 ProgrammaticSkin,所有新的皮肤类都继承至它
  15.   
  16.         import mx.skins.ProgrammaticSkin;
  17.   
  18.         public class MyButtonSkin extends ProgrammaticSkin
  19.   
  20.         {
  21.   
  22.                 public function MyButtonSkin()
  23.   
  24.                 {
  25.   
  26.                         super();
  27.   
  28.                 }
  29.   
  30.                 //定义一个绘制新皮肤外观的函数
  31.   
  32.                 protected function drawSkin(skinColor:uint, skinW:Number, skinH:Number):void{
  33.   
  34.                         this.graphics.lineStyle();
  35.   
  36.                         this.graphics.beginFill(skinColor);
  37.   
  38.                         this.graphics.drawRoundRect(0, 0, skinW, skinH, 4, 4);
  39.   
  40.                         this.graphics.endFill();
  41.   
  42.                 }
  43.   
  44.                 /*
  45.   
  46.                 覆盖父类中的 updateDisplayList 方法
  47.   
  48.                 此方法负责根据 name 属性的值判断要更重绘的组件界面
  49.   
  50.                 在重绘的时候调用 drawSkin() 方法绘制新皮肤,达到自定义组件皮肤的目的
  51.   
  52.                 */
  53.   
  54.                 override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{
  55.   
  56.                         switch(name){
  57.   
  58.                                 case "upSkin":
  59.   
  60.                                         drawSkin(0xBED731, unscaledWidth, unscaledHeight);
  61.   
  62.                                 break;
  63.   
  64.                                 
  65.   
  66.                                 case "overSkin":
  67.   
  68.                                         drawSkin(0xBED001, unscaledWidth, unscaledHeight);
  69.   
  70.                                 break;
  71.   
  72.                                 
  73.   
  74.                                 case "downSkin":
  75.   
  76.                                         drawSkin(0xAAD001, unscaledWidth, unscaledHeight);
  77.   
  78.                                 break;
  79.   
  80.                         }
  81.   
  82.                 }
  83.   
  84.         }
  85.   
  86. }
  87. 外部样式文件
  88. Application{
  89.   
  90.         verticalAlign:top;
  91.   
  92.         horizontalAlign:center;
  93.   
  94.         backgroundGradientColors:#000,#323232;
  95.   
  96. }
  97.   
  98. Panel{
  99.   
  100.         fontSize:13;
  101.   
  102.         color:#dddddd;
  103.   
  104.         paddingBottom:10;
  105.   
  106.         paddingTop:10;
  107.   
  108.         paddingLeft:10;
  109.   
  110.         paddingRight:10;
  111.   
  112. }
  113.   
  114. Label, Button{
  115.   
  116.         fontSize:14;
  117.   
  118.         color:#000;
  119.   
  120. }
  121.   
  122. /*将组件样式属性与 as类 关联起来,使用 ClassReference 语法把各皮肤属性值设为在外部编写的 as类 (MyButton.as) 即可*/
  123.   
  124. .myButton{
  125.   
  126.         upSkin:ClassReference("MyButtonSkin");
  127.   
  128.         overSkin:ClassReference("MyButtonSkin");
  129.   
  130.         downSkin:ClassReference("MyButtonSkin");
  131.   
  132. }
  133. 复制代码
  134. Flex 代码
  135. <?xml version="1.0" encoding="utf-8"?>
  136.   
  137. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
  138.   
  139.         <!--导入外部样式,样式文件里对样式属性与相应的 as 类文件做了关联-->
  140.   
  141.         <mx:Style source="styles/skinProgrammaticSkin.css" />
  142.   
  143.         <mx:Panel title="皮肤 Skin 的修改" width="35%" height="45%" layout="vertical" horizontalAlign="center">
  144.   
  145.                 <mx:Label width="100%" height="30" text="建立程序皮肤(Programmatic Skin)" />
  146.   
  147.                 <mx:HBox horizontalAlign="center">
  148.   
  149.                         <mx:Button id="myBtn" label="as皮肤" styleName="myButton" width="100" height="40" />
  150.   
  151.                 </mx:HBox>
  152.   
  153.         </mx:Panel>
  154.   
  155. </mx:Application>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值