Egret之Eui.Button换肤
在Gui中对Button换皮相当的给力:
Gui.Button.skinName = new egret.gui.ButtonSkin(normal_resource, up_resource , disable_resource);
但是在EUI中没有ButtonSkin类.所以找到了其他方法.
我用三种按钮进行测试 : 1,有自定义皮肤的按钮 2,没有自定义皮肤的按钮(三种状态都有resource图片) , 3,new的Button
测试View:
一 : 自定义皮肤情况
①,自定义皮肤 : AonauflyButton.exml
<?xmlversion="1.0"encoding="utf-8"?><e:Skinclass="skins.AonauflyButton"states="up,down,disabled"width="75"height="75"xmlns:e="http://ns.egret.com/eui"><e:Imagewidth="100%"height="100%"scale9Grid="1,3,8,8"alpha.disabled="0.5"source="变强01_png"source.down="橙色小按钮_png"source.disabled="蓝色小按钮_png"/><e:Labelid="labelDisplay"top="8"bottom="8"left="8"right="8"size="20"textColor="0xFFFFFF"verticalAlign="middle"textAlign="center"/><e:Imageid="iconDisplay"horizontalCenter="0"verticalCenter="0"/></e:Skin>
②,现在一个ButtonDemo.exml用于显示如上图.建一个Button,设置他的皮肤为我们的自定义皮肤
命名 :btn_demo
二 : 使用默认Button(三种状态都有resource图片)
命名 :btn_demo2
三 : 自定义一个Button , 命名 :$btn_demo3
代码如下:
moduleapp{exportclassButtonDemoextendseui.Componentimplementseui.UIComponent{privatebtn_demo:eui.Button;privatebtn_demo2:eui.Button;private$btn_demo3:eui.Button;publicconstructor(){super();this.skinName="resource/eui_skins/ButtonDemo.exml";}privatehandlerListener(isAdd:boolean):void{this.touchEnabled=isAdd;if(isAdd){this.addEventListener(egret.TouchEvent.TOUCH_TAP,this.onclick,this);}else{this.removeEventListener(egret.TouchEvent.TOUCH_TAP,this.onclick,this);}}privateonclick($e:egret.TouchEvent):void{this.btn_demo.enabled=!this.btn_demo.enabled;this.btn_demo2.enabled=!this.btn_demo2.enabled;this.$btn_demo3.enabled=!this.$btn_demo3.enabled;}protectedchildrenCreated():void{super.childrenCreated();this.handlerListener(true);this.btn_demo.label="第一种情况";this.btn_demo.icon=RES.getRes("button_down_png");this.baseChildren4BTN(this.btn_demo);this.changeChildren4BTN(this.btn_demo);egret.log("=====第二种情况=====");this.baseChildren4BTN(this.btn_demo2);this.changeChildren4BTN(this.btn_demo2);egret.log("=====第三种情况=====");this.$btn_demo3=neweui.Button();this.$btn_demo3.label="第三种情况";this.$btn_demo3.x=this.$btn_demo3.y=250;this.addChild(this.$btn_demo3);this.baseChildren4BTN(this.$btn_demo3);this.changeChildren4BTN(this.$btn_demo3);}privatebaseChildren4BTN(btn:eui.Button):void{let$img2Btn_normal:eui.Image=<eui.Image>btn.getChildAt(0);egret.log("常态img0:"+$img2Btn_normal.source);//改变常态img(成功)//$img2Btn_normal.source=RES.getRes("蓝色小按钮_png");let$label2Btn:eui.Label=<eui.Label>btn.getChildAt(1);egret.log("文本1:"+$label2Btn.text);if(btn.numChildren>=3){let$icon2Btn:eui.Image=<eui.Image>btn.getChildAt(2);if($icon2Btn!=null&&$icon2Btn.source!=null)egret.log("icon2:"+$icon2Btn.source.toString());}}privatechangeChildren4BTN(btn:eui.Button):void{if(btn.skin!=null&&btn.skin.states!=null){letarr2States:eui.State[]=btn.skin.states;lettarget2State:eui.State=null;//up-状态target2State=arr2States[1];letproperty2up:eui.SetProperty=<eui.SetProperty>target2State.overrides[target2State.overrides.length-1];if(property2up.name=="source"){egret.log("up:value->"+property2up.value);property2up.value=RES.getRes("蓝色小按钮_png");}//disabled状态target2State=arr2States[2];letproperty2d:eui.SetProperty=<eui.SetProperty>target2State.overrides[target2State.overrides.length-1];if(property2d.name=="source"){egret.log("--改变图片资源--");egret.log("disabled:value->"+property2d.value);property2d.value=RES.getRes("radiobutton_select_up_png");}elseif(property2d.name=="alpha"){egret.log("--改变图片透明度--");property2d.value=0.3;//改变透明度}}}}}
要更改normal :
要更改 up , disable :(可以同时有alpha和source , 可以同时得修改他们)
//******************************************************************************************************************
补充
publicstaticsetBtnSkin(btn:eui.Button,upImg,downImg,enableImg=null):void{if(btn.skin.states[0].overrides[0]["value"]==upImg&&btn.skin.states[1].overrides[0]["value"]==downImg&&btn.skin.states[2].overrides[0]["value"]==enableImg)return;btn.skin.states[1].overrides[0]["value"]=downImg;if(btn.enabled)btn.skin.states[2].overrides[0]["value"]=btn.skin.states[0].overrides[0]["value"];elsebtn.skin.states[0].overrides[0]["value"]=btn.skin.states[2].overrides[0]["value"]btn.enabled=!btn.enabled;DelayCall.call(1,EuiUtil.releaseBtn,EuiUtil,[btn,!btn.enabled,upImg,enableImg==null?upImg:enableImg])}privatestaticreleaseBtn(btn:eui.Button,flag:boolean,upimg:string,disimg:string){btn.skin.states[0].overrides[0]["value"]=upimg;btn.skin.states[2].overrides[0]["value"]=disimg;btn.enabled=flag;}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。