52ky 发表于 2022-5-2 13:10:19

在 FLEX 中制作自定义皮肤的按钮

今天我们来说说FLEX中自定义皮肤按钮的制作。 首先这是一个按钮皮肤文件:
<?xml version="1.0" encoding="utf-8"?>
<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[
      //表明这是一个按钮皮肤
      ]]>
    </fx:Metadata>
   
    <!-- states -->
    <!--按钮的四种状态-->
    <s:states>
      <s:State name="up" />
      <s:State name="over" />
      <s:State name="down" />
      <s:State name="disabled" />
    </s:states>
   

<!-- skinParts中定义的外观部件,表示按钮上的文字-->
    <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>
在Flex4.0 API中,打开spark.components.Button可以看到:
这里定义了按钮的几种状态,不过是按钮的外观部分,指的是按钮上方的文字。
然后我为按钮分配填充背景:
<s:Rect id="buttonColor"
            top="0" bottom="0"
            left="0" right="0"
         radiusY="50" radiusX="50"
            width.over="900" width.down="700" >   
      <s:fill>
            <s:SolidColor color.up="#0074aa"
                        color.over="#64BC48"
                        color.down="#FF7256"/>
      </s:fill>
这时候我们在应用这个小皮肤的时候,会发现按钮上的文字有点难看。 这时候有一个小技巧可以把Label的颜色改成白色。

接下来,添加状态切换到按钮时的动画:
<s:transitions>
      <s:Transition fromState="up" toState="over">            
            <s:Resize target="{buttonColor}"   widthBy="100"/>            
      </s:Transition>
      <s:Transition fromState="over" toState="up">   
            <s:Resize target="{buttonColor}"   widthBy="-100"/>   
      </s:Transition>
      <s:Transition fromState="over" toState="down">   
            <s:Resize target="{buttonColor}" widthBy="-100"/>   
      </s:Transition>
    </s:transitions>
这里我发现了一个问题,就是我用这些效果来工作的前提是你的按钮宽度是固定的
<!--不能在此设定按钮的宽度-->
    <s:Button   label="定制按钮实例_Flex开发课堂"
                     fontFamily="黑体"fontSize="40"
                     top="10"
                     skinClass="skins.really_defaultButton"
                     horizontalCenter="0" verticalCenter="0">
    </s:Button>
自定义皮肤的按钮在这里完成。

(Today, let's talk about the production of custom skin buttons in flex. First, this is a button skin file:
<? xml version="1.0" encoding="utf-8"?>
<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[
/ / indicates that this is a button skin
]]>
</fx:Metadata>
<!--states -->
<!-- Four states of buttons -- >
<s:states>
<s:State name="up" />
<s:State name="over" />
<s:State name="down" />
<s:State name="disabled" />
</s:states>
<!--The appearance part defined in skinparts represents the text on the button -- >
<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>
In flex4 0 API, open spark components. Button can see:
Here, several states of the button are defined, but the appearance part of the button refers to the text above the button.
Then I assign a fill background to the button:
<s:Rect id="buttonColor"
top="0" bottom="0"
left="0" right="0"
radiusY="50" radiusX="50"
width. over="900" width. down="700" >   
<s:fill>
<s:SolidColor color. up="#0074aa"
color. over="#64BC48"
color. down="#FF7256"/>
</s:fill>
At this time, when we apply this small skin, we will find that the text on the button is a little ugly. At this time, there is a trick to change the color of the label to white.
Next, add the animation when the state switches to the button:
<s:transitions>
<s:Transition fromState="up" toState="over">            
<s:Resize target="{buttonColor}"   widthBy="100"/>            
</s:Transition>
<s:Transition fromState="over" toState="up">   
<s:Resize target="{buttonColor}"   widthBy="-100"/>   
</s:Transition>
<s:Transition fromState="over" toState="down">   
<s:Resize target="{buttonColor}" widthBy="-100"/>   
</s:Transition>
</s:transitions>
Here I found a problem that I use these effects to work on the premise that your button width is fixed
<!-- The width of the button -- > cannot be set here
< s: button label = "custom button instance _flexdevelopment class"
Fontfamily = "bold" fontsize = "40"
top="10"
skinClass="skins.really_defaultButton"
horizontalCenter="0" verticalCenter="0">
</s:Button>
The custom skin button is completed here.
)



页: [1]
查看完整版本: 在 FLEX 中制作自定义皮肤的按钮