如何更改皮肤的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();
可以立即执行状态刷新,你可以试试