Apache flex 如何在Flex中创建仅圆角的HBox?

Apache flex 如何在Flex中创建仅圆角的HBox?,apache-flex,actionscript-3,Apache Flex,Actionscript 3,我正在尝试在flex中创建一个只圆角的HBoxHBox(以及所有其他flex容器)具有cornerRadius样式,但它适用于所有拐角。我没有看到一种方法来指定各个角的样式 是否有任何内置方法可以做到这一点,或者我是否需要编写自己的自定义绘图代码来绘制圆角背景?这取决于您使用的边框蒙皮。如果使用内置蒙皮(HaloBorder),则有一种样式可以指定“roundedBottomCorners”(这是一种布尔值),允许您控制底角是否为圆角。如果您使用自己的边界蒙皮,则可以添加任何想要控制角的样式。这

我正在尝试在flex中创建一个只圆角的
HBox
HBox(以及所有其他flex容器)具有
cornerRadius
样式,但它适用于所有拐角。我没有看到一种方法来指定各个角的样式


是否有任何内置方法可以做到这一点,或者我是否需要编写自己的自定义绘图代码来绘制圆角背景?

这取决于您使用的边框蒙皮。如果使用内置蒙皮(HaloBorder),则有一种样式可以指定“roundedBottomCorners”(这是一种布尔值),允许您控制底角是否为圆角。如果您使用自己的边界蒙皮,则可以添加任何想要控制角的样式。

这取决于您使用的边界蒙皮。如果使用内置蒙皮(HaloBorder),则有一种样式可以指定“roundedBottomCorners”(这是一种布尔值),允许您控制底角是否为圆角。如果您使用自己的边框蒙皮,您可以添加任何想要控制角的样式。

唉,我知道的唯一解决方案是自己绘制背景,使用编程蒙皮——特别是orderriding RectangularBorder::

package
{
    import mx.skins.RectangularBorder;

    public class HBoxSkin extends RectangularBorder
    {
        public function HBoxSkin()
        {
            super();
        }

        override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
        {
            super.updateDisplayList(unscaledWidth, unscaledHeight);

            var cr:Number = getStyle("cornerRadius");
            var bc:Number = getStyle("backgroundColor");

            graphics.clear();
            graphics.beginFill(bc, 1);

            // Draw the rectangle manually, rounding only the top two corners
            graphics.drawRoundRectComplex(0, 0, unscaledWidth, unscaledHeight, cr, cr, 0, 0);
            graphics.endFill();
        }
    }
}
。。。然后使用HBox的borderSkin属性应用更改:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

    <!-- Apply the skin using the borderSkin property of your HBox -->
    <mx:HBox borderSkin="HBoxSkin" backgroundColor="#FFFFFF" cornerRadius="10" height="100" width="100" top="10" left="10" />

</mx:Application>


本章介绍了如何实现编程蒙皮。不幸的是,这已经超出了初学者的水平(这在Flex4中变得容易多了),但是如果您按照我的示例和文档中的代码进行操作,您应该能够将一些东西结合起来。祝你好运

唉,我所知道的唯一解决方案是自己绘制背景,使用编程蒙皮——特别是orderriding RectangularBorder::

package
{
    import mx.skins.RectangularBorder;

    public class HBoxSkin extends RectangularBorder
    {
        public function HBoxSkin()
        {
            super();
        }

        override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
        {
            super.updateDisplayList(unscaledWidth, unscaledHeight);

            var cr:Number = getStyle("cornerRadius");
            var bc:Number = getStyle("backgroundColor");

            graphics.clear();
            graphics.beginFill(bc, 1);

            // Draw the rectangle manually, rounding only the top two corners
            graphics.drawRoundRectComplex(0, 0, unscaledWidth, unscaledHeight, cr, cr, 0, 0);
            graphics.endFill();
        }
    }
}
。。。然后使用HBox的borderSkin属性应用更改:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

    <!-- Apply the skin using the borderSkin property of your HBox -->
    <mx:HBox borderSkin="HBoxSkin" backgroundColor="#FFFFFF" cornerRadius="10" height="100" width="100" top="10" left="10" />

</mx:Application>


本章介绍了如何实现编程蒙皮。不幸的是,这已经超出了初学者的水平(这在Flex4中变得容易多了),但是如果您按照我的示例和文档中的代码进行操作,您应该能够将一些东西结合起来。祝你好运

连皮都没看过。我只是在使用默认设置。我会试试圆形底角的方法,看看是否有效。有没有相反的方法?圆角底角而非顶部?圆角底角不适用于HBox。@Christian-可能没有文档记录,但对我有效。您使用的框架版本是什么?我只是好奇,因为它不是为我编译的(3.4使用FlexBuilder3,但Flex3.2也不是),甚至从来没有看过皮肤。我只是在使用默认设置。我会试试圆形底角的方法,看看是否有效。有没有相反的方法?圆角底角而非顶部?圆角底角不适用于HBox。@Christian-可能没有文档记录,但对我有效。您使用的框架版本是什么?我只是好奇,因为它不是为我编译的(3.4使用FlexBuilder 3,但Flex 3.2也不是)。这比原始问题所需的复杂得多,但它仍然对我很有帮助。稍后我需要一个HBox,它可以任意圆角,看起来我可以很容易地调整它使其工作。这比原始问题需要的复杂,但它仍然对我很有帮助。我以后需要一个HBox,它可以任意圆角,看起来我可以很容易地调整它,使其工作。