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

Flex4中的皮肤(2)

发布时间:2020-12-15 04:42:56 所属栏目:百科 来源:网络整理
导读:Flex4 中的皮肤( 2 ): Skin State 收藏 在上一篇中,定义了一个最简单的 SkinnableComponent 并为其定义了两个 Skin 。 ? 对于 TransitionSkin ,需要在 enable 时有不同的展现方式,这可以通过 Skin State 实现。 ? 对自定义的 SkinnableComponent 的修

Flex4中的皮肤(2):Skin State 收藏

在上一篇中,定义了一个最简单的SkinnableComponent并为其定义了两个Skin

?

对于TransitionSkin,需要在enable时有不同的展现方式,这可以通过Skin State实现。

?

对自定义的SkinnableComponent的修改

?

首先在组件中定义isEnabled属性:

?

view plaincopy to clipboardprint?

private var _isEnabled:Boolean = false;??

??????????

??????? public function get isEnabled():Boolean??

??????? {??

??????????? return _isEnabled;??

??????? }??

??????????

??????? public function set isEnabled(value:Boolean):void?

??????? {??

???? ???????_isEnabled = value;??

??????? }?

private var _isEnabled:Boolean = false;

??????????????????

?????????????????? public function get isEnabled():Boolean

?????????????????? {

??????????????????????????? return _isEnabled;

?????????????????? }

??????????????????

?????????????????? public function set isEnabled(value:Boolean):void

?????????????????? {

??????????????????????????? _isEnabled = value;

?????????????????? }

?

?

?

然后定义SkinState元标签:

?

view plaincopy to clipboardprint?

[SkinState("normal")]??

[SkinState("enable")]?

???????? [SkinState("normal")]

???????? [SkinState("enable")]

?

?

?

最后需要将属性值和组件状态关联起来,这是通过覆盖SkinnableComponentgetCurrentSkinState方法实现的。

?

该方法的最初定义如下:

?

view plaincopy to clipboardprint?

/**?

???? *? Returns the name of the state to be applied to the skin. For example,a?

???? *? Button component could return the String "up","down","over",or "disabled"?

???? *? to specify the state.?

???? *?

???? *? <p>A subclass of SkinnableComponent must override this method to return a value.</p>?

???? *?

???? *? @return A string specifying the name of the state to apply to the skin.?

???? *??

???? *? @langversion 3.0?

???? *? @playerversion Flash 10?

???? *? @playerversion AIR 1.5?

???? *? @productversion Flex 4?

???? */?

??? protected function getCurrentSkinState():String??

??? {??

??????? return null;??

??? }?

/**

???? *? Returns the name of the state to be applied to the skin. For example,a

???? *? Button component could return the String "up",or "disabled"

???? *? to specify the state.

???? *

???? *? <p>A subclass of SkinnableComponent must override this method to return a value.</p>

???? *

???? *? @return A string specifying the name of the state to apply to the skin.

???? *

???? *? @langversion 3.0

???? *? @playerversion Flash 10

???? *? @playerversion AIR 1.5

???? *? @productversion Flex 4

???? */

??? protected function getCurrentSkinState():String

??? {

??????? return null;

??? }

?

?

?

Node中需要覆盖该方法:

?

view plaincopy to clipboardprint?

override protected function getCurrentSkinState():String??

??????? {??

??????????? if(isEnabled)??

??????????????? return "enable";??

??????????? return "normal";??

??????? }?

override protected function getCurrentSkinState():String

??? ???????? {

??? ?????????????????? if(isEnabled)

??? ??????????????????????????? return "enable";

??? ?????????????????? return "normal";

??? ???????? }

?

?

?

完整的Node代码如下:

?

Node.as

?

view plaincopy to clipboardprint?

package skinsample??

{??

??? [SkinState("normal")]??

??? [SkinState("enable")]??

??? import spark.components.supportClasses.SkinnableComponent;??

??????

??? public class Node extends SkinnableComponent??

??? {??

??????????

??????? public function Node()??

??????? {??

??????????? super();??

??????? }??

??????????

??????????

??????? private var _isEnabled:Boolean = false;??

??????????

??????? public function get isEnabled():Boolean??

??????? {??

??????????? return _isEnabled;??

??????? }??

??????????

??????? public function set isEnabled(value:Boolean):void?

??????? {??

??????????? _isEnabled = value;??

??????? }??

??????????

??????? override protected function getCurrentSkinState():String??

??????? {??

??????????? if(isEnabled)??

??????????????? return "enable";??

??????????? return "normal";??

??????? }??

??? }??

}?

package skinsample

{

???????? [SkinState("normal")]

???????? [SkinState("enable")]

???????? import spark.components.supportClasses.SkinnableComponent;

????????

???????? public class Node extends SkinnableComponent

???????? {

??????????????????

?????????????????? public function Node()

?????????????????? {

??????????????????????????? super();

?????????????????? }

??????????????????

??????????????????

?????????????????? private var _isEnabled:Boolean = false;

??????????????????

?????????????????? public function get isEnabled():Boolean

?????????????????? {

??????????????????????????? return _isEnabled;

?????????????????? }

??????????????????

?????????????????? public function set isEnabled(value:Boolean):void

?????????????????? {

??????????????????????????? _isEnabled = value;

?????????????????? }

??????????????????

?????????????????? override protected function getCurrentSkinState():String

??? ???????? {

??? ?????????????????? if(isEnabled)

??? ??????????????????????????? return "enable";

??? ?????????????????? return "normal";

??? ???????? }

???????? }

}

