首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > flex >

怎么更改皮肤的state状态

2012-03-02 
如何更改皮肤的state状态定义了ExtButton类,该类继承于spark.components.Button。又定义了皮肤类ExtButtonS

如何更改皮肤的state状态
定义了ExtButton类,该类继承于spark.components.Button。又定义了皮肤类ExtButtonSkin
ExtButton:

Java code
public class ExtButton extends Button    {        public function ExtButton()        {            super();            setStyle("skinClass", ExtButtonSkin);        }        ....................

ExtButtonSkin:
XML code
<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009"              xmlns:s="library://ns.adobe.com/flex/spark"              xmlns:mx="library://ns.adobe.com/flex/mx"              xmlns:supportClasses="com.esri.ags.skins.supportClasses.*">    <fx:Declarations>        <!-- 将非可视元素(例如服务、值对象)放在此处 -->    </fx:Declarations>    <fx:Metadata>        [HostComponent(name="com.telchina.szjd.skin.ExtButton")]    </fx:Metadata>        <s:states>        <s:State name="up" />        <s:State name="down" />        <s:State name="over" />        <s:State name="disabled" />    </s:states>        <s:Group minWidth="40" height="26">        <s:Rect visible="true" left="0" top="0" width="15" height="26">            <s:fill>                <s:BitmapFill source="@Embed(source='assets/images/pic/pic_25.png')"                              fillMode="scale" />            </s:fill>        </s:Rect>        <s:Rect visible="false" visible.over="true" left="0" top="0" width="15" height="26">            <s:fill>                <s:BitmapFill source="@Embed(source='assets/images/pic/pic_20.png')"                              fillMode="scale" />            </s:fill>        </s:Rect>        .....................................


现在在外部用ExtButton,如果鼠标划入该控件,则设置皮肤状态为over。如果鼠标划出该控件,则设置皮肤为默认状态

JScript code
var extButton:ExtButton = new ExtButton();extButton.currentState = "over";extButton.addEventListener(MouseEvent.ROLL_OUT, function(event:MouseEvent):void{                    extButton.currentState = "";                });                                extButto.addEventListener(MouseEvent.ROLL_OVER, function(event:MouseEvent):void{                    extButton.currentState = "over";                });


报了一个错:ArgumentError: Undefined state 'over'。
请问高手状态的改变不能在外部进行更改吗?如何改进?



[解决办法]
在as里面
设置[SkinState("over")]
定义变量var _state:String;
重写方法
override protected function getCurrentSkinState():String{
return _state;
}

extButto.addEventListener(MouseEvent.ROLL_OVER, function(event:MouseEvent):void{
_state = "over";
  
});
[解决办法]
在切换状态时使用内部方法
invalidateSkinState();
可以立即执行状态刷新,你可以试试

热点排行