• [转]mx:RadioButton定制皮肤,去掉默认Icon


    原作者: 

    http://blog.dreamhui.net/archives/38
     

    近日要写一个用于皮肤选择的TitleWindow,因为是单选,所以用到单选框mx:RadioButton,但是想用自定义皮肤来定制mx:RadioButton的默认外观,并想去掉前面作为Icon的小圈圈,找了资料,终于解决了。

    mx:RadioButton的样式里面有关于Icon的声明。

    因为icon属性只接受Class类型参数,所以如果在CSS样式表中做修改的,不太方便。所以我选择在MXML文件中将其赋予空的Class对象引用,这将覆盖掉默认的前面的小圈圈做icon。然后再在CSS中定义其皮肤。源文件如下:

    mxml文件:

    代码
    <?xml version="1.0" encoding="utf-8"?>
    <s:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s
    ="library://ns.adobe.com/flex/spark" 
        xmlns:mx
    ="library://ns.adobe.com/flex/mx"
        title
    ="选择您喜欢的留言皮肤"
        close
    ="skinPanelClose()"
        styleName
    ="skinSelPanel"
        initialize
    ="init()">
     
        
    <!--~~~~~~~~~~~~~~~~~~~~~~~Script~~~~~~~~~~~~~~~~~~~~~~~-->
        
    <fx:Script>
            
    <![CDATA[
                import events.SkinSelEvent;
     
                import mx.controls.Alert;
                import mx.core.FlexGlobals;
                import mx.events.FlexEvent;
                import mx.events.ItemClickEvent;
                import mx.managers.PopUpManager;
     
                [Bindable]
                
    private var iconRB:Class = null as Class;
                
    //去掉RadioButton前面的icon小圈圈
     
                
    private var selArray:Array = new Array();
                
    //放置前一项的选择对象(RadioButton)引用
     
                
    private var defaultSkin:String = "6";
                
    //用户未做选择时候的默认皮肤
     
                
    /**
                 * 窗口初始化,将默认皮肤选项的RadioButton添加滤镜
                 * 
    */
                
    protected function init():void
                {
                    selArray.push(radioBtn6);
                    radioBtn6.filters 
    = [glow];
                }
     
                
    public static function show():skinSelPanel
                {
                    var skinPanel:skinSelPanel 
    = skinSelPanel(PopUpManager.createPopUp(DisplayObject(FlexGlobals.topLevelApplication),skinSelPanel,true));
                    PopUpManager.centerPopUp(skinPanel);
                    
    return skinPanel;
                }
     
                
    /**
                 * 窗口关闭时候,将选择结果以事件形式返给主应用程序
                 * 
    */
                
    protected function skinPanelClose():void
                {
                    PopUpManager.removePopUp(
    this);
                    var skinSelEvent:SkinSelEvent 
    = new SkinSelEvent(SkinSelEvent.SKIN_SHOT);
                    
    if(skinShotGroup.selection)
                    {
                        defaultSkin 
    = skinShotGroup.selectedValue.toString();
                    }
                    skinSelEvent.skinShot 
    = defaultSkin;
     
                    dispatchEvent(skinSelEvent);
                }
     
                
    /**
                 * 用户做选择的时候,将数组selArray中的前一项代表的对象引用的滤镜去掉
                 * 并给当前所选项添加滤镜,以便标识
                 * 
    */
                
    protected function skinShotClick(event:ItemClickEvent):void
                {
                    
    //selArray = new Array();
                    
    //如果在此初始化,每次都清空该数组,不能保留上一次点击的结果
                    selArray.push(skinShotGroup.selection);
                    
    if(selArray.length > 1)
                    {
                        var rbtn:RadioButton 
    = selArray[selArray.length-2];
                        
    //Alert.show(rbtn.name);
                        rbtn.filters = null;
                    }
                    skinShotGroup.selection.filters 
    = [glow];
                    
    //将用户当前所选项添加滤镜,以便标识
                }
     
            ]]
    >
        
    </fx:Script>
     
        
    <!--~~~~~~~~~~~~~~~~~~~~~~~Declarations~~~~~~~~~~~~~~~~~~~~~~~-->
        
    <fx:Declarations>
            
    <!--声明RadioButtonGroup-->
            
    <mx:RadioButtonGroup id="skinShotGroup" itemClick="skinShotClick(event)"/>
     
            
    <!--声明滤镜glow-->
            
    <s:GlowFilter id="glow" blurX="40" blurY="40" color="0xffffff" />
        
    </fx:Declarations>
     
        
    <!--~~~~~~~~~~~~~~~~~~~~~~~UI Components~~~~~~~~~~~~~~~~~~~~~~~-->
        
    <s:HGroup width="100%" height="100%" id="rbtnHG">
            
    <s:VGroup width="30%" height="90%">
                
    <mx:RadioButton value="1" styleName="radioBtn1" group="{skinShotGroup}" buttonMode="true" icon="{iconRB}" />
                
    <mx:RadioButton value="2" styleName="radioBtn2" group="{skinShotGroup}" buttonMode="true" icon="{iconRB}" />
                
    <mx:RadioButton value="3" styleName="radioBtn3" group="{skinShotGroup}" buttonMode="true" icon="{iconRB}" />
                
    <mx:Button id="submit" label="确定" styleName="skinSubmit" click="skinPanelClose()" />
            
    </s:VGroup>
            
    <s:VGroup width="30%" height="90%">
                
    <mx:RadioButton value="4" styleName="radioBtn4" group="{skinShotGroup}" buttonMode="true" icon="{iconRB}" />
                
    <mx:RadioButton value="6" id="radioBtn6" styleName="radioBtn6" group="{skinShotGroup}" buttonMode="true" icon="{iconRB}" />
                
    <mx:RadioButton value="5" styleName="radioBtn5" group="{skinShotGroup}" buttonMode="true" icon="{iconRB}" />
            
    </s:VGroup>
            
    <s:VGroup width="30%" height="90%">
                
    <mx:RadioButton value="7" styleName="radioBtn7" group="{skinShotGroup}" buttonMode="true" icon="{iconRB}" />
                
    <mx:RadioButton value="8" styleName="radioBtn8" group="{skinShotGroup}" buttonMode="true" icon="{iconRB}" />
                
    <mx:RadioButton value="9" styleName="radioBtn0" group="{skinShotGroup}" buttonMode="true" icon="{iconRB}" />
            
    </s:VGroup>
        
    </s:HGroup>
     
    </s:TitleWindow>


    SS文件部分:

    代码
    .skinSelPanel
    {
        backgroundAlpha:
    0.7;
        backgroundColor:#
    000000;
        borderVisible:
    false;
        corner
    -radius:5;
        chrome
    -color:#F579FB;
        content
    -background-alpha:0;
        color:#ffffff;
        text
    -align:left;
        font
    -size:16;
        font
    -weight:bold;
     
    }
    .radioBtn0
    {
        up
    -skin:ClassReference("skins.messSkinblackBlue");
        over
    -skin:ClassReference("skins.messSkinblackBlue");
        down
    -skin:ClassReference("skins.messSkinblackBlue");
        selected
    -disabled-skin:ClassReference("skins.messSkinblackBlue");
        selected
    -down-skin:ClassReference("skins.messSkinblackBlue");
        selected
    -up-skin:ClassReference("skins.messSkinblackBlue");
        selected
    -over-skin:ClassReference("skins.messSkinblackBlue");
    }
    .radioBtn1
    {
        up
    -skin:ClassReference("skins.messSkinBlue");
        over
    -skin:ClassReference("skins.messSkinBlue");
        down
    -skin:ClassReference("skins.messSkinBlue");
        selected
    -disabled-skin:ClassReference("skins.messSkinBlue");
        selected
    -down-skin:ClassReference("skins.messSkinBlue");
        selected
    -up-skin:ClassReference("skins.messSkinBlue");
        selected
    -over-skin:ClassReference("skins.messSkinBlue");
    }
    .radioBtn2
    {
        up
    -skin:ClassReference("skins.messSkincircleGreen");
        over
    -skin:ClassReference("skins.messSkincircleGreen");
        down
    -skin:ClassReference("skins.messSkincircleGreen");
        selected
    -disabled-skin:ClassReference("skins.messSkincircleGreen");
        selected
    -down-skin:ClassReference("skins.messSkincircleGreen");
        selected
    -up-skin:ClassReference("skins.messSkincircleGreen");
        selected
    -over-skin:ClassReference("skins.messSkincircleGreen");
    }
    .radioBtn3
    {
        up
    -skin:ClassReference("skins.messSkinleftBlue");
        over
    -skin:ClassReference("skins.messSkinleftBlue");
        down
    -skin:ClassReference("skins.messSkinleftBlue");
        selected
    -disabled-skin:ClassReference("skins.messSkinleftBlue");
        selected
    -down-skin:ClassReference("skins.messSkinleftBlue");
        selected
    -up-skin:ClassReference("skins.messSkinleftBlue");
        selected
    -over-skin:ClassReference("skins.messSkinleftBlue");
    }
    .radioBtn4
    {
        up
    -skin:ClassReference("skins.messSkinrectGreen");
        over
    -skin:ClassReference("skins.messSkinrectGreen");
        down
    -skin:ClassReference("skins.messSkinrectGreen");
        selected
    -disabled-skin:ClassReference("skins.messSkinrectGreen");
        selected
    -down-skin:ClassReference("skins.messSkinrectGreen");
        selected
    -up-skin:ClassReference("skins.messSkinrectGreen");
        selected
    -over-skin:ClassReference("skins.messSkinrectGreen");
    }
    .radioBtn5
    {
        up
    -skin:ClassReference("skins.messSkinRed");
        over
    -skin:ClassReference("skins.messSkinRed");
        down
    -skin:ClassReference("skins.messSkinRed");
        selected
    -disabled-skin:ClassReference("skins.messSkinRed");
        selected
    -down-skin:ClassReference("skins.messSkinRed");
        selected
    -up-skin:ClassReference("skins.messSkinRed");
        selected
    -over-skin:ClassReference("skins.messSkinRed");
    }
    .radioBtn6
    {
        up
    -skin:ClassReference("skins.messSkinrightBlue");
        over
    -skin:ClassReference("skins.messSkinrightBlue");
        down
    -skin:ClassReference("skins.messSkinrightBlue");
        selected
    -disabled-skin:ClassReference("skins.messSkinrightBlue");
        selected
    -down-skin:ClassReference("skins.messSkinrightBlue");
        selected
    -up-skin:ClassReference("skins.messSkinrightBlue");
        selected
    -over-skin:ClassReference("skins.messSkinrightBlue");
    }
    .radioBtn7
    {
        up
    -skin:ClassReference("skins.messSkinrightGreen");
        over
    -skin:ClassReference("skins.messSkinrightGreen");
        down
    -skin:ClassReference("skins.messSkinrightGreen");
        selected
    -disabled-skin:ClassReference("skins.messSkinrightGreen");
        selected
    -down-skin:ClassReference("skins.messSkinrightGreen");
        selected
    -up-skin:ClassReference("skins.messSkinrightGreen");
        selected
    -over-skin:ClassReference("skins.messSkinrightGreen");
    }
    .radioBtn8
    {
        up
    -skin:ClassReference("skins.messSkinzise");
        over
    -skin:ClassReference("skins.messSkinzise");
        down
    -skin:ClassReference("skins.messSkinzise");
        selected
    -disabled-skin:ClassReference("skins.messSkinzise");
        selected
    -down-skin:ClassReference("skins.messSkinzise");
        selected
    -up-skin:ClassReference("skins.messSkinzise");
        selected
    -over-skin:ClassReference("skins.messSkinzise");
    }


    运行的最终结果:

    其中带有白色发光滤镜的,为当前所选择。

  • 相关阅读:
    关于近期
    Tips on Importons and Irradiance Particles in mental ray
    给她的歌
    Fatal In Code Generation Of Visual C++
    kdtree vs octree
    疯子的胜利——记6.18毕业晚会
    转凉
    事件与委托的匿名方法使用方法示例
    VS2008使用技巧
    硬链接和软连接的区别
  • 原文地址:https://www.cnblogs.com/4kapple/p/1948384.html
Copyright © 2020-2023  润新知