?

?

?

?

Skin的修改

Skin中首先需要增加状态的声明:

?

view plaincopy to clipboardprint?

<s:states>?

??? <s:State name="normal" />?

??? <s:State name="enable" />?

</s:states>?

??? <s:states>

??????? <s:State name="normal" />

??????? <s:State name="enable" />

??? </s:states>

?

接下来可以指定Skin元素在哪个状态中出现,默认是在所有状态中出现。XML节点和属性都可以进行指定。

?

对于XML节点,增加includeIn属性,如:

?

<s:Button top="0" right="0" bottom="0" left="0" alpha="0" includeIn="enable,normal" />

?

对于XML属性,增加属性名称.状态名称指定特定状态下的属性值,如:

?

<s:SolidColor color="0x131313" color.enable="0xff0000" />

?

完整的Skin代码如下:

?

TransitionSkin.mxml

?

view plaincopy to clipboardprint?

<?xml version="1.0" encoding="utf-8"?>?

<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/halo" width="400" height="300">?

??? <s:states>?

??????? <s:State name="normal" />?

??????? <s:State name="enable" />?

??? </s:states>?

??? <s:Rect id="rect" radiusX="4" radiusY="4" top="0" right="0"???

???????? bottom="0" left="0">?

??????? <s:fill>?

?????????? <s:SolidColor color="0x131313" color.enable="0xff0000" />?

??????? </s:fill>?

??????? <s:stroke>?

?????????? <s:SolidColorStroke color="0x131313" weight="2"/>?????????????

??????? </s:stroke>?

??? </s:Rect>?

??? <s:Button top="0" right="0" bottom="0" left="0" alpha="0" includeIn="enable,normal"/>?

</s:Skin>?

<?xml version="1.0" encoding="utf-8"?>

<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/halo" width="400" height="300">

??? <s:states>

??????? <s:State name="normal" />

??????? <s:State name="enable" />

??? </s:states>

??? <s:Rect id="rect" radiusX="4" radiusY="4" top="0" right="0"

???????? bottom="0" left="0">

??????? <s:fill>

?????????? <s:SolidColor color="0x131313" color.enable="0xff0000" />

??????? </s:fill>

??????? <s:stroke>

?????????? <s:SolidColorStroke color="0x131313" weight="2"/>??????????

??????? </s:stroke>

??? </s:Rect>

??? <s:Button top="0" right="0" bottom="0" left="0" alpha="0" includeIn="enable,normal"/>

</s:Skin>

?

?

PlaceSkin.mxml

?

view plaincopy to clipboardprint?

<?xml version="1.0" encoding="utf-8"?>?

<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/halo" width="400" height="300">?

??? <s:states>?

??????? <s:State name="normal" />?

??????? <s:State name="enable" />?

??? </s:states>?

??? <s:Ellipse id="ellipse"? top="0" right="0" bottom="0" left="0">?

??????? <s:fill>?

?????????? <s:SolidColor color="0x77CC22" />?

??????? </s:fill>?

??????? <s:stroke>?

?????????? <s:SolidColorStroke color="0x131313" weight="2"/>?

??????? </s:stroke>?

??? </s:Ellipse>?

</s:Skin>?

<?xml version="1.0" encoding="utf-8"?>

<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/halo" width="400" height="300">

??? <s:states>

??????? <s:State name="normal" />

??????? <s:State name="enable" />

??? </s:states>

???????? <s:Ellipse id="ellipse"? top="0" right="0" bottom="0" left="0">

??????? <s:fill>

?????????? <s:SolidColor color="0x77CC22" />

??????? </s:fill>

??????? <s:stroke>

?????????? <s:SolidColorStroke color="0x131313" weight="2"/>

??????? </s:stroke>

??? </s:Ellipse>

</s:Skin>

?

?

使用具有状态的组件和Skin

定义好组件和Skin后,就可以使用了:

?

NodeSample.mxml

?

view plaincopy to clipboardprint?

<?xml version="1.0" encoding="utf-8"?>?

<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/halo" xmlns:skinsample="skinsample.*">?

??? <fx:Script>?

??????? <!--[CDATA[??

??????????? import skinsample.TransitionSkin;??

??????? ]]-->?

??? </fx:Script>?

??? <skinsample:Node skinClass="skinsample.TransitionSkin" x="10" y="30" width="50" height="50"/>?

??? <skinsample:Node skinClass="skinsample.PlaceSkin" x="80" y="30" width="50" height="50"/>?

??? <skinsample:Node skinClass="skinsample.TransitionSkin" x="150" y="30" width="50" height="50" isEnabled="true"/>?

??????

</s:WindowedApplication>?

<?xml version="1.0" encoding="utf-8"?>

<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/halo" xmlns:skinsample="skinsample.*">

???????? <fx:Script>

?????????????????? <!--[CDATA[

??????????????????????????? import skinsample.TransitionSkin;

?????????????????? ]]-->

???????? </fx:Script>

???????? <skinsample:Node skinClass="skinsample.TransitionSkin" x="10" y="30" width="50" height="50"/>

???????? <skinsample:Node skinClass="skinsample.PlaceSkin" x="80" y="30" width="50" height="50"/>

???????? <skinsample:Node skinClass="skinsample.TransitionSkin" x="150" y="30" width="50" height="50" isEnabled="true"/>

????????

</s:WindowedApplication>

?

?

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ThinkInside/archive/2009/10/06/4635077.aspx

(编辑:李大同)

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

    推荐文章
      热点阅读