Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3252025
  • 博文数量: 530
  • 博客积分: 13360
  • 博客等级: 上将
  • 技术积分: 5473
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-13 13:32
文章分类

全部博文(530)

文章存档

2017年(1)

2015年(2)

2013年(24)

2012年(20)

2011年(97)

2010年(240)

2009年(117)

2008年(12)

2007年(8)

2006年(9)

分类: Web开发

2013-03-28 10:42:19

转载:http://blog.csdn.net/thinkinside/article/details/4635077

1.概述

      在《FLEX皮肤实例1_自定义圆形和方形节点》中,定义了一个最简单的SkinnableComponent并为其定义了两个Skin。
      现在,对于TransitionSkin,需要在enable时有不同的展现方式,这可以通过Skin State实现。

2.修改ode类
      为了让用户可以通过定义Node节点的属性显示不同的状态,比如
            isEnabled="true"/>
      我们需要在Node类上定义一个isEnable属性和可能具有的状态集,并重载

2.1 添加isEnabled属性
      private var _isEnabled:Boolean = false; 

2.2 SkinState元标签
    [SkinState("normal")]  
    [SkinState("enable")] 
    表示目前节点具有了二个状态

2.3 添加isEnabled属性
      为了将属性值和组件状态关联起来,通过覆盖SkinnableComponent的getCurrentSkinState方法实现的。
      该方法定义于SkinnableComponent

      //返回当前skin的名称
      protected function getCurrentSkinState():String
     {
        return null;
    }

具体Node类代码如下

  1. import spark.components.supportClasses.SkinnableComponent;
  2.     
  3.     [SkinState("normal")]
  4.     [SkinState("enable")]
  5.     
  6.     public class Node extends SkinnableComponent {
  7.         
  8.         private var _isEnabled:Boolean = false;
  9.         public function Node() {
  10.             super();
  11.         }
  12.         public function get isEnabled():Boolean
  13.         {
  14.             return _isEnabled;
  15.         }
  16.         
  17.         public function set isEnabled(value:Boolean):void
  18.         {
  19.             _isEnabled = value;
  20.         }
  21.         override protected function getCurrentSkinState():String
  22.         {
  23.             if(isEnabled)
  24.                 return "enable";
  25.             return "normal";
  26.         }
  27.     }

3.修改皮肤
      现在Node节点具有了二个皮肤状态和属性_isEnabled来控制皮肤的设置

3.1 添加皮肤状态
      在两个皮肤文件PlaceSkin.mxml和TransitionSkin.mxml中都必须添加皮肤的状态
     
         
         
   
 

3.2 指定Skin元素在哪个状态中出现
      默认情况下,skin元素在所有状态中出现。也可以增加includeIn属性进行指定。比如:
            includeIn="enable,normal" />

3.3 指定特定状态下的属性值
      color.enable="0xff0000" />
      指定在enable状态下,节点填充色为红色

TransitionSkin.mxml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <s:Skin xmlns:fx=""
  3.         xmlns:s="library://ns.adobe.com/flex/spark"
  4.         xmlns:mx="library://ns.adobe.com/flex/mx">
  5.     
  6.     <!-- host component -->
  7.     <fx:Metadata>
  8.         [HostComponent("nodeexam.Node")]
  9.     </fx:Metadata>
  10.     
  11.     <s:states>
  12.         <s:State name="normal" />
  13.         <s:State name="enable" />
  14.     </s:states>
  15.     
  16.     <s:Rect id="rect" radiusX="4" radiusY="4" top="0" right="0"
  17.             bottom="0" left="0">
  18.         <s:fill>
  19.             <s:SolidColor color="0x131313" color.enable="0xff0000" />
  20.         </s:fill>
  21.         <s:stroke>
  22.             <s:SolidColorStroke color="0x131313" weight="2" />
  23.         </s:stroke>
  24.     </s:Rect>
  25.     
  26.     <s:Button top="0" right="0" bottom="0" left="0" alpha="0" includeIn="enable,normal"/>
  27.     
  28. </s:Skin>

4.使用具有状态的组件和Skin
代码如下

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <s:Application
  3.     xmlns:fx=""
  4.     xmlns:s="library://ns.adobe.com/flex/spark"
  5.     xmlns:mx="library://ns.adobe.com/flex/halo"
  6.     xmlns:skinsample="nodeexam.*">
  7.     
  8.     
  9.     <skinsample:Node skinClass="nodeexam.TransitionSkin" x="10" y="30" width="50" height="50"/>
  10.     <skinsample:Node skinClass="nodeexam.PlaceSkin" x="80" y="30" width="50" height="50"/>
  11.     
  12.     <skinsample:Node skinClass="nodeexam.TransitionSkin" x="150" y="30" width="50" height="50" isEnabled="true"/>
  13. </s:Application>

阅读(2478) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~