Flex4之制作具有光泽的Button按钮

Flex4之制作具有光泽的Button按钮

Flex4.0较之Flex3.0的一大特点就是:皮肤与组件分离。Flex4.0让你能过更自由的去独立设计组件的皮肤,而不是通过CSS。今天我和大家分享一下如何利用Flex4.0中skinClass制作具有光泽的Button组件。

图示如下:

 

buttonSkin.mxml:

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

 

<!--

 

    ADOBE SYSTEMS INCORPORATED

    Copyright 2008 Adobe Systems Incorporated

    All Rights Reserved.

 

    NOTICE: Adobe permits you to use, modify, and distribute this file

    in accordance with the terms of the license agreement accompanying it.

 

-->

 

<!--- The default skin class for the Spark Button component. 

 

       @see spark.components.Button

       

      @langversion 3.0

      @playerversion Flash 10

      @playerversion AIR 1.5

      @productversion Flex 4

-->

<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"

             xmlns:fb="http://ns.adobe.com/flashbuilder/2009" minWidth="21" minHeight="21" alpha.disabled="0.5">

   

    <!-- host component -->

    <fx:Metadata>

        <![CDATA[

        /**

         * @copy spark.skins.spark.ApplicationSkin#hostComponent

         */

        [HostComponent("spark.components.Button")]

        ]]>

    </fx:Metadata>

   

    <fx:Script fb:purpose="styling">

        <![CDATA[        

            /* Define the skin elements that should not be colorized.

            For button, the graphics are colorized but the label is not. */

            static private const exclusions:Array = ["labelDisplay"];

           

            /**

             * @private

             */    

            override public function get colorizeExclusions():Array {return exclusions;}

           

            /**

             * @private

             */

            override protected function initializationComplete():void

            {

                useChromeColor = true;

                super.initializationComplete();

            } 

           

            /**

             *  @private

             */

            override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number) : void

            {

//                var cr:Number = getStyle("cornerRadius");

//               

//                if (cornerRadius != cr)

//                {

//                    cornerRadius = cr;

//                    shadow.radiusX = cornerRadius;

//                    fill.radiusX = cornerRadius;

//                    lowlight.radiusX = cornerRadius;

//                    highlight.radiusX = cornerRadius;

//                    border.radiusX = cornerRadius;

//                }

//               

//                if (highlightStroke) highlightStroke.radiusX = cornerRadius;

//                if (hldownstroke1) hldownstroke1.radiusX = cornerRadius;

//                if (hldownstroke2) hldownstroke2.radiusX = cornerRadius;

               

                super.updateDisplayList(unscaledWidth, unscaledHeight);

            }

           

          //  private var cornerRadius:Number = 2;

        ]]>       

    </fx:Script>

   

    <!-- states -->

    <s:states>

        <s:State name="up" />

        <s:State name="over" />

        <s:State name="down" />

        <s:State name="disabled" />

    </s:states>

  

      <s:Ellipse width="100%" height="100%">

           <s:fill>

                 <s:RadialGradient  focalPointRatio="0.7" rotation="90">

                      <s:GradientEntry color="0xffffff" color.over="0xffffff"/>

                      <s:GradientEntry color="0xcccccc" color.over="0x68cff0" />

                      <s:GradientEntry color="0x818286" color.over="0x0c96d5"/>

                 </s:RadialGradient>

           </s:fill>

           <s:filters>

                 <s:GlowFilter color="0xcccccc" color.over="0x818286" blurX="15" blurY="15" inner="true"/>

           </s:filters>

          

      </s:Ellipse>

      <s:Ellipse width="70%" height="50%" top="3" horizontalCenter="0">

           <s:fill>

                 <s:LinearGradient rotation="90">

                      <s:GradientEntry color="0xf1f1f1" alpha="0.8"/>

                      <s:GradientEntry color="0xf1f1f1" alpha="0.2"/>

                 </s:LinearGradient>

           </s:fill>

          

      </s:Ellipse>

   

    <!-- layer 8: text -->

    <!--- @copy spark.components.supportClasses.ButtonBase#labelDisplay -->

    <s:Label id="labelDisplay"

             textAlign="center"

             verticalAlign="middle"

             maxDisplayedLines="1"

             horizontalCenter="0" verticalCenter="1"

             left="10" right="10" top="2" bottom="2">

    </s:Label>

   

</s:SparkSkin>

posted @ 2011-03-26 00:44  小君仔  阅读(1123)  评论(0编辑  收藏  举报