自定义的TabBar按钮在鼠标悬停/鼠标悬停时闪烁。

| 我在Flex \的TabBar上使用自定义外观,尤其是控件ButtonBarButton的外观。按钮的宽度是可变大小,具体取决于它包含的文本,并且按钮的背景是仅显示在按钮的选定状态下的图像。 以下是我的皮肤MXML:
<!-- states -->
<s:states>
    <s:State name=\"up\" />
    <s:State name=\"over\" stateGroups=\"overStates\" />
    <s:State name=\"down\" stateGroups=\"downStates\" />
    <s:State name=\"disabled\" stateGroups=\"disabledStates\" />
    <s:State name=\"upAndSelected\" stateGroups=\"selectedStates, selectedUpStates\" />
    <s:State name=\"overAndSelected\" stateGroups=\"overStates, selectedStates\" />
    <s:State name=\"downAndSelected\" stateGroups=\"downStates, selectedStates\" />
    <s:State name=\"disabledAndSelected\" stateGroups=\"selectedUpStates, disabledStates, selectedStates\" />
</s:states>
<!-- invisible background to prevent \"machine gun\" flickering on edge of button -->
<s:Rect top=\"0\" bottom=\"0\" left=\"0\" right=\"0\">
    <s:fill>
        <s:SolidColor color=\"0xFFFFFF\"
                      alpha=\"0.0\"/>
    </s:fill>
</s:Rect>
<s:Group>
    <s:layout>
        <s:HorizontalLayout gap=\"0\"/>
    </s:layout>

    <!-- left edge of button -->
    <s:BitmapImage source.selectedStates=\"images/btn_left.png\"
                   top=\"0\" bottom=\"0\" left=\"0\"
                   width=\"6\"/>
    <!-- background and text of button -->
    <s:Group>
        <!-- layer 1: image -->
        <s:BitmapImage source.selectedStates=\"images/btn_bg.png\"
                       fillMode=\"repeat\"
                       left=\"0\" right=\"0\"/>
        <!-- layer 2: 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:Group>
    <!-- right edge of button -->
    <s:BitmapImage source.selectedStates=\"images/btn_right.png\"
                   top=\"0\" bottom=\"0\" right=\"0\"
                   width=\"6\"/>
</s:Group>
鼠标悬停和鼠标移出时,按钮闪烁。有谁知道我是否缺少这种按钮的状态,或者我是否错误地应用了按钮的来源? 至于更多代码,TabBar组件的布局如下:
<s:Group>
    <s:layout>
        <s:VerticalLayout/>
    </s:layout>
    <s:Group>
        <s:layout>
            <s:HorizontalLayout/>
        </s:layout>
        <s:Label text=\"Title:\"/>
        <s:Label text=\"Sign in\"/>

    </s:Group>
    <s:TabBar dataProvider=\"{navigationList}\"
              chromeColor=\"#FFFFFF\"
              skinClass=\"skins.NavigationBarSkin\"/>
</s:Group>
并且重写的TabBarSkin具有以下片段:
<!-- layer 1 background -->
<s:Rect id=\"backgroundFill\" topLeftRadiusX=\"4\" topRightRadiusX=\"4\" top=\"0\" bottom=\"0\" left=\"0\" right=\"0\">
    <s:fill>
        <s:LinearGradient>
            <s:GradientEntry color=\"0x625454\"/>
            <s:GradientEntry color=\"0x3F3536\"/>
        </s:LinearGradient>
    </s:fill>
</s:Rect>

<!--- @copy spark.components.SkinnableDataContainer#dataGroup -->
<s:DataGroup id=\"dataGroup\" 
             top=\"10\" left=\"15\" right=\"15\" bottom=\"0\">
    <s:layout>
        <s:ButtonBarHorizontalLayout gap=\"10\" />
    </s:layout>
    <s:itemRenderer>
        <fx:Component>
            <s:ButtonBarButton skinClass=\"skins.NavigationBarButtonSkin\" />
        </fx:Component>
    </s:itemRenderer>
</s:DataGroup>
我尝试将整个块包装在Group标记中,但无济于事。不可见的Rect确实可以解决鼠标悬停在按钮的任意边缘时发生的“机枪”闪烁,但是每个按钮的进入和离开时仍然存在闪烁。     
已邀请:
弄清楚了: 关键是通过@Embed方法设置BitmapImage的源。
<s:BitmapImage source.selectedStates=\"@Embed(\'images/btn_left.png\')\"/>
在Flash中工作的日子,我应该记得这一点。如果未使用Embed注释,则资源将被链接,因此每次状态更改时(即,鼠标悬停和鼠标移出)都将获取资源。 谢谢您的迅速答复!     

要回复问题请先登录注册