Apache flex 用图形绘制的矩形显示在BorderContainer的背景下

Apache flex 用图形绘制的矩形显示在BorderContainer的背景下,apache-flex,drawing,Apache Flex,Drawing,在从BorderContainer继承的Flex组件中,我将重写updateDisplayList函数以绘制一个rect: override protected function updateDisplayList(unscaledWidth : Number, unscaledHeight : Number) : void { this.graphics.clear(); super.updateDisplayList(unscaledWidth, unscaledHeight

在从BorderContainer继承的Flex组件中,我将重写updateDisplayList函数以绘制一个rect:

override protected function updateDisplayList(unscaledWidth : Number, unscaledHeight : Number) : void
{
    this.graphics.clear();
    super.updateDisplayList(unscaledWidth, unscaledHeight); // If ommited the rect is shown properly
    drawRects(); // Just calls graphics.drawRoundedRect
}

问题是我绘制的矩形显示在容器的白色背景下,而不是在其顶部绘制。如果我删除对super.updateDisplayList的调用,我会看到正确绘制的rect。我做错了什么?

是的,使用图形API将始终绘制到实际的精灵,在所有东西下面。不要使用图形,而是使用诸如Rect之类的Spark基本体

AS3:

MXML:



编辑:如果您没有使用Spark,那么我想解决方案应该是使用一个轻量级图形组件(很抱歉,我对MX的了解非常有限),并在该组件上使用图形API。这样,diplay顺序就可以工作了。

是的,使用图形API将始终绘制到实际的精灵,在所有东西下面。不要使用图形,而是使用诸如Rect之类的Spark基本体

AS3:

MXML:



编辑:如果您没有使用Spark,那么我想解决方案应该是使用一个轻量级图形组件(很抱歉,我对MX的了解非常有限),并在该组件上使用图形API。那样的话,diplay顺序就应该起作用了。

请点击这里。似乎通过将绘图代码移动到我的组件的皮肤上,一切都按预期工作。

OP here。似乎通过将绘图代码移动到我的组件外壳上,一切都按预期工作。

恐怕Spark不是一个选项。我需要快速绘制数千个矩形。您想要哪种轻量级组件?正如我所说,我不熟悉MX组件,但是实现IVisualElement的最基本的显示对象就可以了。可能是mx:Container或mx:UIComponent?UIComponent是最轻的组件。下一步,你必须处理Sprite,Flex处理得很差。恐怕Spark不是一个选项。我需要快速绘制数千个矩形。您想要哪种轻量级组件?正如我所说,我不熟悉MX组件,但是实现IVisualElement的最基本的显示对象就可以了。可能是mx:Container或mx:UIComponent?UIComponent是最轻的组件。接下来,您将不得不处理Sprite,它在Flex中处理得很差。
var rect:Rect = new Rect();
rect.id = "backgroundRect";
rect.fill = new SolidColor();
rect.fill.color = 0xFFFFFF;
addElement(rect);
<s:Rect id="backgroundRect" left="0" right="0" top="0" bottom="0"  >
    <s:fill>
        <s:SolidColor color="#FFFFFF"/>
    </s:fill>
</s:Rect>